problème avec photos

Eléphant du PHP | 96 Messages

21 sept. 2008, 20:41

Bonsoir,
J'ais mis en place un système permettant de modifier des images sur un site en passant par une admin seulement voila il y a un drole de problème voyez cela par vous même http://www.restaurantmarbella.net/restaurant.php et lorsque je vais sur l'admin permettant de modifier les photos je selectionne le dossier et dans chaque dossier je trouve un fichier invisible (je pense que c'est ça) appelé . et un autre appelé .., vous pouvez voir cela sur http://www.restaurantmarbella.net/admin_images.php
Voici les 2 fichiers
admin_images.php permettant la modif des images

Code : Tout sélectionner

<?php include("images.class.php"); function getextension($fichier) { $bouts = explode(".", $fichier); $extension = array_pop($bouts); return $extension; } if ($_POST['action'] == "ajouter") { if ($image && !empty($_POST['repertoire']) && !empty($_POST['mot_de_passe'])){ if ($_POST['mot_de_passe'] == "XXX") { if ($_POST['repertoire'] == "resto1" || $_POST['repertoire'] == "resto2" || $_POST['repertoire'] == "resto3" ||$_POST['repertoire'] == "resto4" || $_POST['repertoire'] == "resto5" || $_POST['repertoire'] == "resto6" ||$_POST['repertoire'] == "soiree1" || $_POST['repertoire'] == "soiree2" ||$_POST['repertoire'] == "soiree3" ||$_POST['repertoire'] == "soiree4" ) { $repertoire = $_POST['repertoire']; $extension = strtolower(getextension($image_name)); if ($extension == "jpg" || $extension == "png" || $extension == "bmp" || $extension == "gif") { $imag = new images(); $imag->repertoire = $repertoire; if ($imag->ajouter_image($image, $image_name)) echo "<font face=\"Verdana\">Le fichier " . $image_name . " a bien été envoyé.</font>"; else echo "<font face=\"Verdana\">Une erreur s'est produite !</font>"; } else echo "<font face=\"Verdana\">Extension interdite !</font>"; } else echo "<font face=\"Verdana\">Repertoire interdit !</font>"; } else echo "<font face=\"Verdana\">Mot de passe incorrect !</font>"; } else echo "<font face=\"Verdana\">Formulaire incomplet !</font>"; } else if ($_POST['action'] == "supprimer") { if (!empty($_POST['image']) && !empty($_POST['mot_de_passe'])) { if ($_POST['mot_de_passe'] == "XXX") { $extension = strtolower(getextension($image)); if ($extension == "jpg" || $extension == "png" || $extension == "bmp" || $extension == "gif" || $extension == "jpeg") { if (@unlink($image)) echo "<font face=\"Verdana\">L'image <b>$image</b> a bien été suprimé !</font>"; else echo "<font face=\"Verdana\">Une erreur s'est produite !</font>"; } else echo "<font face=\"Verdana\">Extension interdite !</font>"; } else echo "<font face=\"Verdana\">Mot de passe incorrect !</font>"; } else echo "<font face=\"Verdana\">Formulaire incomplet !</font>"; } ?> <html> <body> <form action="admin_images.php" method="post"> <input type="hidden" name="action" value="supprimer"> <table> <tr> <td><font face="Verdana">Image à supprimer :</font></td> <td><select name="image"> <option></option> <option value="">+++ resto1 +++</option> <?php $images1 = new images(); $images1->repertoire = "resto1"; $images1->liste_select(); ?> <option value="">+++resto2+++</option> <?php $images2 = new images(); $images2->repertoire = "resto2"; $images2->liste_select(); ?> <option value="">+++ resto3 +++</option> <?php $images3 = new images(); $images3->repertoire = "resto3"; $images3->liste_select(); ?> <option value="">+++ resto4 +++</option> <?php $images4 = new images(); $images4->repertoire = "resto4"; $images4->liste_select(); ?> <option value="">+++resto5+++</option> <?php $images5 = new images(); $images5->repertoire = "resto5"; $images5->liste_select(); ?> <option value="">+++ resto6 +++</option> <?php $images6 = new images(); $images6->repertoire = "resto6"; $images6->liste_select(); ?> <option value="">+++ soiree1 +++</option> <?php $images7 = new images(); $images7->repertoire = "soiree1"; $images7->liste_select(); ?> <option value="">+++ soiree2 +++</option> <?php $images8 = new images(); $images8->repertoire = "soiree2"; $images8->liste_select(); ?> <option value="">+++ soiree3 +++</option> <?php $images9 = new images(); $images9->repertoire = "soiree3"; $images9->liste_select(); ?> <?php $images10 = new images(); $images10->repertoire = "soiree4"; $images10->liste_select(); ?> </select></td> </tr> <tr> <td><font face="Verdana">Mot de passe :</font></td> <td><input type="password" name="mot_de_passe"></td> </tr> <tr> <td><input type="submit" value="Supprimer l'image !" style="color: #FF0000;"></td> </tr> </table> </form> <hr> <form action="admin_images.php" method="post" enctype="multipart/form-data"> <input type="hidden" name="action" value="ajouter"> <table> <tr> <td><font face="Verdana">Repertoire de destination :</font></td> <td><select name="repertoire"> <option></option> <option value="resto1">resto1</option> <option value="resto2">resto2</option> <option value="resto3">resto3</option> <option value="resto4">resto4</option> <option value="resto5">resto5</option> <option value="resto6">resto6</option> <option value="soiree1">soiree1</option> <option value="soiree2">soiree2</option> <option value="soiree3">soiree3</option> <option value="soiree4">soiree4</option> </select></td> </tr> <tr> <td><font face="Verdana">Fichier à envoyer :</font></td> <td><input type="file" name="image"></td> </tr> <tr> <td><font face="Verdana">Mot de passe :</font></td> <td><input type="password" name="mot_de_passe"></td> </tr> <tr> <td><input type="submit" value="Envoyer image"></td> </tr> </table> </form> <hr> <a href="index.php">Retour à l'accueil</a> </body> </html>
et le fichier gérant les photos image.class.php

Code : Tout sélectionner

<?php class images { var $repertoire; var $nb_par_ligne; function ajouter_image($image,$nom) { if (is_dir($this->repertoire)) { if (copy($image, $this->repertoire . "/" . $nom)) return true; else return false; } else return false; } function lister_repertoire() { $liste = array(); if (is_dir($this->repertoire)) { if ($pointeur = opendir($this->repertoire)) { while (($fichier = readdir($pointeur)) !== false) { if (!is_dir($this->repertoirte . "/" . $fichier)) { $liste[] = $fichier; } } closedir($pointeur); return $liste; } else return false; } else return false; } function liste_select() { $liste = $this->lister_repertoire(); for ($i = 0; $i < count($liste); $i++) { echo " <option value=\"$this->repertoire/$liste[$i]\">$liste[$i]</option>\n"; } } function afficher_liste($lien) { $liste = $this->lister_repertoire(); echo "<table summary=\"table d'images\">\n"; for ($i = 0; $i < count($liste); $i++) { $nom = explode(".", $liste[$i]); $nom = str_replace("_", " ", $nom[0]); $nom = str_replace("-", " ", $nom); $nom = strtoupper(substr($nom, 0, 1)) . substr($nom, 1); if (round($i/$this->nb_par_ligne) == ($i/$this->nb_par_ligne)) echo " <tr>\n"; if( isset($lien) && !empty($lien) ) { $lien_avant = '<a href="'.$lien.'">'; $lien_apres = '</a>'; } else { $lien_avant = ''; $lien_apres = ''; } echo " <td align=\"center\">" . $lien_avant . $this->afficher_image($liste[$i]) . $lien_apres ."<br></td>\n"; if (round(($i+1)/$this->nb_par_ligne) == (($i+1)/$this->nb_par_ligne) || ($i+2) > count($liste)) echo " </tr>\n"; } echo "</table>\n"; } function afficher_image($fichier) { return "<img width=\"200px\" src=\"" . $this->repertoire . "/" . $fichier . "\" alt=\"" . $fichier . " - " . round((filesize($this->repertoire. "/" . $fichier)/1024), 2) . " ko\">"; } } ?>
Merci d'avance pour l'aide

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

21 sept. 2008, 21:47

Bonjour,

"." représente le répertoire courant
".." représente le répertoire parent

Par conséquent dans ton script, quand tu listes tes fichiers via un while, il faut que tu ignores "." et "..".
      while (($fichier = readdir($pointeur)) !== false) {
        if (is_dir($this->repertoirte . "/" . $fichier) || $fichier=="." || $fichier=="..") continue;
        $liste[] = $fichier;
      } 
http://fr.php.net/continue


Sinon, regarde du côté de la fonction PHP blob(), elle devrait te permettre d'économiser quelques lignes de code ;)
http://fr.php.net/blob
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 96 Messages

21 sept. 2008, 22:04

Merci ça fonctionne par contre j'ais tjrs les messages d'erreur qui apparaissent en plus des photoshttp://www.restaurantmarbella.net/restaurant.php
En ce qui concerne la ligne de code 19, il s'agit de la ligne modifiée
lignes 17 à 21:

Code : Tout sélectionner

if ($pointeur = opendir($this->repertoire)) { while (($fichier = readdir($pointeur)) !== false) { if (is_dir($this->repertoirte . "/" . $fichier) || $fichier=="." || $fichier=="..") continue; $liste[] = $fichier; }

Eléphant du PHP | 96 Messages

23 sept. 2008, 07:28

j'ais ce message d'erreur:

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/.) is not within the allowed path(s): (d:/www/restaurantmarbella.net/htdocs) in D:\www\restaurantmarbella.net\htdocs\images.class.php on line 19
Comment faire pour que ce D:\ s'enlève