web-dev-qa-db-fra.com

filemtime "avertissement statistique échoué pour"

Je l'ai déjà lu tellement de questions et de réponses à ce sujet mais je ne peux toujours pas résoudre mon problème ...

J'essaie de créer une fonction qui supprime tous les fichiers avec l'extension "xml" ou "xsl" créée il y a un jour. Mais je reçois cet avertissement sur chaque fichier que j'ai:

Avertissement: filemtime () [function.filemtime]: échec de stat pour post_1003463425.xml dans /home/u188867248/public_html/ampc/library.php à la ligne 44

Tous les fichiers de ce répertoire ont le même nom de structure "post_ + randomNum + .xml" (exemple: post_1003463425.xml ou post_1456463425.xsl). Donc, je pense que ce n'est pas un problème encodé (comme je l'ai vu dans d'autres questions).

Le code de ma fonction est la suivante:

 function deleteOldFiles(){
    if ($handle = opendir('./xml')) {
        while (false !== ($file = readdir($handle))) { 

            if(preg_match("/^.*\.(xml|xsl)$/i", $file)){

                $filelastmodified = filemtime($file);

                if ( (time()-$filelastmodified ) > 24*3600){
                    unlink($file);
                }
            }
        }
        closedir($handle); 
    }
}

Merci de votre aide :)

21
Gerard Brull

Je pense que le problème est le realpath du fichier. Par exemple, votre script travaille sur "./", votre fichier est dans le répertoire "./xml". Donc, mieux vaut vérifier si le fichier existe ou non, avant d’obtenir filemtime ou le dissocier:

  function deleteOldFiles(){
    if ($handle = opendir('./xml')) {
        while (false !== ($file = readdir($handle))) { 

            if(preg_match("/^.*\.(xml|xsl)$/i", $file)){
              $fpath = 'xml/'.$file;
              if (file_exists($fpath)) {
                $filelastmodified = filemtime($fpath);

                if ( (time() - $filelastmodified ) > 24*3600){
                    unlink($fpath);
                }
              }
            }
        }
        closedir($handle); 
    }
  }
29
Somy A

Pour moi, le nom de fichier en question était accompagné d'une chaîne de requête, ce que cette fonction n'aimait pas.

$path = 'path/to/my/file.js?v=2'

La solution consistait à couper cela en premier:

$path = preg_replace('/\?v=[\d]+$/', '', $path);
$fileTime = filemtime($path);
0
Andrew