IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

erreur de suppression de fichier [PHP 5.6]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    technicien eau potable
    Inscrit en
    Février 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : technicien eau potable
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 19
    Points : 17
    Points
    17
    Par défaut erreur de suppression de fichier
    Bonjour,
    Je cherche à faire une fonction servant à supprimer un fichier.
    voilà le 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
    19
    20
    21
    22
    23
    24
     
    function kill_file($file) {
     
      if( ini_get('safe_mode') ){
          echo "safe mode<br>";
      }else{
          echo "regular mode<br>";
      }
     
      echo $file."<br>";
    	if (isset($file) && file_exists($file)) {
    		$remove = @unlink($file);
    		if (!$remove) {
    			return false;
    		}
        else {
          $bdd = connexionBdd();
          $requete = $bdd->query("DELETE FROM $table WHERE chemin = '$file'");
        }
    	}
    	else {
    	  echo "le fichier n'existe pas";
    	}
    }
    En passant le chemin du fichier en paramètre, ça me renvoie ça:

    "regular mode
    http://localhost/work/drag_drop/medi...75ccd7e494.jpg
    le fichier n'existe pas"

    En sachant que quand je colle le chemin du fichier dans le navigateur il m'affiche bien la photo, je ce comprends pas...
    Quelqu'un aurait une idée, je deviens fous avec ce truc...

    Je suis sous xampp / debian.

    Merci d'avance.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 644
    Points : 1 509
    Points
    1 509
    Par défaut
    Yop,

    Déjà, les @ avant les fonctions pour cacher les erreurs, c'est source de problème, donc à éviter... :/

    Ensuite, essaie ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = $bdd->query("DELETE FROM ".$table." WHERE chemin = '".$file."'");
    Un fait toujours plaisir et encourage à l'entraide. Un n'est pas à négliger, pensez aux autres !

    Que la force soit avec Developpez.net
    Je ne suis pas un crack en informatique, loin de là, mais il n'y a pas que les mécaniciens qui sachent conduire une voiture

  3. #3
    Membre à l'essai
    Homme Profil pro
    technicien eau potable
    Inscrit en
    Février 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : technicien eau potable
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 19
    Points : 17
    Points
    17
    Par défaut
    Merci pour le conseil
    je viens d'essayer ça me renvoie les mêmes erreurs:
    regular mode
    http://localhost/work/drag_drop/medi...75ccd7e494.jpg
    le fichier n'existe pas

    On dirait que la fonction file_exists renvoie faux.

    j'ai modifié le 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    function kill_file($file) {
     
      if( ini_get('safe_mode') ){
        echo "safe mode<br>";
      }else{
        echo "regular mode<br>";
      }
      echo $file."<br>";
      if (isset($file)) {
        if (file_exists($file)) {
          $remove = unlink($file);
          if (!$remove) {
            echo "erreur de suppression du fichier";
          }
          else {
            $bdd = connexionBdd();
            $requete = $bdd->query("DELETE FROM ".$table." WHERE chemin = '".$file."'");
          }
        }
        else {
          echo "le fichier n'existe pas<br>";
        }
      }
      else {
        echo "erreur fonction isset<br>";
      }
    }

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 644
    Points : 1 509
    Points
    1 509
    Par défaut
    Sauf que si je me trompe, unlink efface un fichier ? Donc comment supprimer un fichier déjà effacé?
    Un fait toujours plaisir et encourage à l'entraide. Un n'est pas à négliger, pensez aux autres !

    Que la force soit avec Developpez.net
    Je ne suis pas un crack en informatique, loin de là, mais il n'y a pas que les mécaniciens qui sachent conduire une voiture

  5. #5
    Membre à l'essai
    Homme Profil pro
    technicien eau potable
    Inscrit en
    Février 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : technicien eau potable
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 19
    Points : 17
    Points
    17
    Par défaut
    j'ai peut être une erreur de code mais dans l'idée c'est qu'unlink supprime physiquement le fichier, et ensuite vient la suppression des informations du fichier dans la bdd, avec le chemin titre etc.
    j'ai mis la condition file_exists pour justement vérifier que le fichier soit bien la avant de le supprimer avec unlink.
    et il est présent dans le répertoire.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 644
    Points : 1 509
    Points
    1 509
    Par défaut
    C'est normal.

    Tu vérifies qu'il est là, ensuite tu le supprime, et tu fais après ta requête dessus. Y à un truc qui tourne pas rond dans ta conception
    Un fait toujours plaisir et encourage à l'entraide. Un n'est pas à négliger, pensez aux autres !

    Que la force soit avec Developpez.net
    Je ne suis pas un crack en informatique, loin de là, mais il n'y a pas que les mécaniciens qui sachent conduire une voiture

  7. #7
    Membre à l'essai
    Homme Profil pro
    technicien eau potable
    Inscrit en
    Février 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : technicien eau potable
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 19
    Points : 17
    Points
    17
    Par défaut
    j'ai fais des essais:
    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
    function kill_file($file) {
      if (isset($file)) {
        echo $file."<br>";
        if (file_exists($file)) {
          echo "le fichier existe<br>";
          // unlink($file);
        }
        else {
          echo "le fichier n'existe pas<br>";
        }
      }
      else {
        echo "erreur fonction isset<br>";
      }
    }
    Ca donne:
    media/65a0d27616247871ebf8a7a7c6704dd2.jpg
    le fichier existe

    et si je décommente la ligne unlink(), ca donne ça:
    media/65a0d27616247871ebf8a7a7c6704dd2.jpg
    le fichier n'existe pas

    théoriquement unlink se trouve dans la condition du if file_exists.
    et juste avant lui ça devrait écrire : "le fichier existe"

    C'est comme si unlink était directement exécuté sans passer par les restrictions des conditions.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 644
    Points : 1 509
    Points
    1 509
    Par défaut
    Mais ton unlik, SUPPRIME ton fichier.

    Ta condition, tu vérifies si ton fichier existe. Si oui, tu le supprime, et après tu veux faire un delete (pour re-supprimer?) ton fichier? Tu trouves pas ça incohérent?
    Un fait toujours plaisir et encourage à l'entraide. Un n'est pas à négliger, pensez aux autres !

    Que la force soit avec Developpez.net
    Je ne suis pas un crack en informatique, loin de là, mais il n'y a pas que les mécaniciens qui sachent conduire une voiture

  9. #9
    Membre à l'essai
    Homme Profil pro
    technicien eau potable
    Inscrit en
    Février 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : technicien eau potable
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 19
    Points : 17
    Points
    17
    Par défaut
    je dois me mélanger les pinceaux dans les conditions, ce que je voulais faire:

    - si le fichier existe alors je le supprime avec unlink
    - si il n'existe pas, je n'exécute pas unlink, je fais un echo "le fichier n'existe pas"

    quand il me marque "le fichier n'existe pas" c'est que la condition du if (file_exists) n'est pas remplie, et dont théoriquement il n'exécute pas le unlink().

    le unlink ne peut être exécuté que si la condition file_exists est remplie. (enfin, c'est ce que je pense mais je me loupe forcément quelque part alors bon...)

    désolé si je suis un peu long à la comprenette lol

  10. #10
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 644
    Points : 1 509
    Points
    1 509
    Par défaut
    Okkk, désolé, j'étais encore sur le unlink avec la requête derrière.

    Dans le dernier cas que tu as présenté, je vois rien de trop anormale, tes conditions m'ont l'air correctes.

    Tu es sur que ton fichier est bien présent quand tu dé-commentes le unlink?
    Un fait toujours plaisir et encourage à l'entraide. Un n'est pas à négliger, pensez aux autres !

    Que la force soit avec Developpez.net
    Je ne suis pas un crack en informatique, loin de là, mais il n'y a pas que les mécaniciens qui sachent conduire une voiture

  11. #11
    Membre à l'essai
    Homme Profil pro
    technicien eau potable
    Inscrit en
    Février 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : technicien eau potable
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 19
    Points : 17
    Points
    17
    Par défaut
    j'ai fait pas mal de tests, isolé et testé chaque fonction, et j'ai constaté un truc:
    les photos sont affichées sur une page via une boucle php qui va chercher des info dans la bdd.
    Les liens de suppression sont créés avec passage dans l'url d'un GET avec l'id de la photo dans la bdd.
    le script que j'ai mis ici récupère l'id et va cherche le chemin du fichier dans la bdd.

    Quand je clique sur un lien de suppression de la page ou apparaissent toutes les photos, il m'indique que le fichier n'existe pas, MAIS il supprime tout le même le fichier.

    Et quand je copie l'adresse du lien de suppression et que je le colle dans un autre onglet du navigateur, le test file_exists marche bien, et la photo est également supprimée.

    Là je comprends plus rien...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [TClientDataSet] Erreur de chargement du fichier MIDAS.DLL
    Par Manopower dans le forum Bases de données
    Réponses: 10
    Dernier message: 31/08/2016, 14h08
  2. Erreur a la suppression de fichier
    Par debdarky dans le forum Autres langages
    Réponses: 8
    Dernier message: 28/08/2013, 02h26
  3. Erreur lors de la suppression du fichier
    Par kynri dans le forum C
    Réponses: 5
    Dernier message: 19/01/2008, 15h03
  4. Suppression de fichiers
    Par wasch dans le forum C++Builder
    Réponses: 6
    Dernier message: 20/11/2003, 16h37
  5. FOXPRO 2.6 : erreur créations du /des fichiers CAB
    Par breihtiti dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 16/11/2002, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo