私は開発者ではなくユーザーです。開発者は利用できません。
これは、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
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);
// };
}
Curl 7.69.1に戻しましたが、すべて順調です。現時点では、yumからcurl + libcurlを削除して、更新されないようにしました。私のスタイルが間違っていた場合、あなたの助けとアドバイスと謝罪をありがとう。
私は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();
つまり、次のリクエストで新しい接続を使用することを強制します。コードで接続が再利用されている場所を調べ、代わりに新しい接続を作成してみてください。
-サードパーティのホットフィックス-同じ接続を再利用できない
しかしそれはうまくいった。それがあなたを助けることを願っています。