[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сброс скрипта по таймауту
vedmed
Добрый вечер, Господа!
У меня вопрос к знающим людям, проблема такая, у меня на сервере должен отработать скрипт, скрипт этот жмет картинки, т.е. создает новую картинку из той что уже есть на сервере, но маленького размера. Фоток скопилось очень много где-то 2500. В общем, скрипт работает нормально без ошибок, но выполняется долго. В итоге выдает мне такую ошибку: Fatal error: Maximum execution time of 30 seconds exceeded in c:\myproject\cat.timeseller.ru\admin\admin\watch_catalog\generate_prev.php on line 130. Знает кто-нибудь как его можно выполнить обойдя таймаут?



Спустя 25 минут, 14 секунд (1.06.2009 - 23:05) kirik написал(а):
Попробуй вначале скрипта поставить
PHP
set_time_limit(0);

Спустя 4 минуты, 10 секунд (1.06.2009 - 23:09) twin написал(а):
Может не помочь... У меня сервер упрямо это игнорирует. Все от хостера зависит. Если это разовый скрипт и не поможет, то лучше перетащить на локалку, отресайзить там и обратно. Или в саппорт.

Спустя 8 минут, 33 секунды (1.06.2009 - 23:17) jetistyum написал(а):
а ты картинки не в цикле жмешь?

Спустя 8 минут, 3 секунды (1.06.2009 - 23:25) vedmed написал(а):
В цикле. Вот так приблизительно:
PHP
foreach ($dat as $arr) {
    
$path=$arr['param_value'];    
    
    if (!empty(
$arr['ph1'])) {            
        
$name_dir=generate_prev($arr['ph1'],$path);
        
$query="UPDATE watch_records SET ph6='{$name_dir}' WHERE id_w='{$arr[id_w]}'";
        
$result=mysql_query($query);                                    
        if (!
$result) {
          die(
"Cold't execute request: ".$query);
        }            
    }
}

Спустя 7 минут, 6 секунд (1.06.2009 - 23:33) vedmed написал(а):
set_time_limit(0); - помогло выполниться на локальном компе. А можно как-то узнать, сработает ли это на сервере, кроме как запустить скрипт?

Спустя 1 минута, 35 секунд (1.06.2009 - 23:34) twin написал(а):
У тебя 2500 запросов... Караул конечно. Частями надо. А что мешает запустить?

Спустя 6 минут, 54 секунды (1.06.2009 - 23:41) vedmed написал(а):
Боюсь половинчатого действия в случае если сбросит по таймауту.

Спустя 4 минуты, 34 секунды (1.06.2009 - 23:46) twin написал(а):
Запусти пустой цикл со слипом к примеру и посмотри.

Спустя 4 минуты, 58 секунд (1.06.2009 - 23:51) vedmed написал(а):
Ок.Спасибо всем.Попробую.

Спустя 7 секунд (1.06.2009 - 23:51) twin написал(а):
Можно вообще без цикла
PHP
set_time_limit(0);
sleep(60);

Спустя 6 часов, 58 минут, 26 секунд (2.06.2009 - 06:49) kirik написал(а):
Цитата (twin @ 1.06.2009 - 15:51)
Можно вообще без цикла
PHP
set_time_limit(0);
sleep(60);

Только нужно брать во внимание, что этот пример сработает только под Win сервером, а под Unix функция sleep не считается как время выполнения скрипта (наравне с запросами в БД, system(), exec()..)

Спустя 2 часа, 28 минут, 24 секунды (2.06.2009 - 09:18) vedmed написал(а):
А есть идеи как можно проверить на *inux сервере?

Спустя 3 минуты (2.06.2009 - 09:21) kirik написал(а):
Цитата (vedmed @ 2.06.2009 - 01:18)
А есть идеи как можно проверить на *inux сервере?

Ну дык phpinfo() глянь smile.gif

Спустя 7 минут, 15 секунд (2.06.2009 - 09:28) sergeiss написал(а):
Еще вариант, про который я уже много раз тут говорил smile.gif - это чтобы скрипт вызывал сам себя. Например, сделать так, чтобы скрипт обрабатывал одну картинку, после чего (через ДжаваСкрипт) вызывал сам себя, с указанием в параметрах на загрузку следующего файла.
Надо только создать список файлов в каком-то файле, и брать оттуда имя текущего файла для обработки. Как только файл-список опустел, то обработка заканчивается.
И обрабатывай хоть десятки тысяч фоток, до лимита времени никогда не дойдешь. Потому что таймер при каждом новом вызове обнуляется.

Спустя 14 минут, 12 секунд (2.06.2009 - 09:42) twin написал(а):
Это не обязательно на js делать. можно просто. ну остановится скрипт, запусти еще раз. Или если лениво просто рефрешь на минуту поставить и курить бамбук.

Проверить лимит можно так:

PHP
set_time_limit(31);
$start date('U');
for(
$i $start$i $start 31$i date('U'))
{}
echo 
"Прошла 31 секунда, все работает";


А вообще sergeiss дело говорит.

Спустя 24 минуты, 16 секунд (2.06.2009 - 10:06) twin написал(а):
Вот это попробуй, я не проверял правда

Сначала список файлов
PHP
$result = mysql_query("SELECT `ph6` FROM `watch_records`");
     while($file = mysql_fetch_assoc($result))
     $list_file .= $file['ph6'].'\n';
     
     file_put_contents
('list_file.txt',$list_file);


А потом примерно так:
PHP
header("Refresh: 60; url=".$_SERVER['PHP_SELF'] );     

$list_file 
= file('list_file.txt');
while(
$list_file)
{
$path = array_pop($list_file);

    if (!empty($arr['ph1'])) {            
        $name_dir 
= generate_prev($arr['ph1'],$path);
        $query="UPDATE watch_records SET ph6='{$name_dir}' WHERE id_w='{$arr[id_w]}'";
        $result=mysql_query($query);                                    
        if 
(!$result) {
          die("Cold't execute request: ".$query);
        } 
// Тут я не знаю что за условие, может не сюда, а в блок с запросом
file_put_contents('list_file.txt',implode("\n",$list_file));
}
и пускай молотит.

Спустя 1 день, 19 минут, 37 секунд (3.06.2009 - 10:26) vedmed написал(а):
Спасиб,уже решил. Выполнил все у себя на машине, а потом обновил на сервере.
set_time_limit(0) - сервер проигнорил sad.gif

Спустя 9 минут, 49 секунд (3.06.2009 - 10:36) stepan написал(а):
У меня с jommla была такая ошибка я пробывал в скрипт кидал set_time_limit(0) но на сервере игнорирует, а через .htaccess все съел.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.