Bonjour,
J'ai un script PHP qui est appelé en ligne de commande (c'est une tâche automatique en fait). Ce script ne fait qu'une chose : il se connecte à une URL pour exécuter un autre script PHP (qui est écrit avec les outils fournis par le CMS que l'on utilise, notamment pour les requêtes BDD). La connexion du premier script se ferme au bout de quelques minutes alors que le second continue de tourner. Ça a pour conséquence, lors de nos tests, que la console dans laquelle nous exécutons le script nous rend la main. Nous préférons que le premier script ne cesse de s'exécuter que lorsque le second a fini, cela nous donne une meilleure visibilité (notamment lorsque tout sera en production et donc exécuté automatiquement).
Historiquement, la connexion se faisait via file_get_contents, j'ai donc tenté d'augmenter le timeout de cette fonction comme ceci :
Cela n'a rien changé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $ctx = stream_context_create(array('http'=> array( 'timeout' => 1200, // 1 200 Seconds = 20 Minutes ) )); $contents = file_get_contents(URL_EXEC_PATH.$url, false, $ctx);
J'ai donc décidé d'utiliser cURL et ça me donne ceci :
Sans plus de succès : la console rend la main au bout d'environ 2 minutes sans afficher les traces de debug que j'ai mis dans le second script (puisque ce dernier n'a pas eu le temps d'arriver jusqu'à mes traces).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_VERBOSE, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0'); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); curl_setopt($ch, CURLOPT_TIMEOUT, 1200); curl_setopt($ch, CURLOPT_URL, URL_EXEC_PATH.$url); $contents = curl_exec($ch); curl_close($ch);
Avec cURL j'ai tenté de passer le paramètre CURLOPT_VERBOSE à 1, pour voir s'il n'y avait pas des indices sur pourquoi le timeout n'est pas respecté. Cela m'a retourné ceci dans la console :
J'ai regardé aussi si des fois la directive timeout d'apache n'apparaissait pas dans mon httpd.conf ou dans les fichier inclus dans celui-ci mais non. D'après la doc officielle d'Apache, le temps par défaut est de 300 secondes (soit 5mn) alors que mon script tourne tout juste 2mn.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 [18.11.2014 15:51:29 SYSTEM] Zend Monitor UI is disabled in CLI/CGI run... * About to connect() to localhost port 80 (#0) * Trying 127.0.0.1... * connected * Connected to localhost (127.0.0.1) port 80 (#0) > GET /mon/url/index.php?option=com_workflow&controller=bc&task=closeBcTask HTTP/1.1 Host: localhost Accept: */* < HTTP/1.1 200 OK < Date: Tue, 18 Nov 2014 14:51:31 GMT < Server: Apache/2.2.22 (Win32) mod_ssl/2.2.22 OpenSSL/0.9.8o < Transfer-Encoding: chunked < Content-Type: application/x-httpd-php < * Connection #0 to host localhost left intact * Closing connection #0
Partager