Page 1 sur 1

Cron ne fonctionne plus avec passage à PHP 8.2 OVH

Posté : 20 mai 2022, 11:58
par olill
Bonjour,

Pour un site hébergé chez OVH en Kimsuffit2015, nous utilisions un cron qui copiait tous les fichiers contenus dans un dossier vers un dossier backup et supprimait les dossiers source juste après. Ce cron fonctionnait bien avec la version PHP 7.0 legacy.

Voici (en partie) le code utilisé et qui fonctionnait jusqu'à présent (jusqu'à la mise à jour PHP 8.1 stable 64) :
// Identify directories
 $files = scandir("www/bk/imAKF/");
$source = "www/bk/imAKF";
$destination = "www/bk/imAKF_bck";
// Cycle through all source files
foreach ($files as $file) {	
if (in_array($file, array(".","..","index.html"))) continue;
	$i=$i+1;	
// If we copied this successfully, mark it for deletion
if (copy($source.$file, $destination.$file)) {
$ii = $ii+1;
unlink($source.$file);
}
}
echo 'Fichiers déplacés : ' . $i . ' - Fichiers virés : ' . $ii;
L'echo est utilisé juste pour les tests.

Depuis la mise à jour vers 8.1, la tâche rencontre une erreur et ne s'exécute plus, avec ce code erreur :
Array ( [0] => . [1] => .. [2] => 1645894038-name.jpg [3] => 1645894134-free .jpg [4] => 1645894158-LOWFR0501 .jpg [5] => 1650125669-CERISES.jpg [6] => 1652195033-CERISES.jpg [7] => 1652195141-CERISES.jpg [8] => 1653039031-DZDEZ.jpg [9] => index.html [10] => tmpc ) Array ( [0] => tmpc [1] => index.html [2] => 1653039031-DZDEZ.jpg [3] => 1652195141-CERISES.jpg [4] => 1652195033-CERISES.jpg [5] = > 1650125669-CERISES.jpg [6] => 1645894158-LOWFR0501 .jpg [7] => 1645894134-free.jpg [8] => 1645894038-name.jpg [9] => .. [10] => . )
Attention : Variable non définie $files dans /home/truefile/www/bk/cron_imAKF.php en ligne 25

Attention: l'argument foreach() doit être de type array|object, null donné dans/home/truefile/www/bk/cron_imAKF.php à la ligne 25
Fichiers déplacés : 0 - Fichiers virés : 0
Ne connaissant pas trop php8 et ses changements, qui peut m'aider à retrouver une tache cron fonctionnelle avec PHP 8.1 ?

Re: Cron ne fonctionne plus avec passage à PHP 8.2 OVH

Posté : 20 mai 2022, 12:04
par @rthur
Il va falloir que tu avances dans ton debugage car le message d'erreur est assez explicite :

Code : Tout sélectionner

Attention : Variable non définie $files dans /home/truefile/www/bk/cron_imAKF.php en ligne 25
Où cette variable est censé être définie ? Pourquoi ne l'est elle pas ?
Fais des var_dump() pour voir ce que contiennent tes variables aux étapes clés de ton traitement, et comprendre à quel endroit ça ne se passe pas comme prévu

Re: Cron ne fonctionne plus avec passage à PHP 8.2 OVH

Posté : 20 mai 2022, 12:34
par olill
Effectivement, j'ai oublié la ligne
$files = scandir("www/bk/imAKF/");
dans mon code copié (je viens d'éditer)

Est-ce un changement du à PHP8 ou OVH, mais remplacer la ligne ci-dessus par
$files = scandir("imAKF/");
ainsi que
$source = "www/bk/imAKF/";
$destination = "www/bk/imAKF_bck/";
par
$source = "imAKF/";
$destination = "imAKF_bck/";
a solutionné le problème, le script refonctionne maintenant. #-o

(et accessoirement, le langage du cron était encore sur PHP 7.2 d'où une double erreur dans les logs).

Merci !

Re: [RESOLU] Cron ne fonctionne plus avec passage à PHP 8.2 OVH

Posté : 21 mai 2022, 16:46
par two3d
Mettre des chemins absolut pour les cron, je vois qu'ils le sont mais je recommanderais l'utilisation de __DIR__ (ou avec dirname() pour remonter d'un ou plusieurs dossiers)