Проверьте, доступен ли сайт как можно быстрее

foreach($links as $link_content) { $handle = curl_init(LINK_BASE.$link_content); curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE); $response = curl_exec($handle); $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE); if($httpCode != 200) continue; //if not, go to next link } 

Мне нужно проанализировать 350 ссылок и проверить, доступен ли каждый из них (возвращает код HTTP 200). В настоящее время я использую код, написанный выше. К сожалению, эта операция занимает очень много времени – более 2-4 минут. Я должен проверить каждую ссылку самым быстрым способом. Можете ли вы дать мне какие-либо предложения?

Я бы сказал, что вы просто выдаете HTTP HEAD-запросы, используя CURLOPT_NOBODY а не тянете весь контент, как вы сейчас делаете. Код для этого будет выглядеть так:

 foreach($links as $link_content) { $handle = curl_init(LINK_BASE.$link_content); curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($handle, CURLOPT_NOBODY, TRUE); // make HEAD $response = curl_exec($handle); $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE); if($httpCode != 200) continue; //if not, go to next link } 

Если это не уменьшает время как можно больше, вы также можете curl_multi возможности curl_multi для распараллеливания ваших запросов. Вы можете свободно взглянуть на простой класс REST, основанный на завитке, который я создал, чтобы получить несколько лучших примеров того, как делать curl_multi . Вы можете свободно пользоваться классом – https://github.com/mikecbrant/php-rest-client

Вы можете запустить несколько экземпляров этого PHP-кода отдельно. Представьте себе прирост времени с 10 параллельными экземплярами!

Создайте файл crawler.php как crawler.php ниже:

 <?php $fileName = argv[1]; $fh = fopen($fileName, "r"); while($link_content = fgets($fh) !== FALSE) { $handle = curl_init(LINK_BASE.$link_content); curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE); $response = curl_exec($handle); $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE); if($httpCode != 200) { // log/output the bad URL } } ?> 

Создайте bat-файл crawler.bat (если вы находитесь под Windows) и поместите этот код:

 php PathToCrawler/crawler.php %1 

Теперь вам нужно распространять URLS в разных файлах и запускать консоль последовательно этой битой:

 crawler.bat UrlFileFrom1TO100.txt crawler.bat UrlFileFrom101TO200.txt crawler.bat UrlFileFrom201TO300.txt crawler.bat UrlFileFrom301TO400.txt ...