nikedeforest
|
|
« : 20-08-2005 17:18 » |
|
Т.е. скрипт предназначен для скачивания изображений. В зависимости от количества изображений (плюс качества связи) скрипт может выполняться от 30 секунд до минут 5-10. Так вот будет ли он выполняться эти 5-10 минут, ничто не ограничит его выполнение по времени сос тороны сервера и хостинга или что-то типа этого?
|
|
|
Записан
|
ещё один вопрос ...
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #1 : 20-08-2005 19:30 » |
|
С. настройки PHP - есть общий параметер, ограничивающий время выполнения скрипта. Базовая настройки, если не изменяет память, как раз 30 секунд.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
nikedeforest
|
|
« Ответ #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
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #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
|
|
« Ответ #4 : 22-08-2005 14:00 » |
|
Ну да, точно. Я же говорю, мог опечататься. Смысл в том, что скрипт работает и работает правильно. Я дома проверял, используя пакет Денвера, но для этого мне пришлось настройку max_execution_time изменить в php.ini. Вопрос в другом, можно ли этот код как-то оптимизировать, чтобы он быстрее работал (хотя что тут оптимизировать-то в трех строках ), если нет, то что делать, на С\С++ писать? А будет ли на С быстрее тогда? Есть ли другие варианты? зыЖ Тебе заменить надо символ - только если он первый в строке ? Или все - надо заменить на пробелы ?
Мне надо заменить символ, если он находится первым в строке. Поясню для чего, потом я этот текст начинаю парсировать из XML в CSV, если эти тире в начале строке присутствуют, то при парсировании выдается, что обнаружена ошибка в XML, в пинципе ничего страшного, но хоотелось бы, чтобы все были чисто .
|
|
« Последнее редактирование: 22-08-2005 14:05 от nikedeforest »
|
Записан
|
ещё один вопрос ...
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #5 : 22-08-2005 14:04 » |
|
оптимизировать, чтобы он быстрее работал (хотя что тут оптимизировать-то в трех строках ), если нет, то что делать, на С\С++ писать? А будет ли на С быстрее тогда? Есть ли другие варианты? Можно и на Перле. Насчёт того быстрее ли будет, наверно, но я не уверен Ты так и не ответил что тебе нужно 1. Тебе надо заменить символ - только если он первый в строке 2. Тебе надо все - заменить на пробелы
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
nikedeforest
|
|
« Ответ #6 : 22-08-2005 14:06 » |
|
Тебе заменить надо символ - только если он первый в строке ? Или все - надо заменить на пробелы ?
Мне надо заменить символ, если он находится первым в строке. Поясню для чего, потом я этот текст начинаю парсировать из XML в CSV, если эти тире в начале строке присутствуют, то при парсировании выдается, что обнаружена ошибка в XML, в пинципе ничего страшного, но хоотелось бы, чтобы все были чисто .
|
|
|
Записан
|
ещё один вопрос ...
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #7 : 22-08-2005 21:55 » |
|
nikedeforest, забача web-программ - отработать в минимальное время. 30 секунд - очень много - выкручивайся. Обычно, долговременные операции размещаются в планировщике задач (наппр., а *nix - cron), или применяется разделенное вычисление - обработчик каждого запроса вычисляет малую часть. Тут следует выбирать. PHP-программы, работающие часами, обычно пишут "под себя" - т.е., когда есть безопасная возможность перестроить сервер.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
PantiL
Гость
|
|
« Ответ #8 : 23-08-2005 04:00 » |
|
Убери из своего скрипта указатели - меняй значение непосредственно в элементе массива $f[$i]=" "; Так у меня твой скрипт с 13Мб справляется за пол сек., а с указателем да действительно очень долго.
|
|
|
Записан
|
|
|
|
nikedeforest
|
|
« Ответ #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], а при присваивании нельзя?
|
|
|
Записан
|
ещё один вопрос ...
|
|
|
PantiL
Гость
|
|
« Ответ #10 : 23-08-2005 13:18 » |
|
Странно! А как ругается?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #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
|
|
« Ответ #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
Технический
Администратор
Offline
Пол:
|
|
« Ответ #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
|
|
« Ответ #14 : 24-08-2005 12:30 » |
|
cron не ограничивает программы - он просто их запускает по расписанию.
Это я понимаю, мне непонятно другое. Если он запустит скрипт, который будет выполняться по времени допустим 40 минут, отработает ли скрипт эти 40 минут или сработает ограничение на 30 секунд. Переписать с php на perl не сложно, если конечно знаешь оба языка.
Я совсем не знаю Perl, если уж переписывать то тогда на С++, к тому же давно теплится желание попробовать С++ в качестве CGI-скрипта, но все повода нет, да и со временем туго, надо изучать многое, к примеру работу с MySQL средствами С++ и т.п. Пока пусть не РНР все работает, а потом видно будет.
|
|
|
Записан
|
ещё один вопрос ...
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #15 : 24-08-2005 12:52 » |
|
Чего не понятного? - php сам ограничивает время, согласно настройкам. Если ты запустишь тот же перловый скрипт, то он будет работать до упора.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
nikedeforest
|
|
« Ответ #16 : 24-08-2005 13:01 » |
|
Чего не понятного? - php сам ограничивает время, согласно настройкам. Если ты запустишь тот же перловый скрипт, то он будет работать до упора.
Теперь все понятно. Просто мне первоначально показалось, что если используется cron, то есть какие-то исключения для РНР.
|
|
|
Записан
|
ещё один вопрос ...
|
|
|
|