IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

option de timeout ignorée avec cURL et file_get_contents


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de magicbisous-nours
    Inscrit en
    Octobre 2005
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 277
    Points : 177
    Points
    177
    Par défaut option de timeout ignorée avec cURL et file_get_contents
    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 :
    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);
    Cela n'a rien changé.
    J'ai donc décidé d'utiliser cURL et ça me donne ceci :
    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);
    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).

    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 :
    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
    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.
    [/HS]

    J'adorerai changer le monde, mais pas moyen de mettre la main sur le code source

  2. #2
    Membre habitué Avatar de magicbisous-nours
    Inscrit en
    Octobre 2005
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 277
    Points : 177
    Points
    177
    Par défaut
    Laissez tomber, on a fait autrement : on a migré le code du deuxième script dans le premier du coup plus besoin de connexion http et donc plus de problème de timeout
    [/HS]

    J'adorerai changer le monde, mais pas moyen de mettre la main sur le code source

Discussions similaires

  1. problem avec cURL
    Par Jérémy Lefevre dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 16/05/2007, 23h37
  2. [cURL] Tester le temps de la dernière requête avec cURL
    Par brasco06 dans le forum Bibliothèques et frameworks
    Réponses: 16
    Dernier message: 13/10/2006, 17h11
  3. Réponses: 5
    Dernier message: 29/05/2006, 14h27
  4. [cURL] Gérer le proxy avec curl
    Par DaSoul dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 24/03/2006, 23h18
  5. Reglage du timeout ignoré! Urgent>travail
    Par iberserk dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 13/01/2006, 09h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo