web-dev-qa-db-ja.com

PHP致命的なエラー:キャッチされていないGuzzleHttp \ Exception \ RequestException:cURLエラー2:簡単なハンドルがすでにマルチハンドルで使用されています

私は開発者ではなくユーザーです。開発者は利用できません。

これは、Googleショッピング製品の送信スクリプトで使用されるGoogle APIライブラリです。

スクリプトは、2年間+昨日の最初の5時間、20分ごとに正常に機能しました。

その後、次のエラー:

[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

スクリプトが機能しなくなった頃の唯一のサーバー変更は、物理ホストに適用されたセキュリティパッチとサーバーの再起動でした。

PHP v7.3.16

使用中のGoogleライブラリはv2.0だと思います

私はおそらくそれらを理解しないでしょうが、指示に従うことができます!

TIA

4
AspiEd

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

この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

Curl 7.69.1に戻しましたが、すべて順調です。現時点では、yumからcurl + libcurlを削除して、更新されないようにしました。私のスタイルが間違っていた場合、あなたの助けとアドバイスと謝罪をありがとう。

0
AspiEd

私はguzzleを使用していませんが、他のライブラリで同じ問題が発生しました

pHP 7.4.6

カール7.19.7

CentOSリリース6.10(最終)

パッケージ「mercadopago/dx-php」:「2.0.0」

私の開発サーバーと私がテストした他のサーバーでは問題なく動作します

私は100%ではありませんが、同じcurl接続を複数のリクエストで再利用することを許可しないcurlライブラリのバグだと思います(これについてもわかりません)。

私はそれをmercadopago/dx-phpのホットフィックスで解決しました./vendor/mercadopago/dx-php/src/MercadoPago/RestClient.phpを編集しました

150行目を置き換える

$ connect = $ this-> getHttpRequest();から

to $ connect = new Http\CurlRequest();

つまり、次のリクエストで新しい接続を使用することを強制します。コードで接続が再利用されている場所を調べ、代わりに新しい接続を作成してみてください。

-サードパーティのホットフィックス-同じ接続を再利用できない

しかしそれはうまくいった。それがあなたを助けることを願っています。

0
CruzDelSur