У меня есть следующий код, который делает запрос Guzzle 4.1:
$client = new \GuzzleHttp\Client(['defaults/headers/User-Agent' => $userAgentString]);
$retry = 0;
do {
try {
return $client->post($url, $options);
} catch (\Exception $e) {
echo $e->getMessage();
$retry++;
continue;
}
} while ($retry < 3);
Он успешно работает в течение довольно долгого времени, но через случайные промежутки времени у него иногда возникают проблемы с файлом CA cURL, что вызывает фатальную ошибку из-за неперехваченного исключения. Я не уверен, что смогу это сделать, потому что он уже есть в блоке try catch
.
Вот ошибка, которая отключает мою консольную команду Laravel:
cURL error 77: error setting certificate verify locations:
CAfile: /home/vagrant/Projects/test.dev/laravel/vendor/guzzlehttp/guzzle/src/cacert.pem
CApath: /etc/ssl/certs (0)
PHP Fatal error: Uncaught exception 'ErrorException' with message 'include(/home/vagrant/Projects/test.dev/laravel/vendor/filp/whoops/src/Whoops/Exception/Inspector.php): failed to open stream: Too many open files' in /home/vagrant/Projects/test.dev/laravel/vendor/composer/ClassLoader.php:382
Что я хотел бы сделать, так это не только выяснить, почему Guzzle получает эту ошибку cURL, но и как я могу ее поймать, если она возникает в других системах, в которых есть эта проблема с cURL, чтобы это не просто привело к сбою процесса.
failed to open stream: Too many open files'
тоже не очень хорошо выглядит. сколько файлов вы пытаетесь использовать в этом скрипте? - person Marc B   schedule 22.10.2014too many open files
, заключался в том, чтобы заменить использование методов консоли Symfony на простое использованиеecho
для отображения вывода на консоль. - person eComEvo   schedule 21.01.2015file
. Проверю снова позже, когда в следующий раз мне нужно будет запустить эту команду. - person eComEvo   schedule 22.01.2015