| |
автор: Глинтвейн (16.11.2006 в 15:21) |
|
| | Созрел вопрос: как безболезненно автоматически обработать больше количество данных. Допустим, скрипт выполняет н-ное количество процессов, связанных с большими временными затратами (ок. 0,5) секунд. Соотв-но может возникнуть такая проблема, как превышение установленного на сервере лимита времения выполнения. Подскажите, каким образом это можно обойти? | |
| |
|
|
| |
|
|
| |
для: Глинтвейн
(16.11.2006 в 15:21)
| | | set_time_limit(0);
или частями делать... | |
| |
|
|
| |
автор: Глинтвейн (17.11.2006 в 08:46) |
|
| |
для: Loki
(16.11.2006 в 15:48)
| | | Частями делать... А если скрипт запускается кроном, будет ли это работать? | |
| |
|
|
| |
|
|
| |
для: Глинтвейн
(17.11.2006 в 08:46)
| | | Я тут когда то уже поднимал эту тему.
Мне нужно было рассылку отладить много тысчную, а у хостера 30 секунд и set_time_limit запрещена.
Мы тогда пришли к общему мнению и я так и сделал скрипт, и до сих пор он работает без сбоев.
При запуске скрипт проверяет (у меня в MySQL) на каком месте он остановился в прошлый раз, и продолжает обработку небольшой части писем и в конце пишет (у меня в mySQL) место где остановился, и вызывает себя же через Header("Location: скрипт"); exit();
А у того, кто мне это посоветовал, он вызывался через html заголовок http-equiv="Refresh".
Но тогда не контролтруется закончил ли скрипт обработку текущей части или нет. | |
| |
|
|
| |
автор: Глинтвейн (17.11.2006 в 13:22) |
|
| |
для: XPraptor
(17.11.2006 в 12:08)
| | | 2XPraptor
А у Вас он с помощью крона запускался? Потому что у меня, например такой код:
<?php
$file = fopen ("do.txt","a+");
fputs ($file, "Запись в файл произведена: ".date("H:i:s d.m.Y")."\n");
fclose ($file);
Header ("location: cron.php");
?>
|
а по логике, он должен прописывать в файл одну и ту же дату дважды - не выполняется:( | |
| |
|
|
| |
|
|
| |
для: Глинтвейн
(17.11.2006 в 13:22)
| | | Все верно, сам себя вызовет и дважды запишет.
Но только он может еще не успеть закрыться, а ты второй раз его вызываешь, поэтому ставь контроль при открытии не занят ли файл и жди его освобождения.
Второй нюанс, ты должен полностью указать путь к файлу в Header а то может он не из той директории пытается вызвать себя.
Плюс нужно остановить его а так он бесконечно будет писать вызывая себя. | |
| |
|
|
| |
|
|
| |
для: Глинтвейн
(17.11.2006 в 13:22)
| | | Крону наплевать на header. header браузером воспринимается. В некоторых случаях - апачем. Но не кроном.
а для браузера с апачем Ваш вариант - неконтролируемая бесконечная рекурсия. | |
| |
|
|
| |
автор: Глинтвейн (17.11.2006 в 14:54) |
|
| |
для: Trianon
(17.11.2006 в 14:29)
| | | Вот мы и пришли к тому, с чего начинали - рекурсия, выполнение которой, неизвестно на сколько затянется.
Неужели остается только один вариант - ставить запуск скрипта на каждые пять минут, и вытягивать то, что нужно? Не может же такого быть! Должен быть какой-нибудь более приемемый вариант. | |
| |
|
|
| |
|
|
| |
для: Глинтвейн
(17.11.2006 в 14:54)
| | | В самом начале скрипта проверяешь из MySQL или из файла, был уже вызов скрипта или нет.
Если не было то пишешь свою дату и пишешь в файл или MySQL что был вызов один. Когда второй раз запустит сам себя скрипт он проверит и увидит что вызов уже был один, пишешь себе дату в файл, а в файл проверки или MySQ пишешь что вызова не было и больше не вызываешь сам себя.
[поправлено модератором] | |
| |
|
|