Probleme avec la fonction unlink

Probleme avec la fonction unlink - PHP - Programmation

Marsh Posté le 31-07-2008 à 13:48:00    

Bonjour,
 
Depuis plusieurs jours j'essaye de faire marcher la fonction unlink afin de pouvoir effacer des photos de ma galerie !  
En Local sous Wamp tout marche comme sur des roulettes mais une fois en ligne chez OVH, impossible de supprimer une photo !
Le script ne trouve pas le fichier et/ou dossier alors qu'il existe bel et bien !
 

Code :
  1. <?php
  2. include('fonction.php');
  3. connexionbdd();
  4. $theme=$_GET['theme'];
  5. $photo=$_GET['photo'];
  6. $img_grande = "/".$theme."/images/".$photo." ";
  7. $img_mini =  "/".$theme."/miniatures/mini_".$photo."";
  8. if(file_exists($img_grande) && file_exists($img_mini))
  9. {
  10. $result= (unlink("$img_grande" ) && unlink("$img_mini" ))? "Suppression réalisée" : "echec de la suppression";
  11. echo 'Suppression réalisée  dans '.$img_grande.'<br/>' ;
  12. }
  13. else
  14. {echo"le fichier n'existe pas dans ce repertoire! upload/galeries/".$theme."/images/".$photo." <br>";
  15. }
  16. ?>


 
Ce script me genere une erreur : Warning: unlink(../upload/galeries/DDDD/images/raid.jpg ) [function.unlink]: No such file or directory in /home.10.7/espaceje/www/effacer.php on line 16
Un topic equivalent avait déja été traité ici http://forum.hardware.fr/hfr/Progr [...] 7427_1.htm
Mais ça ne me permet pas d'avancer.
Si quelqu'un pouvait m'aider ce serait cool

Reply

Marsh Posté le 31-07-2008 à 13:48:00   

Reply

Marsh Posté le 31-07-2008 à 15:39:40    

Cela ressemble au problème classique du chemin absolu (chemin qui commence par "/" ), car la racine n'est pas la même en local et sur un serveur. Est-ce que vous ne pourreiz pas utiliser un chemin relatif plutôt (chemin dont le premier caractère n'est pas "/" ), comme dans les exemples du lien que vous avez indiqué ?

Reply

Marsh Posté le 31-07-2008 à 16:02:55    

olivthill a écrit :

Cela ressemble au problème classique du chemin absolu (chemin qui commence par "/" ), car la racine n'est pas la même en local et sur un serveur. Est-ce que vous ne pourreiz pas utiliser un chemin relatif plutôt (chemin dont le premier caractère n'est pas "/" ), comme dans les exemples du lien que vous avez indiqué ?


+1


---------------
NOUVEAU! à vendre : Rolleiflex SL66
Reply

Marsh Posté le 31-07-2008 à 20:28:28    

C'est-à-dire, mettre './' à la place de '/', en début de chemin.
 
Par exemple :
$img_grande = "./".$theme."/images/".$photo." ";


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 02-08-2008 à 14:48:40    

Merci  
Je teste ça en fin de week end et vous tient au courant

Reply

Marsh Posté le 04-08-2008 à 17:31:29    

Mais mon chemin est un chemin relatif, c'est juste que je suis au debut de mon arborescence !
 
J'ai testé avec le './' à la place de '/' ça ne change rien, il ne trouve toujours pas mon dossier ... :(
 
Bon finalement après pleins de prises de têtes, j'ai viré la condition d'existence des fichiers,  
J'ai toujours le warning, MAIS les photos n'apparaissent plus , ne sont plus linkés et la base de donnée n'a plus de trace d'eux...  
Je comprend pas trop
On dirait que c'est la fonction file_exists qui pose problème... !


Message édité par zipolo le 04-08-2008 à 17:45:23
Reply

Marsh Posté le 05-08-2008 à 07:07:48    

file_exists, unlink et toutes les fonctions liées au système de fichier se basent sur la racine système et non la racine web (DOCUMENT_ROOT).
 
