PDA

Просмотр полной версии : Время выполнения Php-скрипта


otmorozok428
27.12.2007, 18:17
Идея: Есть PHP-скрипт на удалённом серваке, который пытается подобрать по словарю имена таблиц в дырявом скрипте (mysql-инъекция) на другом удалённом серваке. Цель благородная - экономия трафика. Т.е. запускаю скрипт через браузер, потом иду и забираю результаты из текстового файла.

Проблемы с реализацией: С маленькими словарями всё работает пучком, когда берёшь словарик побольше, скрипт в браузере работает некоторое время, потом всё - пипец! Серверная часть, я так понимаю, работу так же прекращает.

Вопрос: Как продлить счастье?

Настройки:
Параметр PHP max_execution_time на сервере имеет Local Value "0" и Master Value "30".

Сам волшебный скрипт содержит строчку INI_SET("max_execution_time",0);

Помогите, плз, что ещё не так?

Macro
27.12.2007, 18:21
set_time_limit(0);
ignore_user_abort(1);

Кажется, так

groundhog
27.12.2007, 18:27
Кажется если в конфиге определено master значение, то его никакими директивами изменить нельзя...

mr.The
27.12.2007, 18:29
ееслина сервере отключена set_time_limit(0); то попробуй запуск по крону

spider-intruder
27.12.2007, 18:37
Напиши процедуру проверки времени
И перезапускай сам себя с текущим паролем делов то


Или сделай 2 идентичных скрипта и запускай из первого второй и наоборот

otmorozok428
27.12.2007, 18:50
Кажется если в конфиге определено master значение, то его никакими директивами изменить нельзя...

Скрипт отрабатывает по времени ровно 5 минут.

если на сервере отключена set_time_limit(0); то попробуй запуск по крону

Шелл у меня там, к сож. только вебовский

Или сделай 2 идентичных скрипта и запускай из первого второй и наоборот

Уже интереснее :)

spider-intruder
27.12.2007, 18:52
Если че стучи придумаем - я так дампер написал - отлично пашет.

Player1
27.12.2007, 18:58
была подожная трабла - решили
set_time_limit(0);
ignore_user_abort(1);

+

скрипт сам себя перезапускал отлично работало :)

otmorozok428
27.12.2007, 19:01
Player1, уже пробовал - не работает :(

Player1
27.12.2007, 19:21
стукни мне в приват попробуем решить траблу :) Может не так юзал :)

Player1
27.12.2007, 21:20
туда же
Вместо функции set_time_limit, недоступной в безопасном режиме, можно использовать ini_set("max_execution_time", 90000000);

[Raz0r]
27.12.2007, 23:11
а перлом не удобнее будет?

otmorozok428
28.12.2007, 10:51
ini_set("max_execution_time", 90000000);

Это уже выше было - значение 0 означает, что время выполнения скрипта не ограничено. Безопасный режим на сервере - off.

Вообще, понял почему скрипт работает именно 5 минут. На php.net в описании директивы max_execution_time есть такой абзац:

Your web server can have other timeouts. E.g. Apache has Timeout directive, IIS has CGI timeout function, both default to 300 seconds. See the web server documentation for meaning of it.

Т.е. с интерпретатором PHP это вообще никак не связано, всю малину обламывает Апач.

otmorozok428
28.12.2007, 11:28
Вот нашёл функцию apache_reset_timeout():

apache_reset_timeout() сбрасывает таймер сервера Apache, который по-умолчанию установлен в 300 секунд. При set_time_limit(0); ignore_user_abort(true) и периодических вызовах apache_reset_timeout(), Apache теоретически может работать вечно.

Эта функция требует Apache 1.

Теоретически она должна решить существующую проблему. На практике:

Fatal error: Call to undefined function: apache_reset_timeout() in /home/blablabla/test4.php on line 39

Видимо, действительно придётся заморочиться с двумя взаимовызываемыми скриптами...

groundhog
28.12.2007, 11:49
Эта функция недоступна в безопасном режиме.

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

otmorozok428
28.12.2007, 11:55
Эта функция недоступна в безопасном режиме

Safe_mode=OFF

groundhog
28.12.2007, 12:20
Поискал по данной проблеме: http://bugs.php.net/bug.php?id=42579

Беда на уровне исходников. Нужно патчить PHP и пересобирать заново. У тебя какая версия? Обновись с http://snaps.php.net/. Вроде изменения по этой проблеме внесены в CVS ещё 7 сентября...

Player1
28.12.2007, 12:29
Если такие скрипты поработают с часок, они некисло нагрузят сервак и злой одмин забанит твой аккаунт.

если он не забухал :) то шанс приличный, хотя пока не парься - у админа тоже бывает новый год :)

otmorozok428
28.12.2007, 12:48
Поискал по данной проблеме: http://bugs.php.net/bug.php?id=42579

Беда на уровне исходников. Нужно патчить PHP и пересобирать заново. У тебя какая версия? Обновись с http://snaps.php.net/. Вроде изменения по этой проблеме внесены в CVS ещё 7 сентября...

Да, я это уже тоже видел :(

У тебя какая версия?

PHP Version 4.2.2

otmorozok428
16.07.2008, 20:00
Проблема была решена так:
@set_time_limit(0);
@ini_set('max_execution_time',0);
Скрипт на сервере продолжает работать, даже если в браузере его прибить.
Решение было позаимствовано из rst sql dumper 2.0 :)

.:EnoT:.
16.07.2008, 20:56
омг, человек более полугода пытался решить проблему, наконец решил :d