Я использую Guzzle, чтобы открыть список URL-адресов и получить заголовки. Некоторые URL-адреса слишком долго отвечают и не могут быть открыты, и я хочу их игнорировать. Мне требуется до 20+ секунд, прежде чем Guzzle выдает исключение, и я хочу изменить это и ограничить время подключения до 2 секунд. У меня есть этот код, но он все равно занимает гораздо больше времени:
<?php
include 'vendor/autoload.php';
$start = new \DateTime("now");
$start = $start->format("d.m.Y H:i:s");
echo $start."\n";
$client = new Guzzle\Http\Client();
Guzzle\Http\StaticClient::mount();
try {
$request = $client->get('http://takestoolongexample', [], ['connect_timeout' => 2, 'timeout' => 3, 'debug' => true]);
$response = $request->send();
var_dump($response->getStatusCode());
} catch (Exception $e) {
echo "\n".$e->getMessage()."\n";
}
$end = new \DateTime("now");
$end = $end->format("d.m.Y H:i:s");
echo "\n".$end."\n";
?>
Вот пример результата. Как видите, это заняло 13 секунд.
$ php test.php
30.12.2013 22:00:07
* getaddrinfo(3) failed for takestoolongexample:80
* Couldn't resolve host 'takestoolongexample'
* Closing connection 0
[curl] 6: Couldn't resolve host 'http://takestoolongexample' http://takestoolongexample
30.12.2013 22:00:20
(http://takestoolongexample
был реальным адресом, изменил его здесь)