Цикл для file_get_contents

Dukuй

Щас сменю себе статус
Регистрация
24 Фев 2009
Сообщения
308
Реакции
190
Доброго времени суток. Существует условный код:
PHP:
for($i = 1; $i<5000000000; $i++)
{
$value = file_get_contents('http://localhost/'. $i .'');
mysql_query("здесь добавляем данные в таблицу");
}
То есть, мне необходимо сделать к примеру 5 млн запросов к сайту, каждый раз с разными значениями (по порядку) и добавить сожержимое в таблицу MySQL. Но, таким образом выполнение скрипта будет проходить около 12 часов и получается ошибка max_execution_time.

Есть ли какое то решение задачи без увеличения max_execution_time? Может, что бы скрипт каждый раз начинался по новой.

И еще один вопрос, до пустим одной из страниц по порядку file_get_contents('Для просмотра ссылки Войди или Зарегистрируйся'. $i . не существует, можно ли как то прервать дальнейшее выполнение скрипта и опять вернуться к циклу, но уже со следующим значением $i по порядку. Что бы каждый раз не делать лишний запрос к мускулу?
Спасибо.
 
Доброго времени суток. Существует условный код:
PHP:
for($i = 1; $i<5000000000; $i++)
{
$value = file_get_contents('http://localhost/'. $i .'');
mysql_query("здесь добавляем данные в таблицу");
}
То есть, мне необходимо сделать к примеру 5 млн запросов к сайту, каждый раз с разными значениями (по порядку) и добавить сожержимое в таблицу MySQL. Но, таким образом выполнение скрипта будет проходить около 12 часов и получается ошибка max_execution_time.

Есть ли какое то решение задачи без увеличения max_execution_time? Может, что бы скрипт каждый раз начинался по новой.

И еще один вопрос, до пустим одной из страниц по порядку file_get_contents('Для просмотра ссылки Войди или Зарегистрируйся'. $i . не существует, можно ли как то прервать дальнейшее выполнение скрипта и опять вернуться к циклу, но уже со следующим значением $i по порядку. Что бы каждый раз не делать лишний запрос к мускулу?
Спасибо.
Используйте php cli
Тоесть в терминале php /var/www/html/process.php
Там неограницно и мимо вебсервера.
Путь к php и скрипту свой )
 
1) Чтобы сократить время до нескольких минут нужно сначала сформировать SQL запрос одним выражением
пример:
Код:
INSERT INTO tablename (column-a, [column-b, ...])
VALUES ('value-1a', ['value-1b', ...]),
       ('value-2a', ['value-2b', ...]),
а потом уже его выполнить.
Но это тоже не очень хороший метод если у вас 100K+ строк.
Самый быстрый способ это сформировать в цикле данные в формате CSV, потом записать их в файл, а потом воспользоваться LOAD DATA INFILE.
2) Прерывать скрипт не нужно, а нужно просто пропустить выполнение одного цикла
PHP:
for($i = 1; $i<5000000000; $i++)
{
$value = file_get_contents('http://localhost/'. $i .'');
if (проверка условия при котором не нужно выполнять данную итерацию) {
    continue;
}
mysql_query("здесь добавляем данные в таблицу");
}
ну а если очень хочется прервать выполнение всего цикла for, то вместо continue; нужно break; и перед этим записать куда-нибудь номер итерации на которой остановились (в файлик или в БД).
 
Можно в базу или в текстовый файл писать количество выполненных запросов, чтобы отслеживать, сколько уже сделано и вовремя остановить скрипт, а в самом цикле сделать перенаправление через header('Location... на копию данного скрипта но в файле с другим названием, чтобы сервер как бы выполнял другой скрипт, но по сути мы будем выполнять тот же код. Таким образом ограничение по максимальному времени выполнения скрипта можно будет обойти.
 
Назад
Сверху