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 :)
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);
}
}
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);