Bonjour,
Comme je viens de connaître les affres des tâches planifiées (TP) qui ne tournaient plus sur mes hébergements mutualisés, comme Google ne m'a pas été d'une grande aide, trouvant des réponses généralement inexactes ou approximatives (ici même), je me permets de jeter ici un petit caillou pour celle ou celui qui en aurait besoin.
Je signale à OVH ici présent que la page
dédiée est erronée : tester une tâche via un navigateur (donc via HTTP) n'a aucun intérêt ici, nous allons le voir...
Tout d'abord, je souhaite mettre fin à deux
mythes urbains :
1. inutile de modifier le CHMOD des différents fichiers utilisés par la TP ; celui par défaut (604) est parfait
2. aucune instruction type "#!/usr/local/bin/php" en tête de fichier PHP n'est nécessaire : c'est géré lors de la config d'une TP
Voici les deux points cruciaux pour la bonne marche d'une TP :
1. il faut que tous les chemins des fichiers inclus (ou lus) soient des chemins
absolus
2. il faut mettre à jour votre
version PHP via le manager ; j'ai passé tous mes sites en PHP 5.6 et ça roule
Concernant le point 1, il faut comprendre que depuis quelques temps OVH a choisi de faire tourner les TP en PHP CLI, c'est à dire en mode programme (en non via HTTP comme d'antan). Donc le chemin ne peut plus être relatif. Par exemple
include('fichier.php') ne mène nulle part. Donc soit vous écrivez votre racine "en dur" :
Code:
votre_dossier/www/fichier.php');
?>
Soit - bien mieux - vous en faites l'extraction
on-the-fly via ce type d'instruction :
La fonction de conversion des anti-slashes est intéressante pour tester vos CRON sous Windows, via la fenêtre de commande DOS. Si ça passe sous Windows ça passera chez OVH.
Au passage, ça vous permet également de faire tourner une tâche planifiée sur un serveur Windows doté d'un Apache. Via le planificateur (Windows) il faut appeler le programme php.exe qui va bien (cliquer sur Parcourir) et ajouter en argument le chemin absolu vers le script à exécuter. En mode admin (ou user avec droits ad hoc).
Attention ! On est en mode CLI donc aucune requête HTTP n'est interprétée : si le tableau
$_SERVER est lisible, toutes les informations n'y sont pas contenues (ex.
HTTP_USER_AGENT ou
HTTPS). De même que
$_GET et
$_POST seront muets ; on ne peut pas passer de paramètres en URL (Query String) dans ce mode.
Pour le point 2, je me suis bêtement rendu compte que certains de mes [vieux] sites étaient encore en PHP 4 ! Et là, inutile de vouloir faire tourner une TP (même avec le choix "Autre" langage (je ne sais pas à quoi il sert)). Il faut donc aller dans le
Manager, cliquer sur
Hébergements puis sur le domaine concerné et vérifier la ligne
Version PHP globale. Modifier la configuration pour passer en PHP 5.x (à l'heure où j'écris ces lignes) après avoir vérifié en local, bien sûr, que votre site passe dans la version choisie. Puis via le menu "Plus +" aller [re]configurer vos TP.
Le script va ensuite chercher la version PHP choisie de lui-même, comme un grand. C'est vérifiable dans vos logs : http://logs.ovh.net/
votre_domaine/ puis cliquez sur "cron" en bas à droite de vos stats. Toute tâche accomplie doit donner à peu près ceci :
[2016-01-28 03:11:02] ## OVH ## START - 2016-01-28 03:11:02.331408 executing: /usr/local/php5.6/bin/php /homez.647/votre_dossier/www/fichier.php
[2016-01-28 03:11:02] ## OVH ## END - 2016-01-28 03:11:02.602332 exitcode: 0
Notez le code 0 en face de
exitcode qui signifie aucune erreur. Notez qu'il n'y a aucun code HTML ici car mes scripts sont configurés pour n'afficher un résultat que via HTTP. Sinon toute sortie sera affichée entre les lignes START et END.
Cela m'a pris du temps pour corriger mon CMS perso ; du coup j'ai rafraîchis quelques fonctions, notamment MySQL (mysqli_ au lieu de mysql_ qui est obsolète).
Hope it helps.
Si j'ai oublié quelque(s) chose(s) ne vous gênez pas pour me l'indiquer, ou commenter.