Cet article a pour but de vous aider à faire la différence entre les commandes du client Wget, du langage Curl et du langage PHP.
Différences principales
Pour voir les différences, commençons par examiner les quatre commandes suivantes :
wget -O - -q 'https://www.planethoster.net/modules/cron.php?secure_key=ILOVEPH' --user-agent="PlanetHoster/CRON" > /dev/null 2>&1
curl --user-agent "planethoster" https://www.planethoster.net/modules/cron.php
php -q /home/USERNAME/public_html/modules/cron.php argument=valeur >/dev/null 2>&1
La différence la plus importante demeure que Wget et Curl passent par le protocole HTTP. Dès lors, des configurations ou des restrictions Apache s’ajoutent. Le délai d’attente d’Apache (timeout) en est un bon exemple.
En revanche, lorsque vous lancez une tâche Cron en langage PHP, vous n’avez pas ce type limite, car c’est comme si vous passiez par une connexion SSH.
La manière la plus robuste de lancer une tâche Cron assez importante est donc de le faire en PHP. Contrairement à Curl ou Wget, le délai d’attente (timeout) du serveur web n’aura aucune répercussion si votre script doit s’exécuter durant un certain temps.
Différentes version de PHP et tâches Cron
Si vous laissez la commande « php » telle quelle, la tâche utilisera la version native/recommandée définie dans le panneau de contrôle. Si votre script doit utiliser une autre version de PHP, vous devez le spécifier en donnant le chemin complet de PHP.
Pour N0C, il faut utiliser cette commande, où XX doit être remplacé par la version de PHP désirée entre php44, php51, php52, php53, php54, php55, php56, php70, php71, php72, php73, php74, et php80 :
/opt/alt/phpXX/usr/bin/php
Astuces
1-Lorsque vous lancez un Cron avec la commande Curl ou Wget, vous devez absolument spécifier un « user-agent » comme dans l’exemple plus haut. Sans quoi, il est possible que votre requête soit bloquée au niveau du serveur à cause du pare-feu applicatif web ModSecurity.
2- Nous vous conseillons aussi de ne pas lancer le script toutes les minutes. Il est préférable de le lancer durant la nuit.
3- Si vous recevez trop de courriel de tâches Cron, vous pouvez désactiver cette notification en ajoutant ceci à la fin de votre tâche : >/dev/null 2>&1
.
4- Si vous avez des arguments « GET » à donner à votre script, vous ne devez pas séparer l’argument du fichier par un « ? ». Vous devez simplement mettre une espace.