Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Есть ли ограничение на время выполнения скрипта РНР  (Прочитано 22054 раз)
0 Пользователей и 1 Гость смотрят эту тему.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 20-08-2005 17:18 » 

Т.е. скрипт предназначен для скачивания изображений. В зависимости от количества изображений (плюс качества связи) скрипт может выполняться от 30 секунд до минут 5-10. Так вот будет ли он выполняться эти 5-10 минут, ничто не ограничит его выполнение по времени сос тороны сервера и хостинга или что-то типа этого?
Записан

ещё один вопрос ...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 20-08-2005 19:30 » 

С. настройки PHP - есть общий параметер, ограничивающий время выполнения скрипта. Базовая настройки, если не изменяет память, как раз 30 секунд.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 22-08-2005 10:33 » 

Да, я сегодня посмотрел настройки РНР на сервере моего хостинга, там тоже 30 секунд.
Вопрос Чернышевского - "Что делать?". С картинакми фиг с ними, но у меня должна происходить обработка текстового файла, так он у меня обрабатывается минут за пять дома. Файл весит больше 1 Мб.
Очень долго проходят следующие действия:
Код:
$f=file("name.txt");
for($i=0; $i<count($f); $i++)
{
  if($f[$i][0]="-")
  { $string=&$f;
     $string[$i][0]=" ";
  }

}
Мог где-то очепятаться. Но смысл такой, что скрипт пробегает по файлу и если находится строка, где первый элемент равен "-", то заменяется символ на пробел. Так вот это дело выполняется около 5 минут. массив $f содержит более 9 тысяч элементов (т.е. count($f)>=9000).
Что же мне делать? Не представляю как можно оптимизировать данный код. Есть-ли выхощд из этого. Если допустим я эти действия на пишу на С\С++, будут ли они выполняться быстрее?
Записан

ещё один вопрос ...
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #3 : 22-08-2005 13:52 » 

Мог где-то очепятаться. Но смысл такой, что скрипт пробегает по файлу и если находится строка, где первый элемент равен "-", то заменяется символ на пробел. Так вот это дело выполняется около 5 минут. массив $f содержит более 9 тысяч элементов (т.е. count($f)>=9000).
Не вижу смысла в записи $f[$i][0]="-";
ты тут не сравниваеш , а присваиваеш. Для сравнения надо два знака == , т.е.  $f[$i][0] == "-";

Тебе заменить надо символ - только если он первый в строке ? Или все - надо заменить на пробелы ?
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 22-08-2005 14:00 » 

Ну да, точно. Я же говорю, мог опечататься. Смысл в том, что скрипт работает и работает правильно. Я дома проверял, используя пакет Денвера, но для этого мне пришлось настройку max_execution_time изменить в php.ini. Вопрос в другом, можно ли этот код как-то оптимизировать, чтобы он быстрее работал (хотя что тут оптимизировать-то в трех строках Жаль ), если нет, то что делать, на С\С++ писать? А будет ли на С быстрее тогда? Есть ли другие варианты?
зыЖ
Цитата
Тебе заменить надо символ - только если он первый в строке ? Или все - надо заменить на пробелы ?
Мне надо заменить символ, если он находится первым в строке. Поясню для чего, потом я этот текст начинаю парсировать из XML в CSV, если эти тире в начале строке присутствуют, то при парсировании выдается, что обнаружена  ошибка в XML, в пинципе ничего страшного, но хоотелось бы, чтобы все были чисто Ага.
« Последнее редактирование: 22-08-2005 14:05 от nikedeforest » Записан

ещё один вопрос ...
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #5 : 22-08-2005 14:04 » 

оптимизировать, чтобы он быстрее работал (хотя что тут оптимизировать-то в трех строках Жаль ), если нет, то что делать, на С\С++ писать? А будет ли на С быстрее тогда? Есть ли другие варианты?
Можно и на Перле. Насчёт того быстрее ли будет, наверно, но я не уверен Улыбаюсь
Ты так и не ответил что тебе нужно Улыбаюсь
1. Тебе надо заменить символ - только если он первый в строке
2. Тебе надо все - заменить на пробелы
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 22-08-2005 14:06 » 

Цитата
Тебе заменить надо символ - только если он первый в строке ? Или все - надо заменить на пробелы ?
Мне надо заменить символ, если он находится первым в строке. Поясню для чего, потом я этот текст начинаю парсировать из XML в CSV, если эти тире в начале строке присутствуют, то при парсировании выдается, что обнаружена  ошибка в XML, в пинципе ничего страшного, но хоотелось бы, чтобы все были чисто Ага .
Записан

ещё один вопрос ...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 22-08-2005 21:55 » 

