PHP Фатальная ошибка: Uncaught GuzzleHttp \ Exception \ RequestException: ошибка cURL 2: легкая дескриптор, уже используемый в мульти дескрипторе - PullRequest
2 голосов
/ 18 апреля 2020

Я пользователь, а не разработчик. Разработчик недоступен.

Это библиотека API Google, используемая в сценариях отправки продуктов Покупок Google.

Эти сценарии работали успешно, каждые 20 минут, в течение 2 лет + первые 5 часов работы. вчера.

Затем следующая ошибка:

[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

Я могу следовать инструкциям, хотя, вероятно, не пойму их!

ТИА

Ответы [ 4 ]

5 голосов
/ 20 апреля 2020

На всякий случай, если кто-то читает это, использует Laravel. У нас неожиданно возникла та же проблема через несколько дней go, мы попытались установить разные версии cURL и установить параметры cURL, но ничего не вышло. Я исправил это, изменив файл vendor / guzzlehttp / guzzle / src / Handler / CurlFactory. php. Ищите строку, которая говорит:

if (count($this->handles) >= $this->maxHandles) {
curl_close($resource);
} else {
...
}

Прокомментируйте все это, и вместо if / else просто напишите

curl_close($resource);

Другими словами, независимо от того, что подсчитывают, вы всегда закройте соединение cURL. Это сработало для нас мгновенно!

Надеюсь, это поможет:)

1 голос
/ 18 апреля 2020

Мы решили эту проблему вместе с инженерами Stripe вчера (это не значит, что ваша проблема связана с Stripe, но проблема / решение должны быть одинаковыми)

(Эти выводы не являются Подтверждено на 100%, но похоже, что это шаблон): Это происходит при выполнении 2+ запросов через cURL и, по-видимому, происходит с одной из самых последних версий cURL или, по крайней мере, с некоторым другим программным обеспечением (которое могло обновляться автоматически или было выполнено Ваш хостинг-провайдер)

Решение, которое нам было предоставлено, - отключить постоянные соединения в cURL. Есть разные способы, как вы могли бы сделать это, в зависимости от вашей реализации. Но для вдохновения, вот как мы сделали это с Stripe:

$curl = new \Stripe\HttpClient\CurlClient();
$curl->setEnablePersistentConnections(false);
\Stripe\ApiRequestor::setHttpClient($curl);

Я думаю, что это будет что-то подобное для ваших библиотек. А для тех, кто хочет решить эту проблему для Stripe, вот оно:)

Примечание: это решение теоретически будет влиять на задержку, однако мы еще не сталкивались с этим на практике. Но теперь это упоминается:)

0 голосов
/ 27 апреля 2020

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

, пожалуйста, прокомментируйте эти строки из этой функции fn

publi c stati c функция wrapSyn c (вызываемый $ default, вызываемый $ sync) {

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

}

0 голосов
/ 18 апреля 2020

Я вернулся к скручиванию 7.69.1 и все снова хорошо. На данный момент я удалил curl + libcurl из yum, чтобы они не обновлялись. Спасибо за вашу помощь, совет и извинения, если мой стиль был неверным.

...