Как быстро получить коды состояния списка url

Samail
На сайте с 10.05.2007
Offline
369
772

Сделал скрипт для поиска отсутствующих изображений. Ссылок больше тысячи.


<?php
function get_http_response_code($theURL) {
$headers = get_headers($theURL);
return substr($headers[0], 9, 3);
}
$jsonString = file_get_contents('свой_сайт/урлы.txt');
$cart = json_decode( $jsonString, true );
ksort($cart);
?>
<?php foreach($cart as $k => $v): ?>
<?php
$theURL = 'http://чужой_сайт/'.$k.'.png';
if (get_http_response_code($theURL) !== '200') {echo $theURL.' - '.get_http_response_code($theURL).' ('.$v['title_ru'].')<br/>';}
?>
<?php endforeach; ?>

Но все ссылки проверить скрипт не успевает "Fatal error: Maximum execution time of 180 seconds exceeded in".

Он их скачивает что-ли? Как можно ускорить процедуру? Мне нужен только заголовок, а не весь файл.

Artisan
На сайте с 04.03.2005
Offline
375
#1
Samail:
Как можно ускорить процедуру?

Лучше не ускорять, а распределять

время выполнения на много запусков.

Настроить запуски скрипта через cron например,

и обрабатывать один адрес за каждый запуск.

www.leak.info / ДАРОМ линки конкурентов и забытых доменов
PN
На сайте с 22.08.2012
Offline
103
#2

Если у Вас VPS/VDS, увеличьте время выполнения скрипта. Если хостинг, тоже можно попробовать. А иначе - да, распределять нагрузку.

Мой совет помог? Не скупись! Bitcoin 1Lseddet1o1B6odgXQHbGaWGwRkt1Db8Ef Ethereum 0x450f1a17461e25194B7F9226cDEe70173F39e1e1
ДП
На сайте с 23.11.2009
Offline
203
#3

Для получения только заголовков без тела ответа в HTTP используется метод HEAD (так, например, менеджеры закачки обычно определяют размер загружаемого файла без его скачивания).

В то же время, судя по документации php http://php.net/manual/ru/function.get-headers.php#example-4594 функция get_headers() использует метод GET, т.е. скачивает файлы. По ссылке на документацию есть способ заставить её использовать метод HEAD.

Поможет это или нет - я не знаю, теоретически должно.

Если вам это надо просто периодически делать - я бы наверно в сторону отдельных программ посмотрел, типа wget, curl (http://stackoverflow.com/questions/6136022/script-to-get-the-http-status-code-of-a-list-of-urls)

TF-Studio
На сайте с 17.08.2010
Offline
334
#4

дома у себя запустите. сняв лимиты.

или сделайте вызов самого себя.

получили 10(не суть сколько) заголовков. потом скрипт вызвал самого себя с указанием новой стартовой точки

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
Samail
На сайте с 10.05.2007
Offline
369
#5
Дикий пионер:
curl

Так?

$file = 'http://site/'.$k.'.png';
$ch = curl_init($file);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo $retcode;
curl_close($ch);

Так не помогло, HEAD тоже не помог, только что ошибка не показывается, а так останавливается примерно на том-же номере файла.

C
На сайте с 26.10.2013
Offline
54
#6

Ну проверяйте за раз 50 урлов из списка, потом эти 50 урлов из списка удаляйте (перезаписью файла 'свой_сайт/урлы.txt').

Урлы, которые отвечают не 200 - пишите в файл 'свой_сайт/плохие_урлы.txt', а не на экран

Задачу в крон, каждые две минуты

Через полтора-два часа получите итоговый результат в 'плохие_урлы.txt'

Услуги по парсингу данных (/ru/forum/939826), единоразовый и регулярный сбор данных. Любые объемы. Скрипты на PHP, создание и доработка, решение проблем с сайтами Пишите в личные сообщения или скайп
Samail
На сайте с 10.05.2007
Offline
369
#7

colorito, не, я хотел каждую ночь кроном этот скрипт запускать. А если это будет полтора часа длиться то ну его нафиг :)

C
На сайте с 26.10.2013
Offline
54
#8

Ну и пусть он круглосуточно дергает каждые две минуты

Добавьте в начало скрипта if ((date('G') < 2) or (date('G') > 4)) { die(); }

И будет работать с 2 до 4 утра, в остальные случаи - пустой вызов.

Утром проснулись - на хостинге файл со списком битых урлов.

Samail:
colorito, не, я хотел каждую ночь кроном этот скрипт запускать. А если это будет полтора часа длиться то ну его нафиг :)
ДП
На сайте с 23.11.2009
Offline
203
#9
Samail:
Так?

Я про отдельную программу curl.

Скриптом формируете список урлов и через exec дергаете внешнюю утилиту. По второй ссылке в моем посте есть скипты для wget и curl'а.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий