web-dev-qa-db-fra.com

PHP Fatal error: Uncaught GuzzleHttp \ Exception \ RequestException: cURL error 2: easy handle déjà utilisé dans multi handle

Je suis un utilisateur pas un développeur. Le développeur n'est pas disponible.

Il s'agit de la bibliothèque d'API Google utilisée dans les scripts de soumission des produits Google Shopping.

Les scripts ont fonctionné avec succès, toutes les 20 minutes, pendant 2 ans + les 5 premières heures d'hier.

Puis l'erreur suivante:

[18-Apr-2020 06:20:03 Europe/London] PHP Fatal error:  Uncaught GuzzleHttp\Exception\RequestException: cURL error 2: easy handle already used in multi handle (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) in ../vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php:162
Stack trace:
#0 ../vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php(129): GuzzleHttp\Handler\CurlFactory::createRejection(Object(GuzzleHttp\Handler\EasyHandle), Array)
#1 ../vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php(89): GuzzleHttp\Handler\CurlFactory::finishError(Object(GuzzleHttp\Handler\CurlHandler), Object(GuzzleHttp\Handler\EasyHandle), Object(GuzzleHttp\Handler\CurlFactory))
#2 ../vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php(43): GuzzleHttp\Handler\CurlFactory::finish(ThObject(GuzzleHttp\Handler\CurlHandler), Object(GuzzleHttp\Handler\EasyHandle), Object(GuzzleHttp\Handler\CurlFactory))
#3 ../vendor/guzzlehttp/guzzle/src/Handl in ../vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php on line 162

Le seul changement de serveur à peu près au moment où les scripts ont cessé de fonctionner était un correctif de sécurité appliqué à l'hôte physique et un redémarrage du serveur.

PHP v7.3.16

Je pense que la bibliothèque Google utilisée est v2.0

Je peux suivre les instructions mais je ne les comprendrai probablement pas!

TIA

4
AspiEd

public_html/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php

veuillez commenter ces lignes à partir de cette fn

public static function wrapSync (callable $ default, callable $ sync) {

    // return function (RequestInterface $request, array $options) use ($default, $sync) {
    //     return empty($options[RequestOptions::SYNCHRONOUS])
    //         ? $default($request, $options)
    //         : $sync($request, $options);
    // };

}

0
oparam

Je suis revenu à curl 7.69.1 et tout va bien à nouveau. Pour l'instant, j'ai supprimé curl + libcurl de yum afin qu'ils ne se mettent pas à jour. Merci pour votre aide, vos conseils et mes excuses si mon style est incorrect.

0
AspiEd

Je n'utilise pas guzzle, mais j'ai eu le même problème avec une autre bibliothèque

php 7.4.6

boucle 7.19.7

CentOS version 6.10 (finale)

paquet "mercadopago/dx-php": "2.0.0"

Sur mon serveur de développement et sur un autre serveur que j'ai testé, cela fonctionne bien

Je ne suis pas à 100% mais je pense que c'est un bug sur la bibliothèque curl qui ne permet pas de réutiliser la même connexion curl pour plus d'une requête (encore une fois, je n'en suis pas sûr).

Je l'ai résolu avec un correctif sur mercadopago/dx-php que j'ai édité ./vendor/mercadopago/dx-php/src/MercadoPago/RestClient.php

remplacement de la ligne 150

à partir de $ connect = $ this-> getHttpRequest ();

à $ connect = new Http\CurlRequest ();

en d'autres termes, force à utiliser une nouvelle connexion pour la prochaine demande. sur votre code, regardez où la connexion est réutilisée et essayez de créer une nouvelle connexion à la place.

Je sais, ça craint parce que: - est un correctif sur un tiers - ne peut pas réutiliser la même connexion

mais cela a fonctionné. Espérons que cela peut vous aider.

0
CruzDelSur