Il faut donc un $_SERVER['DOCUMENT_ROOT'] en début de chemin si tu veux pointer en absolu sur un truc qui est dans ton arbo web.
 
Et au passage, y a une énorme faille de sécurité sur ce que tu postes. Ne construis pas des path avec des choses fournies par l'utilisateur sans les avoir vérifiés avant. :o


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 05-08-2008 à 16:36:46    

sielfried a écrit :

file_exists, unlink et toutes les fonctions liées au système de fichier se basent sur la racine système et non la racine web (DOCUMENT_ROOT).
 
Il faut donc un $_SERVER['DOCUMENT_ROOT'] en début de chemin si tu veux pointer en absolu sur un truc qui est dans ton arbo web.
 
Et au passage, y a une énorme faille de sécurité sur ce que tu postes. Ne construis pas des path avec des choses fournies par l'utilisateur sans les avoir vérifiés avant. :o


 
J'ai deja testé avec $_SERVER['DOCUMENT_ROOT'] ( enfin j'avais mis le chemin à la main ce qui revient au même). Je comprend plus... IL faut que je pointe en relatif , en absolu ?  
Pourquoi j'ai un Warning alors que la suppression a bien lieu ?
 
Pour la faille, si l'utilisateur c'est moi et que ça reste moi ça pose réellement un problème ?
 
 
EDIT  : J'ai testé differentes ecritures pour le unlink, rine ne marchait jusqu'à ce que je fasse ceci :  
 
AVANT :
$result= (unlink("$img_grande" ) && unlink("$img_mini" ))? "Suppression réalisée" : "echec de la suppression";
 
APRES  
 
$result= (unlink('montheme/images/mcforest.jpg" ') && unlink('Pareil mais pr les miniatures' ))? "Suppression réalisée" : "echec de la suppression";
 
 
J'ai remplacé le chemin donné en variable par le chemin fixe d'une image, remplace les " par des simples ' et la le message de Warning disparait...  
Ca ne devrait donc pas etre un probleme de chemin puisque quand je donne le chemin sans variables tout roule...
Reste le probleme des variables justement... je ne peux pas creer un fichier pour chaque photo uploadé, il me faut ces variables dans le chemin...

Message cité 1 fois
Message édité par zipolo le 05-08-2008 à 17:56:15
Reply

Marsh Posté le 05-08-2008 à 22:48:14    

zipolo a écrit :


 
J'ai deja testé avec $_SERVER['DOCUMENT_ROOT'] ( enfin j'avais mis le chemin à la main ce qui revient au même). Je comprend plus... IL faut que je pointe en relatif , en absolu ?  


 
Il faut que le chemin soit bon. Relatif, absolu, les deux sont toujours valides. [:spamafote]  
 
Fais voir un peu à quoi ressemble ton arborescence, et où se trouvent tes "thèmes" à l'intérieur.

Message cité 1 fois
Message édité par sielfried le 05-08-2008 à 22:48:47

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 08-08-2008 à 13:32:45    

sielfried a écrit :


 
Il faut que le chemin soit bon. Relatif, absolu, les deux sont toujours valides. [:spamafote]  
 
Fais voir un peu à quoi ressemble ton arborescence, et où se trouvent tes "thèmes" à l'intérieur.


 
 
Mon arbo :
 
 
/www/
-------
-------upload/
--------------galeries/
----------------------Dossier_1/ (theme )
--------------------------------images/
 
Quand j'ai posté ici je testais mon fichier effacer.php dans galeries, sinon il est a la racine au niveau www, m'enfin ça ne change rien il suffit de rajouter upload/galeries !
 

Reply

Marsh Posté le 08-08-2008 à 13:32:45   

Reply

Marsh Posté le 21-08-2008 à 11:28:58    

plus simple : user le @unlink("$path/tonfichier.jpg" ); au moins ça retourne pas de warning si ça marche pas :D
unlink("upload" );//reste une valeur bien plus sûre :D


Message édité par grosbin le 21-08-2008 à 11:29:42

---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 21-08-2008 à 16:54:22    

tu pourrais utiliser la fonction realpath()

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed