Gestion unlink() erreur 404 alors que bon chemin

Gestion unlink() erreur 404 alors que bon chemin - PHP - Programmation

Marsh Posté le 10-04-2010 à 20:29:36    

Bonsoir,  
 
sur une page j'ai le code (ci dessous), qui permet d'affichier tous les dossiers présents dans un certains dossier, mais aussi de les selectionner pour les effacer.  
 
Cependant j'ai une erreur 404 (sous wamp et aussi online). Voici ce qu'affiche pourtant l'url quand je souhaite supprimer un fichier (j'ai rajouté les // du début pour l'affichage)

Citation :

//http://localhost/secu/planning_licence/voir_fichiers.php?nom=planning_du_testtouille2.xls


 
Et pourtant ce fichier se trouve bien dans le sous dossier "planning_licence"...
Et pourtant, ma page en question (juste avant de cliquer sur suppriler) affiche bien mes différents fichiers présents dans ce dossier, donc mon $adresse doit etre bon..
 
Voici le code complet :  
 

Code :
  1. <?php
  2. //J'ai retiré les commentaires pour que ce soit plus lisible...
  3. $adresse= "../secu/planning_licence/";
  4. if(isset($_GET['nom'])) //Si $_GET['nom'] existe, on supprime le fichier...
  5. {
  6.      if ($Fichier != "." && $Fichier != ".." )
  7.      {
  8.           $nom=''.$adresse.$_GET['nom'].'';
  9.           unlink($nom);
  10.           echo 'Le fichier "'.$_GET['nom'].'" a été éffacé !<br>';
  11.      }
  12. }
  13. $dossier = opendir($adresse); //Ouverture du dossier.  
  14. echo '<fieldset><legend>Liste des fichiers</legend><br>'; //Ouverture de fieldset  
  15. //(Fieldset permet de faire des cadres avec légende intégrée en haut a gauche.  
  16. //C'est très simple à utiliser et ça permet de répartir les formulaires en plusieurs parties et donc d'accroître leur lisibilité !).  
  17. while ($Fichier = readdir($dossier)) //Affichage...
  18.      if ($Fichier != "." && $Fichier != ".." )
  19.      {
  20.           echo '<a href="planning_licence/voir_fichiers.php?nom='.$Fichier.'">Supprimer</a> => <a href='.$adresse.$Fichier.' target="_blank">'.$Fichier.'</a><BR>';
  21.      }
  22. }
  23. closedir($dossier); //Fermeture du dossier.  
  24. echo '<br></fieldset>'; //Fermeture du fieldset.
  25. ?>


 
Je pense que mon erreur vient tres probablement d'une des lignes vers la fin (echo '<a href="planning_licence/voir_fichiers.php?nom=....)
Ou alors c'est un probleme au niveau du nom..
 
J'ai beau tatonner, rien ne marche
 
Avez vous une idée/solution s'il vous plait ?  
 
Merci
 
 
 
 

Reply

Marsh Posté le 10-04-2010 à 20:29:36   

Reply

Marsh Posté le 10-04-2010 à 21:14:39    

le HTTP ne permet pas d'utiliser unlink
 
tu n peux faire unlink que dans le système de ficheir ( /var/www/... ou C:...)

Reply

Marsh Posté le 11-04-2010 à 11:13:32    

Et si tu veux supprimer ton XLS, il faut pointer vers le XLS et pas vers un script PHP.


---------------
http://www.aideinfo.com/  Whois adresses IP/domaines le plus évolué !!  FAQ Free Mobile
Reply

Marsh Posté le 11-04-2010 à 19:27:01    

J'ai fait un test en enlevant cette partie :  

Code :
  1. <a href="/secu/planning_licence/voir_fichiers.php?nom='.$Fichier.'">Supprimer</a> =>


 
Donc sans ca, j'ai toujours mes liens ds fichiers, mais plus les liens "supprimer", normal quoi, et quand je click sur les liens, mes xls s'ouvrent.
 
J'ai donc l'impression que l'erreur se trouve uniquement dans ce petit bout de code au dessus. C'est très bisarre car l'url est bon dans la fenetre du navigateur. Ou alors c'est une erreur dans une autre partie du code qui engendre cette erreur...
Autre piste : lors de la navigation sur mon site, il y a un mot de passe a entrer pour acceder a la partie "secu", et mes fichiers a supprimer sont dans cette partie. Est ce que ca peut venir de la, sachant que pourtant, je suis déja dans cette partie, et donc identifié ?
 
