Bonsoir,
je viens d'essayer ftp_delete ; comme il faut d'abord faire un ftp_connect, je l'ai fait, mais il me dit : undefined function... (c'est chez Free).
Bonsoir,
je viens d'essayer ftp_delete ; comme il faut d'abord faire un ftp_connect, je l'ai fait, mais il me dit : undefined function... (c'est chez Free).
Chez free, je place un fichier dans un repertoire upload
je fais
le fichier est supprimé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part unlink("upload/fichier.jpg");
Si je mets un mauvais répertoire ou un mauvais fichier ca fait une belle erreur.
Si tu n'obtiens pas ces résultats c'est que tu fais d'autres choses dans ton code que tu ne nous dis pas ou que le fichier est bel et bien supprimé.
Je suis de cette avis.Si tu n'obtiens pas ces résultats c'est que tu fais d'autres choses dans ton code que tu ne nous dis pas ou que le fichier est bel et bien supprimé.
Encore un nouvel essai pour tenter de mieux comprendre ton problème.
Crée un fichier (genre supprimer.php) avec uniquement ce code :L'idéal serait de faire cet essai à la racine du domaine.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 <?php file_put_contents('supprimer.txt', 'bla_bla_bla'); // if (file_exists("supprimer.txt")) { echo 'Fichier est présent<br />'; // if (function_exists("unlink")) { if (unlink("supprimer.txt")) { echo 'Fichier supprimé.<br />'; } else { echo 'Fichier non supprimé.<br />'; } } else { echo 'Erreur avec la fonction unlink()<br />'; } } else { echo 'Fichier non présent<br />'; } ?>
Si le fichier ne se supprime pas, alors il faut chercher des infos du coté de ton hébergeur.
Quand est il de cette fonction unlink() ?
Les droits sur les fichiers/répertoires ?
En fait, le unlink marche bien si je mets le fichier à la racine, mais pas s'il est dans un répertoire, mais je ne vois pas ce qui ne pas ce qui ne va pas. (Et là, ce n'est pas chez Free, mais 1&1) Pouvez-vous me le dire ?(En fait, le code PHP est dans un répertoire nommé "upload", qui contient lui-même un sous-répertoire nommé aussi "upload".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $path="/upload/"; $file="bebes.bmp"; foreach ($file as $nom_fichier) { unlink($_SERVER['DOCUMENT_ROOT'].$path.$nom_fichier); }
Comme ça ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part unlink("upload/" . $nom_fichier);
Comme ça :ça ne marche pas non plus
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $file="bebes.bmp"; foreach ($file as $nom_fichier) { unlink("upload/" . $nom_fichier); }
Evite les complications, fais au plus simple, soit indiquer des chemins "en dur" dans un 1er temps.
Faut avant tout comprendre pourquoi ça ne supprime pas.
Le dernier essai était là pour affirmer que la fonction unlink() était fonctionnelle.
Maintenant reste 2 autres questions :
- les droits (j'y crois moyennement)
- Une erreur sur le chemin ou le nom du fichier. C'est ce qui me semble le plus probable.
Pour en connaitre la cause, rien de tel que du code simple. Après on rend le truc plus "dynamique".
Pour faire simple, essai ceci :
Si tu est certain que là où tu exécute le unlink() il y a un répertoire "upload" et que dans ceclui ci se trouve "bebes.bmp" et qu'il ne se supprime pas, et bien vérifie, observe même s'il n'y aurait pas un espace " upload", ou "uplo ad",une majuscule, caractère spéciaux, etc ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <?php unlik("upload/bebes.bmp"); ?>
Renomme les au besoin.
C'est des coups à y passer des nuits.
A savoir que ceci ne peut pas fonctionner car un foreach() attend un tableau. On t'a déjà fais la remarque.$file="bebes.bmp";
foreach ($file as $nom_fichier) {
unlink("upload/" . $nom_fichier);
}
Si le nom du fichier ce trouve dans une variable (pas un tableau), exploite simplement cette variable.
Si tu as plusieurs fichiers stockés dans un tableau, alors un foreach() sera approprié.
Exemple :
$file et nom $nom_fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $file = "bebes.bmp"; unlink("upload/" . $file);
Puis "upload/" et non "/upload/"
Faut éviter de genre d'erreurs.
Je t'ai déjà dit en première page qu'il fallait un tableau pour que le test puisse fonctionner.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ça ne marche pas non plus
En fait, ceci marche :, mais pas ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $nom_fichier="bebes.bmp; unlink("upload/".$nom_fichier);Comme $file est bien un tableau, ça devrait convenir pour le foreach, donc qu'est-ce qui ne va pas ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <?php $nbfiles=sizeof($_POST["fichier"]); $file=$_POST["fichier"]; for ($i=0;$i<$nbfiles;$i++) { $path="upload/"; echo "<br>Fichier a effacer :".$path.$file[$i]."<br>"; } foreach ($file as $nom_fichier) { unlink("upload/".$nom_fichier);} ?>
OkEnvoyé par laurentSc
Non ... oui ... enfin non, à défaut d'autres infos ou rebondissement.Envoyé par laurentSc
En faisant ceci $file=$_POST["fichier"]; tu affecte la valeur de $_POST["fichier"] à la variable $file.
$file est donc une simple variable.
Si tu avais fait ceci : $file=$_POST;, alors $file aurait été un tableau ... identique à $_POST.
Vois tu mieux la différence ?
Ce qui fait que tout le reste tombe à l'eau.
Cependant, vu que tu insiste beaucoup sur le fait de vouloir boucler sur un tableau, est ce que par hasard tu ne souhaiterais pas supprimer plusieurs fichiers ?
En tout cas, pour qu'on puisse en juger, faudrait avoir le code du formulaire qui renvoie ces données en POST.
Sans cela il sera impossible d'en dire plus.
Oui, mais j'avais pris $file pour un tableau à cause de la notation $file[$i]. Sinon, voici le formulaire : il y a bien plusieurs fichiers, vu que je fais un select :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 echo "if ($handle = opendir('.')) { echo "<FORM action=\"action_effacer.php\" method=\"post\">"; <SELECT multiple name=\"fichier[]\" SIZE=4>"; while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { echo "<option value=\"".$file."\n\">"; echo $file."\n"; echo "</option>"; } } echo "</SELECT><br>"; echo '<input name="envoyer" value="Effacer les fichiers" type="submit">'; echo "</FORM>"; closedir($handle); }
Commence d'abord par corriger les erreurs de syntaxes comme pour le 1er echo par exemple, etc ..., et surtout supprime les retours chariots que tu as mis sur le nom des fichiers (t'as déjà vu ça ou ?).
Ensuite adopte les astuces qu'on t'as déjà donné, comme faire des echo, var_dump, print_r, etc ... pour afficher le contenu de certaines données, comme le POST.
Ceci va te permettre de voir ce que tu obtiens, de voir la structure du tableau. Au bout, tu sauras quelle méthode à adopter pour le parcourir.
Bonjour,
J'ai l'impression que la discussion dérive. Entre unlink sous windows et hébergé, il faut faire la différence et ouvrir une nouvelle discussion.
Je me tire des plombs.
D'abord, je ne vois pas pourquoi la discussion dérive.
Ensuite, le code de la fonction effacer.php était un peu faux ; voici le bon (actuellement) :j'ai retiré les retours chariot qui venaient de ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 if ($handle = opendir('.')) { echo "<FORM action=\"action_effacer.php\" method=\"post\">"; echo "<SELECT multiple name=\"fichier[]\" SIZE=4>"; while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { echo "<option value=\"".$file.">"; echo "$file"; echo "</option>"; } } echo "</SELECT><br>"; echo '<input name="envoyer" value="Effacer le fichier" type="submit">'; echo "</FORM>"; closedir($handle); }pour afficher le contenu d'un répertoire et qui marche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 if ($handle = opendir('.')) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { echo "$file\n"; echo "<br>"; } } closedir($handle); }
Le problème avec mon code, c'est qu'il n'affiche dans la liste du select qu'un fichier sur deux.
Le problème suivant vient de la fonction action_effacer.php : je commence avec ça :et nbfiles a beau être non nul, il n'affiche aucun fichier !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $nbfiles=sizeof($_POST["fichier"]); echo "nbfiles=".$nbfiles."<br>"; $file=$_POST["fichier"]; for ($i=0;$i<nbfiles;$i++) { echo "File=".$file[$i]."<br>";}
Non, le unlink() fonctionne, c'était un problème de chemin, entre autre.Envoyé par kabkab
Puis une rapide recherche sur le Net me dis que la fonction unlink() ne fonctionne pas effectivement sur Win., mais pour Php4.0 et antérieur.
Il est sur Php4.4.9, il n'a donc pas de raison que ça ne fonctionne pas.
Et bien ça donne quoi un var_dump($_POST) ?Envoyé par RunCodePhp
var_dump($_POST) :et
Code : Sélectionner tout - Visualiser dans une fenêtre à part array(2) { ["fichier"]=> array(1) { [0]=> string(50) "01lecture.gif>01lecture.gif string(18) "Effacer le fichier" }
print_r($_POST) :Pour info, 01lecture.gif existe bien dans le répertoire, mais n'est pas affiché par effacer.php. D'ailleurs, si je sélectionne plusieurs fichiers, il y en a autant dans le var_dump et le print_r mais aucun n'est affiché. Sinon, bien que je ne sache pas vraiment lire var_dump et print_r, je n'aime pas les >
Code : Sélectionner tout - Visualiser dans une fenêtre à part Array ( [fichier] => Array ( [0] => 01lecture.gif>01lecture.gif Effacer le fichier )
Mouais, bizarre ?
Je ne vois pas comment tu peux obtenir un tel code avec un var_dump.
Pour ma part il y a une erreur.
As tu fais un copier/coller dans le forum ?
Du coup j'ai un doute sur le comment il aurait du être.
Admettons comme ceci, et en indentant le code, ça devrait ressembler à ça :
Comme ceci les choses deviennent plus clair normalement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 array(2) { ["fichier"]=> array(1) { [0]=> string(13) "01lecture.gif" } ["envoyer"]=> string(18) "Effacer le fichier" }
- array(2) : Ici il est indiqué que le tableau contient 2 élément (fichier, envoyer)
- Fichier et Envoyer est la 1ère dimension
- Fichier contient 1 élément : [0] (01lecture.gif)
- 01lecture.gif est la 2ème dimension du tableau POST
Pour éviter de traiter 2 erreurs, faudrait simplifier les choses dans un 1er temps pour au moins régler le problème de la suppression des fichiers.
Pour ton formulaire, mets y un code simple, en pure HTML et valide :
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <form action="action_effacer.php" method="post"> <select name="fichier[]" size="4" multiple="multiple"> <option value="01lecture.gif">01lecture.gif</option> <option value="02lecture.gif">02lecture.gif</option> <option value="03lecture.gif">03lecture.gif</option> <option value="04lecture.gif">04lecture.gif</option> </select> <br /> <input type="submit" name="envoyer" value="Effacer le fichier" /> </form>
Ensuite pour la partie qui supprime :
Utilise plutôt un foreach(), ici ce sera plus pratique.
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 $nbfiles = count($_POST["fichier"]); echo "nbfiles=".$nbfiles; echo "<br />"; var_dump($_POST); echo "<br />"; $file = $_POST["fichier"]; foreach ($file as $nom_fichier) { echo "File=".$nom_fichier[$i]."<br />"; }
Faut traiter problème par problème, car si on a 2 erreurs et l'un dépend de l'autre, c'est là que la galère commence.
Ce qui est instructif, c'est que dans lede la partie traitement, il n'affiche que le premier caractère du nom du fichier (pour le test, j'ai renommé un des fichiers pour qu'ils ne commencent pas tous par "0"), donc c'est évident que dans ces conditions, le unlink ne peut pas marcher ; mais comment lui faire afficher le nom entier ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo "File=".$nom_fichier[$i]."<br />";
Sorry, j'ai fais une erreur ... faut pas de [$i]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 echo "File=".$nom_fichier."<br />";
génial : y a tout qui marche (enfin). En repartant de l'essai que tu m'as indiqué, j'ai d'abord rajouté le unlink (avec succès), puis côté "select", j'ai mis l'affichage du répertoire ; c'est presque le même code qu'avant ; ce qui change un pouillème, c'est la ligne avec les options :Merci de ton aide, car même si la solution n'était pas loin, je n'y serais pas arrivé seul.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { echo '<option value="'.$file.'">'.$file.'</option>'; } }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager