Что-то быстрее, чем get_headers ()

Я пытаюсь создать PHP-скрипт, который будет проверять статус HTTP-сайта как можно быстрее.

В настоящее время я использую get_headers () и запускаю его в цикле из 200 случайных URL-адресов из базы данных mysql.

Чтобы проверить все 200 – это занимает в среднем 2 м 48 секунд.

Есть ли что-нибудь, что я могу сделать, чтобы сделать это намного быстрее?

(Я знаю о fsockopen – он может проверять порт 80 на 200 сайтах в 20-е годы – но это не то же самое, что запрашивать код статуса http, потому что сервер может отвечать на порт – но может и не загружать сайты правильно и т. Д.)

Вот код ..

<?php function get_httpcode($url) { $headers = get_headers($url, 0); // Return http status code return substr($headers[0], 9, 3); } ### ## Grab task and execute it ### // Loop through task while($data = mysql_fetch_assoc($sql)): $result = get_httpcode('http://'.$data['url']); echo $data['url'].' = '.$result.'<br/>'; endwhile; ?> 

Solutions Collecting From Web of "Что-то быстрее, чем get_headers ()"

Вы можете попробовать CURL-библиотеку. Вы можете одновременно отправить несколько запросов параллельно с CURL_MULTI_EXEC

Пример:

 $ch = curl_init('http_url'); curl_setopt($ch, CURLOPT_HEADER, 1); $c = curl_exec($ch); $info = curl_getinfo($ch, CURLINFO_HTTP_CODE); print_r($info); 

ОБНОВЛЕНО

Посмотрите этот пример. http://www.codediesel.com/php/parallel-curl-execution/

Я не знаю, если это вариант, который вы можете рассмотреть, но вы можете запускать все из них почти одинаково с помощью вилки, таким образом, сценарий займет немного больше одного запроса http: //www.php .net / ручной / EN / function.pcntl-fork.php

вы можете добавить это в сценарий, который запускается в режиме cli, и одновременно запускать все запросы, например

Изменить: вы говорите, что у вас есть 200 вызовов, поэтому вы можете столкнуться с потерей подключения к базе данных. проблема возникает из-за того, что ссылка уничтожается при завершении первого скрипта. чтобы вы не могли создать новое соединение для каждого ребенка. Я вижу, что вы используете стандартные функции mysql_ *, поэтому обязательно передавайте 4-й параметр, чтобы каждый раз создавать новую ссылку. также проверьте максимальное количество одновременных подключений на вашем сервере