Pour flo et aideinfo, du coup je ne sais pas trop ce que je dois faire (je suis débutant)
 
Merci
 
nb : dans la ligne de code ci dessus, ca indique /voir_fichiers.php?nom...  Mais je n'ai aucune page qui porte le nom de voir_fichiers.php. Est ce que ca peut etre ca ?
 
Edit : j'ai donc modifié en /?nom=.... (j'ai donc juste enlever "voir_fichiers.php" ) et la ca bug pas, ca m'amene dans le dossier "licence_planning". Cependant ca n'efface en rien mes fichiers^^... Comment faire pour qu'ils soient supprimés ?  
 
Merci

Message cité 1 fois
Message édité par charlelechauve le 11-04-2010 à 19:37:41
Reply

Marsh Posté le 12-04-2010 à 13:17:19    

Code :
  1. <?php
  2. //J'ai retiré les commentaires pour que ce soit plus lisible...
  3. $adresse= "../secu/planning_licence/";
  4. if(isset($_GET['nom'])) //Si $_GET['nom'] existe, on supprime le fichier...
  5. {
  6.     if ($Fichier != "." && $Fichier != ".." )
  7.     {
  8.          $nom=''.$adresse.$_GET['nom'].'';
  9.          unlink($nom);
  10.          echo 'Le fichier "'.$_GET['nom'].'" a été éffacé !<br>';
  11.     }
  12. }

Il y a quoi dans ta variable $Fichier ? Parce que je ne vois pas où tu l'as renseignée, et tu ne l'utilises pas (dans ce bout de code)...
 
 
Sinon, il se passe quoi si je passe en paramètre "../../planning_licence/voir_fichiers.php" ?  :sweat:

Reply

Marsh Posté le 12-04-2010 à 16:56:35    

Mon $ fichier est sur la ligne 17 :
 
while ($Fichier = readdir($dossier)) //Affichage...  
 
Je vais essayer avec ton parametre d'adresse relative, je suis persuadé que soit ca sera faux, soit ca sera une bonne adresse mais que ca ne marchera pas car mon url qui s'affiche dans ma barre du naviguateur est bonne^^.
 
VOici l'url quand je click sur "supprimer" :  
 
http://localhost/secu/planning_m1/ [...] u_erre.xls
 
Et c'est exactement l'url où est placé mon fichier "planning_du_erre.xls". Et pourtant je recois toujours cette erreur de page introuvable. Un probleme de synthaxe, fonction...
 
Et je le repete, si à cette url je supprime le "voir_fichier.php", éh bien ca m'ouvre une page d'index contenant mon fichier (cf image ce dessous). Je ne sais pas si ca peut aider... peut etre que l'erreur vient de ce voir_fichier.php car mon fichier n'est pas en php mais en xls.  
 
http://nsa14.casimages.com/img/2010/04/12/mini_100412045530685050.jpg
 
edit : j'ai remplacé planning_licence par _m1 mais ne vous inquietez pas c'est normal, car je fais d'autres tests sur le _licence mais ils sont codés pareil :p
 
edit 2 : vous savez quoi ? J'ai tout simplement l'impression que mon lien hypertext "supprimer" n'a aucune action de suppression car quand j'ai la souris dessus il se contente uniquement d'affichier l'url (+voir_fichiers.php?nom=) de l'emplacement de mon fichier...

Message cité 1 fois
Message édité par charlelechauve le 12-04-2010 à 17:05:22
Reply

Marsh Posté le 12-04-2010 à 17:05:13    

charlelechauve a écrit :

Mon $ fichier est sur la ligne 17 :


Donc si je te suis bien, ligne 6 tu testes la valeur d'une variable, et ensuite ligne 17 tu lui donnes une valeur ? :heink:

Reply

Marsh Posté le 12-04-2010 à 17:12:36    

hum.. J'avais pris le code comme ca sur un tuto complet, donc je ne me suis pas pos la question.  
Je vais donc essayé de mettre $Fichier = readdir($dossier) ainsi que la valeur de $dossier en ligne 4 par exemple (sauf si vous m'dites que ca ne servira a rien)
 
Voila, effectué
$adresse= "../secu/planning_m1/";
$dossier = opendir($adresse);
$Fichier = readdir($dossier);
 
Mais ca ne change rien. Page toujours introuvable malgré un url affiché comme bon

Message cité 1 fois
Message édité par charlelechauve le 12-04-2010 à 17:13:57
Reply

Marsh Posté le 12-04-2010 à 17:36:42    

charlelechauve a écrit :

hum.. J'avais pris le code comme ca sur un tuto complet, donc je ne me suis pas pos la question.  
Je vais donc essayé de mettre $Fichier = readdir($dossier) ainsi que la valeur de $dossier en ligne 4 par exemple (sauf si vous m'dites que ca ne servira a rien)
 
Voila, effectué
$adresse= "../secu/planning_m1/";
$dossier = opendir($adresse);
$Fichier = readdir($dossier);
 
Mais ca ne change rien. Page toujours introuvable malgré un url affiché comme bon


Tu peux aussi essayer de mélanger les lignes au hasard, mais je ne suis pas sûr que ça fonctionne  :D  
 
Essaye plutôt de comprendre ton code...
Voici, en pseudo-code, ce que tu devrais avoir :

SI je demande la suppression du fichier $nomfichier
   SI $nomfichier est un fichier
      Suppression de $nomfichier
      Afficher un message "$nomfichier supprimé"
   SINON
      Afficher un message "$nomfichier n'est pas un fichier'

Dans ton cas, je suppose que le fichier à supprimé est envoyé par $_GET['nom'].
=> Il faut commencer par sécuriser ce que tu reçois.
Ensuite, tu testes si c'est bien un fichier (voir la fonction is_file())
Et si c'est un fichier, tu essayes de le supprimer...
 
Autre problème : ton erreur 404...

charlelechauve a écrit :

nb : dans la ligne de code ci dessus, ca indique /voir_fichiers.php?nom...  Mais je n'ai aucune page qui porte le nom de voir_fichiers.php. Est ce que ca peut etre ca ?

Tu appelles un script qui n'existe pas. Forcément, tu te retrouves avec une erreur 404 - page inexistante !
Il faut appeler la page qui contient ton script de suppression.

Reply

Marsh Posté le 12-04-2010 à 20:25:09    

La page qui appel mon script de suppression est la page contenant le code sur lequel nous sommes en train de débattre (elle s'appel deletem1.php).  
 
Je te l'accorde, ca semble logique de l'appeler. J'ai donc modifier en conséquent.  
 
Voici une des facon dont j'ai modifié le code :  

Code :
  1. echo '<a href="deletm1.php/voir_fichiers.php?nom='.$Fichier.'">Supprimer</a> => <a href='.$adresse.$Fichier.' target="_blank">'.$Fichier.'</a><BR>';


 
Et la, je te dis ... bravo, ca marche !^^ Le fichier en question s'efface bien.  
 
Par contre j'ai un petit message d'erreur :  

Citation :

Notice: Undefined variable: Fichier in D:\Programmes\wamp\www\secu\deletem1.php on line 6


 
La line 6 correspond à la ligne if ($fichier=...  du code ci dessous
 

Code :
  1. if(isset($_GET['nom'])) //Si $_GET['nom'] existe, on supprime le fichier...
  2. {
  3.      if ($Fichier != "." && $Fichier != ".." ) // Je suis la ligne 6 qui merde
  4.      {
  5.           $nom=''.$adresse.$_GET['nom'].'';
  6.           unlink($nom);
  7.           echo 'Le fichier "'.$_GET['nom'].'" a été éffacé !<br>';


 
J'ai beau testé quelques petits trucs, je n'arrive pas a enlever cette erreur, si vous avez une idée.  
Mais en tout cas, bravo bravo bravo et merci 1000 fois


Message édité par charlelechauve le 12-04-2010 à 20:25:43
Reply

Marsh Posté le 12-04-2010 à 20:25:09   

Reply

Marsh Posté le 13-04-2010 à 02:08:34    

Voila, j'ai trouvé tout seul, il fallait définir $fichier (enfin, ca on me l'avait dit tout a l'heure mais j'avais l'impression que ca marchait sans.  
 
Probleme, $ fichier est défini par $dossier, et $ dossier est défini par $adresse. Donc Il faut définir $adresse, puis $dossier. Mais ce dernier va ouvrir le repertoire donc il faut le refermer dessuite apres. Puis enfin, nous pouvons mettre $fichier :  
 

Code :
  1. $adresse= "../secu/planning_m1/";
  2. $dossier = opendir($adresse);
  3. closedir($dossier);
  4. $Fichier = $adresse;
  5. if(isset($_GET['nom'])) //Si $_GET['nom'] existe, on supprime le fichier...
  6. {
  7.      if ($Fichier != "." && $Fichier != ".." )
  8.      {

Reply

Sujets relatifs:

Leave a Replay

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