curl — Как запустить процесс PHP для более длительного времени

Я работаю над очисткой веб-страниц с помощью php и curl, чтобы удалить весь веб-сайт.

но процесс соскоба занимает больше одного дня

Я даже использовал

ignore_user_abort(true);
set_error_handler(array(&$this, 'customError'));
set_time_limit (0);
ini_set('memory_limit', '-1');

Я также очистил память после очистки страницы Я использую простой HTML DOM
получить информацию о соскобах со страницы

Но все равно процесс работает и работает нормально для некоторого количества ссылок, после чего он останавливается, хотя процесс продолжает циркулировать в браузере, и журнал ошибок не генерируется.

Не могу понять, в чем проблема.
Также мне нужно знать, может ли PHP
запустить процесс в течение двух или трех дней?

заранее спасибо

0

Решение

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

Вы сказали, что пытались ignore_user_abort(true);, но затем указал, что вы запускаете это через браузер. Этот параметр работает только в командной строке, так как закрытие окна браузера для сценария этого типа в любом случае не завершит процесс.

У вас есть xDebug? simplehtmlDOM выдаст довольно интересные ошибки с искаженным html (например, ссылка внутри неработающей ссылки). xDebug выдаст ошибку MAX_NESTING_LEVEL в браузере, но не выдаст ее в консоли, если вы явно не указали это с флагом -d.

Есть много других ошибок, уведомлений, предупреждений и т. Д., Которые сломают / остановят ваш скрипт, ничего не записав в error_log.

Вы получаете какие-либо ошибки?

При использовании cURL таким способом важно использовать multi-cURL для параллельной обработки URL-адресов — в зависимости от вашей среды легко получить 150-200 URL-адресов за раз.

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

Я бы предложил запустить ваш скрипт через консоль и выяснить, когда именно он прекращает запускать этот URL отдельно — по крайней мере, это покажет, является ли это проблемой с памятью или нет.

Также помните, что set_error_handler(array(&$this, 'customError')); НЕ будет ловить все типы ошибок, которые может выдать PHP.

Когда вы в следующий раз запустите его, выполните отладку через консоль, чтобы показать прогресс, и отследите фактическое использование памяти — либо через PHP (вывод на консоль), либо через менеджер системных процессов. Таким образом, вы будете ближе к выяснению фактической проблемы с вашим сценарием.

1

Другие решения

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

Если вы рекурсивно вызываете URL-адреса, память может быть заполнена.

Попробуйте сделать цикл и работать с базой данных:

отсканируйте страницу, сохраните найденные ссылки, если их еще нет в базе данных.
когда закончите, сделайте выбор и получите первый неотсканированный URL
{Цикл}

0

По вопросам рекламы [email protected]