Как проверить много ссылок на PHP ?

voodoo911
На сайте с 11.03.2008
Offline
157
895

Добрый день. Может кто подскажет.

Есть сайт. В нем есть посты. В постах есть ссылки.

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

Проблема в том, что при небольшом кол-ве ссылок все работает хорошо. Но если ссылок стает много, север выдает ошибку сервера. Я ставил set_time_limit в 0 но в результате 504 gateway time-out

Как можно проверить все ссылки за раз? Ибо кроме как делить их на части и и проверять группами варианта не вижу.

Спасибо за идеи

PM
На сайте с 30.08.2010
Offline
48
#1
voodoo911:
Добрый день. Может кто подскажет.
Есть сайт. В нем есть посты. В постах есть ссылки.
Есть скрипт, его задача проти по всем ссылкам на сайте и проверить живая ли ссылка или нет ( получить код ответа. )
Проблема в том, что при небольшом кол-ве ссылок все работает хорошо. Но если ссылок стает много, север выдает ошибку сервера. Я ставил set_time_limit в 0 но в результате 504 gateway time-out

Как можно проверить все ссылки за раз? Ибо кроме как делить их на части и и проверять группами варианта не вижу.
Спасибо за идеи

Естественно делить частями. Зачем сервер мучить?)

Вообще, советую повесить такой скрипт на планировщик, и проверять раз в n время в фоновом режиме.

A
На сайте с 19.07.2010
Offline
130
#2

Для все и сразу: попробуйте запустить свой скрипт не через веб, т.е. с командной строки или через cron.

А по уму:

один скрипт составляет список всех урлов,

второй скрипт, по крону, берет N урлов(если они есть) и проверяет.

Нужна проверка - забросили урлов, нет урлов - второй скрипт ничего не делает.

.............
L
На сайте с 07.12.2007
Offline
351
#3

multiCurl если ссылок несколько сотен.

Если ссылок - тысячи: выгружать их в отдельную таблицу БД и чекать оттуда. Потом сверяться с данными этой таблицы.

Ragnarok
На сайте с 25.06.2010
Offline
239
#4

Если сайт на впс -- временно увеличить лимиты до космических, либо слить сайт себе и локально сделать те же огромные лимиты (php.ini)

//TODO: перестать откладывать на потом
SeVlad
На сайте с 03.11.2008
Offline
1609
#5
admak:
Для все и сразу: попробуйте запустить свой скрипт не через веб, т.е. с командной строки или через cron.

И какая разница, если эти ссылки (страница) генерится? ;) Все равно по http её нужно получить и распарсить и проверить. Сосбно затык не в http, а в распарсивании/проверке. Это да, лучше разбить на 2 или даже 3 отдельных задачи. Причем последнее - многопоточка.

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
PN
На сайте с 22.08.2012
Offline
103
#6
voodoo911:
Добрый день. Может кто подскажет.
Есть сайт. В нем есть посты. В постах есть ссылки.
Есть скрипт, его задача проти по всем ссылкам на сайте и проверить живая ли ссылка или нет ( получить код ответа. )
Проблема в том, что при небольшом кол-ве ссылок все работает хорошо. Но если ссылок стает много, север выдает ошибку сервера. Я ставил set_time_limit в 0 но в результате 504 gateway time-out

Как можно проверить все ссылки за раз? Ибо кроме как делить их на части и и проверять группами варианта не вижу.
Спасибо за идеи

Делайте проверку времени работы в самом скрипте. Как только превышает определенное значение, сохраняйте текущий id ссылки в сессию, и выводите кнопку Continue. А потом по нажатию все продолжится. Для однократного запуска это проще, чем с кроном мудрить:)

Мой совет помог? Не скупись! Bitcoin 1Lseddet1o1B6odgXQHbGaWGwRkt1Db8Ef Ethereum 0x450f1a17461e25194B7F9226cDEe70173F39e1e1
C
На сайте с 19.02.2010
Offline
77
#7
Ladycharm:
multiCurl если ссылок несколько сотен.
Если ссылок - тысячи: выгружать их в отдельную таблицу БД и чекать оттуда. Потом сверяться с данными этой таблицы.

Плюсую за multicurl. Я в своё время раз в десять-двадцать ускорял работу скрипта, который до этого в один поток загружал страницы.

Как вариант ещё уменьшить таймаут. Будет больше ложных срабатываний, но неработающие ссылки можно повторно чекнуть с большим таймаутом

IW
На сайте с 16.12.2014
Offline
73
#8

Если ссылки в постах зачем страницы парсить? Берите посты из БД - на порядок ускорится проверка, хотя делить все равно придется, если тысячи.

SSD VPS скидка 25% по купону iwork https://cp.inferno.name/cart.php?gid=23 | надежный хостинг http://bit.ly/2Yiq93h
PN
На сайте с 22.08.2012
Offline
103
#9
i-work:
Если ссылки в постах зачем страницы парсить? Берите посты из БД - на порядок ускорится проверка, хотя делить все равно придется, если тысячи.

да, и кстати временно в таблице можно создать поле checked. И каждый раз скрипт будет выбирать только где checked=0. Так решится проблема разделения на несколько запросов.

K
На сайте с 03.06.2015
Offline
45
#10

Что будет с ссылкой, если она окажется дохлой?

MYSQL PHP JS HTML CSS SEO TXT США СССР

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