nikedeforest, забача web-программ - отработать в минимальное время. 30 секунд - очень много - выкручивайся. Обычно, долговременные операции размещаются в планировщике задач (наппр., а *nix - cron), или применяется разделенное вычисление - обработчик каждого запроса вычисляет малую часть. Тут следует выбирать. PHP-программы, работающие часами, обычно пишут "под себя" - т.е., когда есть безопасная возможность перестроить сервер.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
PantiL
Гость
« Ответ #8 : 23-08-2005 04:00 » 

Убери из своего скрипта указатели - меняй значение непосредственно в элементе массива $f[$i]=" ";
Так у меня твой скрипт с 13Мб справляется за пол сек., а с указателем да действительно очень долго.
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 23-08-2005 10:43 » 

Цитата
Обычно, долговременные операции размещаются в планировщике задач (наппр., а *nix - cron),
Стоп, так этот скрипт потом и поместят в cron. А при помещении скрипта в планироващик задач, время на его выполнение увеличивается?
Цитата
Убери из своего скрипта указатели - меняй значение непосредственно в элементе массива $f[$i]=" ";
Т.е. сделать так
Код:
$f=file("name.txt");
for($i=0; $i<count($f); $i++)
{
  if($f[$i][0]=="-")
  $f[$i]=" ";
}
Если я понял правильно, то надо проверить.Я пробовал так
Код:
$f[$i][0]=" "; 
Но происходило ругательство, к моему великому удивлению и недопониманию. Почему при сравнении так писать можно $f[$i][0], а при присваивании нельзя?
Записан

ещё один вопрос ...
PantiL
Гость
« Ответ #10 : 23-08-2005 13:18 » 

Странно! А как ругается?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 23-08-2005 17:06 » 

nikedeforest, ты хочешь чтобы php-скрипт на cron-е висел? Это неподходящий инструмент - php для web придуман. Логичнее С/С++ , Perl или еще какой язык.

Цитата
$f=file("name.txt");

for ( $i=0; $i<count($f); $i++ )
{
    if ( substr($f[$i],0,1) == "-" ) $f[$i] = " ";
}
$f - массив строк.
Обращение к скаляру как к массиву некорректно.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 23-08-2005 17:33 » 

Цитата
nikedeforest, ты хочешь чтобы php-скрипт на cron-е висел?
У меня уже один скрипт весит - для автоматического обновления базы - отработал и все. А я не совсем пойму, на cron можно повесить скрипты которые выполняются очень долго, я так понимаю?

Цитата
Обращение к скаляру как к массиву некорректно.
Я сейчас, с подсказки PantiL, делаю так
Код:
$f=file("name.txt");
for($i=0; $i<count($f); $i++)
{
  if($f[$i][0]=="-")
  $f[$i][0]=" ";
}
Все вроде работает нормально, хотя мне кажется до этого с этим были проблемы, а может и напутал чего-нибудь. RXL, я возьму твой способ на вооружение, спасибо.

Цитата
Это неподходящий инструмент - php для web придуман. Логичнее С/С++ , Perl или еще какой язык.
Если Я правильно тебя понял, то РНР предназначен для работы со связкой HTML и для вывода информации в браузер. Если же в браузер ничего не выводится (происходит внутренняя обслуживающая работа), то лучше работать с Perl или C++. Я так тебя понял?
Записан

ещё один вопрос ...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 23-08-2005 18:07 » 

cron не ограничивает программы - он просто их запускает по расписанию.

Угу - на перле писать логичнее - этот язык расчитан на работу с текстами, да и быстрее работает. Переписать с php на perl не сложно, если конечно знаешь оба языка.

Это функциональный аналог твоего скрипта:
Код:
@result = ();
open F, 'name.txt';
while ( <F> )
{
  s/^-/ /;
  push @result, $_;
}
« Последнее редактирование: 20-12-2007 20:45 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 24-08-2005 12:30 » 

Цитата
cron не ограничивает программы - он просто их запускает по расписанию.
Это я понимаю, мне непонятно другое. Если он запустит скрипт, который будет выполняться по времени допустим 40 минут, отработает ли скрипт эти 40 минут или сработает ограничение на 30 секунд.
Цитата
Переписать с php на perl не сложно, если конечно знаешь оба языка.
Я совсем не знаю Perl, если уж переписывать то тогда на С++, к тому же давно теплится желание попробовать С++ в качестве CGI-скрипта, но все повода нет, да и со временем туго, надо изучать многое, к примеру работу с MySQL средствами С++ и т.п. Пока пусть не РНР все работает, а потом видно будет.
Записан

ещё один вопрос ...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 24-08-2005 12:52 » 

Чего не понятного? - php сам ограничивает время, согласно настройкам. Если ты запустишь тот же перловый скрипт, то он будет работать до упора.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 24-08-2005 13:01 » 

Цитата
Чего не понятного? - php сам ограничивает время, согласно настройкам. Если ты запустишь тот же перловый скрипт, то он будет работать до упора.
Теперь все понятно. Просто мне первоначально показалось, что если используется cron, то есть какие-то исключения для РНР.
Записан

ещё один вопрос ...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines