PHP et batch

sonik1st
Invité n'ayant pas de compte PHPfrance

26 janv. 2010, 18:06

Bonjour,

J'effectuai récemment sans aucun problème des tâches planifiées appelant des batch qui exécutaient des scripts PHP.

L'objet de ces scripts est un traitement rapide d'informations contenues dans une base, exports de ces informations sous forme de fichier csv puis envoi de l'export par mail.

Or depuis 2 jours, sans modification de code, tous les traitements (update de la base et génération du fichier d'export) se font sans problème. Mais, seul, les emails ne partent plus ???

J'ai testé mes scripts via un navigateur et là chose étrange les mails partent sans problème

C'est le même script, aucun paramètre n'est envoyé au script, donc pourquoi se comporte-t-il différemment entre le navigateur et l'interpréteur de commande ?? Et surtout pourquoi maintenant et pas avant ??

J'ai essayé de trouvé un palliatif en lançant le navigateur via une ligne de commande, là ça marche mais impossible de fermer le browser (même avec un taskkill juste après la commande d'ouverture du browser), donc pas top quand on a une douzaine d'export quotidien.

Vous allez me dire "envoie sur un FTP !", je répondrai "j'aimerai bien, mais je suis obligé de passer par les mails. aaahh c'est utilisateurs ! grrr"

Quelqu'un aurait-il une idée sur ce problème plutôt particulier ?

Eléphanteau du PHP | 12 Messages

26 janv. 2010, 20:26

Salut sonik1st,
j'ai aussi remarqué que l'environnement n'était pas le même en ligne de commande et via apache.

par contre, je suis surpris de ton problème avec le navigateur car nous utilisons quelques 'cron' de cette manière sans avoir constaté ce genre de problème.
je ne me rappelle pas exactement de la syntaxe mais n'est-ce pas un quelque chose du genre :
"lynx http://www.example.com/lescript.php >> /dev/null" ?

sonik1st
Invité n'ayant pas de compte PHPfrance

27 janv. 2010, 19:54

c'est bon j'ai trouvé un palliatif, à l'origine voici la commande qui appelait mon script PHP :

"C:\mon chemin vers php\php.exe" -q "C:\mon chemin vers mon script\script.php"

L'option -q passe en mode silencieux et supprimer les entêtes HTTP (http://www.php.net/manual/fr/features.commandline.php)

J'ai donc opté pour cette nouvelle commande
"C:\mon chemin vers php\php.exe" -r file_get_contents('http://mon_url/script.php');

En exécutant la commande PHP directement dans le batch (grâce à l'option -r), cela m'évite de doubler les scripts (un contenant le file_get_contents et un contenant le script)

merci à vous ;)