Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: time limit
 
 автор: Глинтвейн   (16.11.2006 в 15:21)
 
 

Созрел вопрос: как безболезненно автоматически обработать больше количество данных. Допустим, скрипт выполняет н-ное количество процессов, связанных с большими временными затратами (ок. 0,5) секунд. Соотв-но может возникнуть такая проблема, как превышение установленного на сервере лимита времения выполнения. Подскажите, каким образом это можно обойти?

   
 
 автор: Loki   (16.11.2006 в 15:48)   письмо автору
 
   для: Глинтвейн   (16.11.2006 в 15:21)
 

set_time_limit(0);
или частями делать...

   
 
 автор: Глинтвейн   (17.11.2006 в 08:46)
 
   для: Loki   (16.11.2006 в 15:48)
 

Частями делать... А если скрипт запускается кроном, будет ли это работать?

   
 
 автор: XPraptor   (17.11.2006 в 12:08)   письмо автору
 
   для: Глинтвейн   (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");
?>

а по логике, он должен прописывать в файл одну и ту же дату дважды - не выполняется:(

   
 
 автор: XPraptor   (17.11.2006 в 14:03)   письмо автору
 
   для: Глинтвейн   (17.11.2006 в 13:22)
 

Все верно, сам себя вызовет и дважды запишет.
Но только он может еще не успеть закрыться, а ты второй раз его вызываешь, поэтому ставь контроль при открытии не занят ли файл и жди его освобождения.
Второй нюанс, ты должен полностью указать путь к файлу в Header а то может он не из той директории пытается вызвать себя.
Плюс нужно остановить его а так он бесконечно будет писать вызывая себя.

   
 
 автор: Trianon   (17.11.2006 в 14:29)   письмо автору
 
   для: Глинтвейн   (17.11.2006 в 13:22)
 

Крону наплевать на header. header браузером воспринимается. В некоторых случаях - апачем. Но не кроном.
а для браузера с апачем Ваш вариант - неконтролируемая бесконечная рекурсия.

   
 
 автор: Глинтвейн   (17.11.2006 в 14:54)
 
   для: Trianon   (17.11.2006 в 14:29)
 

Вот мы и пришли к тому, с чего начинали - рекурсия, выполнение которой, неизвестно на сколько затянется.
Неужели остается только один вариант - ставить запуск скрипта на каждые пять минут, и вытягивать то, что нужно? Не может же такого быть! Должен быть какой-нибудь более приемемый вариант.

   
 
 автор: XPraptor   (17.11.2006 в 15:19)   письмо автору
 
   для: Глинтвейн   (17.11.2006 в 14:54)
 

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

[поправлено модератором]

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования