web-dev-qa-db-fra.com

Erreur de boucle: l'opération a expiré

J'ai l'erreur fatale suivante lorsque j'essaie d'utiliser Curl:

PHP Fatal error:  Uncaught HTTP_Request2_MessageException: 
Curl error: Operation timed out after 30000 milliseconds with 0 bytes received in      
/usr/share/php/HTTP/Request2/Adapter/Curl.php on line 200
Exception trace    Function       Location
0                  HTTP_Request2_Adapter_Curl::wrapCurlError('Resource id #12') 
                   /usr/share/php/HTTP/Request2/Adapter/Curl.php:200
1                  HTTP_Request2_Adapter_Curl->sendRequest(Object(HTTP_Request2))
/usr/share/php/HTTP/Request2.php:959< in /usr/share/php/HTTP/Request2/Adapter/Curl.php on line 172

Cependant, je ne vois pas comment le résoudre au mieux. Il n'y a aucune référence à une ligne de code que j'ai écrite, mais uniquement aux modules HTTP_Request2 et Curl. Quelle est la meilleure approche pour essayer de résoudre ce problème?

10
alias51

Votre boucle est expiré. Probablement l'URL que vous essayez qui nécessite plus de 30 secondes.

Si vous exécutez le script via un navigateur, définissez le set_time_limit sur zéro pendant une durée infinie de secondes.

set_time_limit(0);

Augmentez le temps limite de l'opération de curl en utilisant cette option CURLOPT_TIMEOUT

curl_setopt($ch, CURLOPT_TIMEOUT,500); // 500 seconds

Cela peut également se produire pour une redirection infinie à partir du serveur. Pour arrêter cela, essayez d’exécuter le script avec l’emplacement suivant désactivé.

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
26
Sabuj Hassan

Il arrive parfois que cette erreur apparaisse dans Joomla en raison d’un problème avec SESSION ou coockie . Cela peut être dû à un paramètre de serveur HTTPd incorrect ou à des demandes antérieures avant les requêtes http CURL ou Server

donc PHP code comme:

  curl_setopt($ch, CURLOPT_URL, $url_page);
  curl_setopt($ch, CURLOPT_HEADER, 1);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
  curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
  curl_setopt($ch, CURLOPT_REFERER, $url_page);
  curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . "./cookie.txt");
  curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . "./cookie.txt");
  curl_setopt($ch, CURLOPT_COOKIE, session_name() . '=' . session_id());

  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  if( $sc != "" ) curl_setopt($ch, CURLOPT_COOKIE, $sc);

aura besoin de remplacer par le code PHP

  curl_setopt($ch, CURLOPT_URL, $url_page);
  curl_setopt($ch, CURLOPT_HEADER, 1);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
//curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
  curl_setopt($ch, CURLOPT_REFERER, $url_page);
  curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
//curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . "./cookie.txt");
//curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . "./cookie.txt");
//curl_setopt($ch, CURLOPT_COOKIE, session_name() . '=' . session_id());

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); // !!!!!!!!!!!!!
  //if( $sc != "" ) curl_setopt($ch, CURLOPT_COOKIE, $sc);

Peut-être une réponse de corps comment ces options liées à "Erreur Curl: opération expiré après .."

0
user7224508