2013-02-04 2 views
2

Можно создать дубликат:
Asynchronous HTTP requests in PHPКакой самый быстрый способ сделать множество HTTP-запросов (HEAD)?

У меня есть сценарий, который использует цикл по каждому элементу и принимает идентификатор элемента из файла и проверяет запрос на голову, если статус равно 200. Это для выполнения этого сценария потребуется много времени, так же как можно сделать несколько запросов одновременно? Я знаю с ajax, если я делаю цикл for с $ .ajax(), он запустит их все сразу. как я могу получить это поведение с php или есть альтернатива, позволяющая пакетной обработки?

ответ

0

Один запрос прост (как вы заметили). Justloop через и использовать библиотеку Груша HTTP_Request2 и сделать запрос ГОЛОВА:

$request = new HTTP_Request2('http://www.your_url.com/', 
         HTTP_Request2::METHOD_HEAD); 
    $response = $request->send(); 
    if (200 == $response->getStatus()) { 
    echo "Yippie... a 200"; 
    } 

Вы также можете использовать PHP локон библиотеки, но это гораздо более futz иметь дело с: Header only retrieval in php via curl

Однако, чтобы сделать это в soley PHP параллельно вам нужно будет использовать что-то вроде exec() для разблокировки других php-скриптов, поскольку PHP не поддерживает потоковое программирование или параллелизм изначально. Аналогичным образом, вы также можете использовать какую-то пользовательскую очередь заданий/рабочих с помощью gearman или что-то еще, но это довольно активно.

0

Будьте осторожны! Если вы знаете, что это занимает много времени, вы, вероятно, запрашиваете около сотни или тысячи URL-адресов. Не перегружайте целевой сервер.

Также обратите внимание, что в зависимости от кода, выполняемого на цели, объем работы, который необходимо выполнить для запроса HEAD, может быть полностью таким же, как и для запроса GET. Поэтому единственной оптимизацией было бы не передавать вам данные. Это может быть ошибочно принято за отказ в обслуживании.

Смежные вопросы