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

Discussion in 'PHP' started by otmorozok428, 27 Dec 2007.

  1. otmorozok428

    otmorozok428 Banned

    Joined:
    19 Oct 2007
    Messages:
    127
    Likes Received:
    88
    Reputations:
    17
    Идея: Есть PHP-скрипт на удалённом серваке, который пытается подобрать по словарю имена таблиц в дырявом скрипте (mysql-инъекция) на другом удалённом серваке. Цель благородная - экономия трафика. Т.е. запускаю скрипт через браузер, потом иду и забираю результаты из текстового файла.

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

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

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

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

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

    Macro Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    PHP:
    set_time_limit(0);
    ignore_user_abort(1);
    Кажется, так
     
  3. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Кажется если в конфиге определено master значение, то его никакими директивами изменить нельзя...
     
    1 person likes this.
  4. mr.The

    mr.The Elder - Старейшина

    Joined:
    30 Apr 2007
    Messages:
    1,080
    Likes Received:
    456
    Reputations:
    38
    ееслина сервере отключена set_time_limit(0); то попробуй запуск по крону
     
  5. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    Напиши процедуру проверки времени
    И перезапускай сам себя с текущим паролем делов то


    Или сделай 2 идентичных скрипта и запускай из первого второй и наоборот
     
    #5 spider-intruder, 27 Dec 2007
    Last edited: 27 Dec 2007
  6. otmorozok428

    otmorozok428 Banned

    Joined:
    19 Oct 2007
    Messages:
    127
    Likes Received:
    88
    Reputations:
    17
    Скрипт отрабатывает по времени ровно 5 минут.

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

    Уже интереснее :)
     
  7. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    Если че стучи придумаем - я так дампер написал - отлично пашет.
     
  8. Player1

    Player1 New Member

    Joined:
    18 Dec 2007
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    была подожная трабла - решили
    set_time_limit(0);
    ignore_user_abort(1);

    +

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

    otmorozok428 Banned

    Joined:
    19 Oct 2007
    Messages:
    127
    Likes Received:
    88
    Reputations:
    17
    Player1, уже пробовал - не работает :(
     
  10. Player1

    Player1 New Member

    Joined:
    18 Dec 2007
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    стукни мне в приват попробуем решить траблу :) Может не так юзал :)
     
  11. Player1

    Player1 New Member

    Joined:
    18 Dec 2007
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    туда же
    Вместо функции set_time_limit, недоступной в безопасном режиме, можно использовать ini_set("max_execution_time", 90000000);
     
  12. [Raz0r]

    [Raz0r] Elder - Старейшина

    Joined:
    25 Feb 2007
    Messages:
    425
    Likes Received:
    484
    Reputations:
    295
    а перлом не удобнее будет?
     
  13. otmorozok428

    otmorozok428 Banned

    Joined:
    19 Oct 2007
    Messages:
    127
    Likes Received:
    88
    Reputations:
    17
    Это уже выше было - значение 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 это вообще никак не связано, всю малину обламывает Апач.
     
  14. otmorozok428

    otmorozok428 Banned

    Joined:
    19 Oct 2007
    Messages:
    127
    Likes Received:
    88
    Reputations:
    17
    Вот нашёл функцию 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

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

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Эта функция недоступна в безопасном режиме.

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

    otmorozok428 Banned

    Joined:
    19 Oct 2007
    Messages:
    127
    Likes Received:
    88
    Reputations:
    17
    Safe_mode=OFF
     
  17. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Поискал по данной проблеме: http://bugs.php.net/bug.php?id=42579

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

    Player1 New Member

    Joined:
    18 Dec 2007
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    если он не забухал :) то шанс приличный, хотя пока не парься - у админа тоже бывает новый год :)
     
  19. otmorozok428

    otmorozok428 Banned

    Joined:
    19 Oct 2007
    Messages:
    127
    Likes Received:
    88
    Reputations:
    17
    Да, я это уже тоже видел :(

    PHP Version 4.2.2
     
  20. otmorozok428

    otmorozok428 Banned

    Joined:
    19 Oct 2007
    Messages:
    127
    Likes Received:
    88
    Reputations:
    17
    Проблема была решена так:
    PHP:
    @set_time_limit(0);
     @
    ini_set('max_execution_time',0);
    Скрипт на сервере продолжает работать, даже если в браузере его прибить.
    Решение было позаимствовано из rst sql dumper 2.0 :)