Warning: unlink no such file or directory

Billionaireboy
Invité n'ayant pas de compte PHPfrance

23 juil. 2012, 21:53

Bonjour,

Pourriez vous m'aider à résoudre u petit problème d'unlink svp?
J'ai fait pas mal de forum mais je n'ai pas encore trouvé de soluce...

Voici mon message d'erreur:
Warning: unlink(photos/photo-1228-1-medium.png) [function.unlink]: No such file or directory in /homez.541/site/www/includes/db.php on line 1538
Warning: unlink(photos/photo-1228-1-medium.gif) [function.unlink]: No such file or directory in /homez.541/site/www/includes/db.php on line 1538
Warning: unlink(photos/photo-1228-1-medium.jpg) [function.unlink]: No such file or directory in /homez.541/site/www/includes/db.php on line 1538
Warning: unlink(photos/photo-1228-1-medium.jpeg) [function.unlink]: No such file or directory in /homez.541/site/www/includes/db.php on line 1538

Mon code est le suivant:

Code : Tout sélectionner

function db_delete_advert_photo($id, $num) { debug("db_delete_advert_photo(id = '$id', num = '$num')"); $id = (int)$id; $num = (int)$num; foreach ( array('png', 'gif', 'jpg', 'jpeg') as $ext ) { unlink("photos/photo-$id-$num-medium.$ext"); }
Les images existes bien.
J'ai aussi essayer des orthographes différents tel que:
unlink(/photos/photo-1228-1-medium.jpeg)
unlink(../photos/photo-1228-1-medium.jpeg)
unlink(photos\photo-1228-1-medium.jpeg)
unlink(\photos\photo-1228-1-medium.jpeg)

Merci pour votre aide ;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 juil. 2012, 22:08

Le problème est - comme l'indique le message d'erreur de php - que le chemin ou le fichier que tu indiques n'existe pas là où tu demandes à php de le supprimer. Si tes dossiers et fichiers existent bien, c'est donc un problème de chemin entre ton script php et ton fichier à supprimer.

A priori, tu as un script "db.php" placé dans le dossier "includes/" et qui tente de supprimer les fichiers "photo-1228-1-medium.png" dans le répertoire "photos/". Il essaye donc d'accéder au fichier dans le dossier "includes/photos/" est-ce bien là que l'image se trouve ?

A noter que tu tentes de supprimer 4 fichiers avec respectivement les extensions png, gif, jpg et jpeg. Est-ce que ces 4 fichiers existent bien ? ou est-ce que tu n'en as qu'un dont tu ignores l'extension ? (auquel cas, tu auras toujours 3 messages d'erreur puisque les autres fichiers n'existent pas).
Nota : Tu peux tester l'existence d'un fichier avant de faire appel à unlink() avec file_exists() :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Billionaireboy
Invité n'ayant pas de compte PHPfrance

23 juil. 2012, 22:21

Le dossier "photos" est au meme niveau que le dossier "includes" c'est à dire que includes/photos n'existe pas.
Cette 4 fichiers existent bien effectivement.

Précision importante: le script fonctionnait trés bien avant migration du site.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 juil. 2012, 23:25

Et le script que tu exécutes (dont tu passes l'url dans le navigateur) c'est db.php ou c'est un autre script qui fait un include de ton db.php ? (et si c'est un autre script, celui-ci est-il placé à la racine de ton site, au même niveau que includes ou photos, ou est-il dans un autre dossier ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 8 Messages

24 juil. 2012, 07:55

moi je n'utilise jamais les simplifications php

au lieu de :
unlink("photos/photo-$id-$num-medium.$ext");

j'écris
unlink("photos/photo-".$id."-".$num."-medium.".$ext");

à voir peut être ...
Que celui qui n’a pas traversé ne se moque pas de celui qui s’est noyé ...

Billionaireboy
Invité n'ayant pas de compte PHPfrance

24 juil. 2012, 08:20

Ryle,

C'est un fichier db.php qui se trouve dans le dossier includes.

Nanounel,

J'ai essayer ça ne me donne rien. J'avais une erreur de syntax et en récrivant le code correctement (sans " à la fin) j'ai le meme message d'erreur.
Code réécrit:

Code : Tout sélectionner

"photos/photo-".$id."-".$num."-medium.".$ext

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 juil. 2012, 16:20

Ah ben si tu appelles directement db.php, le problème vient de la :)

Le dossier photos ne se trouve pas dans le répertoire du script, mais dans le répertoire parent. Le chemin pour la suppression depuis db.php devrait donc être "../photos/photo-..."

Et il vaut mieux effectivement sortir les variables des chaines pour la lisibilité du code (avec les balises
 et les couleurs c'est encore plus flagrant), mais ça ne change pas grand chose dans ton cas :)
[php]unlink("photos/photo-$id-$num-medium.$ext");

unlink('photos/photo-' . $id . '-' . $num . '-medium.' . $ext);
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Billionaireboy
Invité n'ayant pas de compte PHPfrance

24 juil. 2012, 20:17

Le truc c'est que le dossier était bien la avant la migration.
Comment est-ce que je peut lui dire d'aller dans ce dossier sans déplacer le dossier?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 juil. 2012, 21:17

C'est bizarre ton histoire... c'est quoi cette migration ?
Et tu me confirmes bien que l'url que tu appelles dans la barre d'adresse de ton navigateur, c'est bien "http://ton_site/includes/db.php" ?

Si c'est bien cela, à priori, tu as juste à ajouter "../" au début du chemin de ton unlink pour qu'il remonte d'un dossier pour trouver le répertoire "photos" :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Billionaireboy
Invité n'ayant pas de compte PHPfrance

24 juil. 2012, 21:45

Juste un transfert mais j'ai constaté un bug à un autre niveau: une commande n'était pas reconnu, j'ai du la remplacer par une autre similaire.
Je te confirme en meme temps que je suis bien débutant ;)

Le fichier appelé n'est pas bd.php, il s'agit d'un lien qui permet de supprimer le fichier en question. Cependant comme l'erreur l'indique il s'agit d'une commande sur le db.php.

Toujours le meme problème avec le code suivant:
unlink('../photos/photo-' . $id . '-' . $num . '-medium.' . $ext);

Eléphanteau du PHP | 34 Messages

24 juil. 2012, 22:24

Le plus simple, ce serait d'avoir l'arborescence du projet. On pourrait vérifier la validité des chemins :mrgreen:
These lines the last endeavor,
To find the missing lifeline.

Billionaireboy
Invité n'ayant pas de compte PHPfrance

24 juil. 2012, 22:35

L'arborescence des fichiers interessants est la suivante:

Code : Tout sélectionner

www fichier_de_suppression.php Includes db.php Photos photo-1245-1-medium.png photo-1245-1-medium.gif photo-1245-1-medium.jpg photo-1245-1-medium.jpeg

Merci pour ton aide, je sait que ce n'est pas trés facile comme ça :)

Billionaireboy
Invité n'ayant pas de compte PHPfrance

24 juil. 2012, 22:41

Oups les espaces n'ont pas été pris en compte:

www

www/fichier_de_suppression.php

www/Includes
www/includes/db.php

www/Photos
www/Photos/photo-1245-1-medium.png
www/Photos/photo-1245-1-medium.gif
www/Photos/photo-1245-1-medium.jpg
www/Photos/photo-1245-1-medium.jpeg

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 juil. 2012, 22:43

Ok, alors on oublie le problème de chemin, celui-ci est bon :)

A mon avis, tu as du passer d'un serveur Windows vers un serveur Linux, ce dernier étant sensible à la casse : "Photos" et "photos" ne sont pas les mêmes répertoires...

Il faut garder une cohérence entre les noms de tes répertoires et le chemin utilisé dans ton unlink :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Billionaireboy
Invité n'ayant pas de compte PHPfrance

24 juil. 2012, 22:51

Oui j'ai vérifier ça et les espace aussi mais j'ai les noms correspondent bien ...
Mais effectivement j'ai mis des majuscules ici que je n'ai aps en vrai.

Le warning indique que le fichier est recherché dans le fichier db.php comment ça se fait puisqu'on lui dit d'aller dans le repertoire photo?