Насколько я понимаю его, это - узел, который не является листом.
Ну, не обращая внимания на тот факт, что попытка 100 000 запросов cURL абсолютно безумна, вы, вероятно, достигли предела памяти.
Попробуйте установить предел памяти на что-нибудь более разумное:
ini_set('memory_limit', '256M');
И как побочный совет, не устанавливайте время выполнения на что-то нелепое, есть вероятность, что вы в конечном итоге найдете способ добиться этого с помощью такого сценария. ;]
Вместо этого просто установите его на 0
, это функционально эквивалентно полному отключению ограничения выполнения:
ini_set('max_execution_time', 0);
Множество идей:
1) Не делайте этого внутри HTTP-запроса. Напишите php-скрипт командной строки, чтобы управлять им. Вы можете использовать связанный с Интернетом скрипт, чтобы запустить его, если необходимо.
2) Вы должны иметь возможность установить max_execution_time равным нулю (или вызвать set_time_limit (0)), чтобы гарантировать, что вы не отключитесь при превышении ограничение по времени
3) Похоже, вы действительно хотите реорганизовать это в нечто более разумное. Подумайте о настройке небольшой системы очередей заданий и наличии php-скрипта, который заставит нескольких детей выполнять всю работу.
Как говорит Джош, посмотрите свой error_log и поймите, почему вас сейчас закрывают. Попробуйте выяснить, сколько памяти вы используете - это может быть проблемой. Попробуйте установить max_execution_time равным нулю. Может быть, это быстро доставит вас туда, куда вам нужно.
Но в конечном итоге похоже, что у вас слишком много работы внутри одного HTTP-запроса. Убери его из http, разделяй и властвуй!
Вы можете установить время ожидания неопределить, изменив ваш PHP.ini и установив переменную выполнения скрипта.
Но вы также можете рассмотреть небольшое изменение архитектуры. Сначала рассмотрите подход «запустил и забыл» при получении 100 000 запросов curl. Во-вторых, подумайте об использовании "wget" вместо curl.
Вы можете ввести простой " wget URL -o UniqueFileName &
". Это будет извлекать веб-страницу, сохранять ее с «уникальным» именем файла и все в фоновом режиме.
Затем вы можете перебирать каталог файлов, данные greping (preg_matching) и выполнять вызовы БД. Перемещайте файлы по мере их обработки в архив и продолжайте итерацию, пока не кончатся файлы.
Думайте о каталоге как о «очереди» и пусть один процесс просто обрабатывает файлы. Попросите второй процесс просто выйти и захватить данные веб-страницы. Вы можете добавить третий процесс, который вы можете «контролировать», который работает независимо и просто сообщает статистику моментальных снимков. Два других могут быть просто «веб-сервисами» без интерфейса.
Этот тип многопоточности действительно мощный и малоиспользуемый ИМХО. Для меня это настоящая сила Интернета.
100 000 запросов cURL ??? Ты безумец. Разбей эти данные!
Что находится в apache error_log? Вы достигли предела памяти?
РЕДАКТИРОВАТЬ: Похоже, вы достигли предела памяти. У вас есть доступ к PHP.ini? Если это так, вы можете поднять там memory_limit . Если нет, попробуйте запустить двоичные файлы curl или wget с помощью функций exec
или shell_exec
, чтобы они выполнялись как отдельные процессы, не используя память PHP.