Я работаю над очисткой веб-страниц с помощью php и curl, чтобы удалить весь веб-сайт.
но процесс соскоба занимает больше одного дня
Я даже использовал
ignore_user_abort(true);
set_error_handler(array(&$this, 'customError'));
set_time_limit (0);
ini_set('memory_limit', '-1');
Я также очистил память после очистки страницы Я использую простой HTML DOM
получить информацию о соскобах со страницы
Но все равно процесс работает и работает нормально для некоторого количества ссылок, после чего он останавливается, хотя процесс продолжает циркулировать в браузере, и журнал ошибок не генерируется.
Не могу понять, в чем проблема.
Также мне нужно знать, может ли PHP
запустить процесс в течение двух или трех дней?
заранее спасибо
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 (вывод на консоль), либо через менеджер системных процессов. Таким образом, вы будете ближе к выяснению фактической проблемы с вашим сценарием.
Даже если вы установите неограниченную память, существует физический предел.
Если вы рекурсивно вызываете URL-адреса, память может быть заполнена.
Попробуйте сделать цикл и работать с базой данных:
отсканируйте страницу, сохраните найденные ссылки, если их еще нет в базе данных.
когда закончите, сделайте выбор и получите первый неотсканированный URL
{Цикл}