почему останавливается скрипт?

Discussion in 'PHP' started by Дикс, 3 Oct 2009.

  1. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    замечал такое на некоторых хостингах
    работает пхп-скрипт минуты 3-5 и вдруг ни с того ни с сего останавливается. ни ошибок, ни ограничений на время выполнения.
    причем иногда это бывает вообще в самое разное время после запуска.
    с чем это может быть связано? браузер может оборвать соединение?
     
  2. lo0

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

    Joined:
    6 Mar 2006
    Messages:
    113
    Likes Received:
    20
    Reputations:
    14
    Есть такая функция ignore_user_abort
    +
    пару слов о скрипте, хотябы знать, с чем он работает, т.к. без дополнительной инфы очень тяжело помочь.
     
  3. Zedi

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

    Joined:
    6 Jun 2007
    Messages:
    316
    Likes Received:
    120
    Reputations:
    13
    скорее всего останавливается ииза того что память у него кончается, попробуй количество памяти разрешенной увеличть(на некоторых хостингах выделяют больше на других меньше, поэтому он работает так)
    но если это не поможет попробуй в скрипте вести типа лога чтобы увидеть когда он остановился там можно разобраться почему
    P.S.ignore_user_abort по моему здесь не при чем, скрипт бы завершался сразу после закрытия браузера но не через 2-3 минуты
     
    1 person likes this.
  4. b1oxa

    b1oxa Banned

    Joined:
    15 Aug 2008
    Messages:
    0
    Likes Received:
    7
    Reputations:
    0
    согласен.
    попробуй этот же скрипт на других хостах.
     
  5. Tigger

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

    Joined:
    27 Aug 2007
    Messages:
    936
    Likes Received:
    527
    Reputations:
    204
    1) set_time_limit(0);
    2) В php.ini стоят значения на выполнения, которые нельзя изменить;
    3) Вариант Zedi.
     
  6. Deathdreams

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

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    ini_set('memory_limit', 15);

    Думаю, 15 МБ хватит.
     
  7. Doom123

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

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    Deathdreams а помойму надо так ini_set('memory_limit', '15M'); не?
     
  8. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Перевод:

     
  9. Deathdreams

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

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    Doom123
    Да так. Забыл просто в каком формате.
     
  10. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    ignore_user_abort как раз и нужен, у меня тоже скрипты останавливаются даже с нулевым тайм лимитом и при этом памяти им хватает.

    2ТС: как и говорили - юзай set_time_limit + ignore_user_abort, весь вывод записывай во временный файл, а просматривай другим скриптом, так надежнее. Собственно подобный метод применяется в нормальных FTP чекерах на пыхе.
     
    1 person likes this.
  11. Zedi

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

    Joined:
    6 Jun 2007
    Messages:
    316
    Likes Received:
    120
    Reputations:
    13
    ну если браузер не закрывать то ignore_user_abort не нужен)) скрипт должен остановится сразу после закрытия браузера
    P.S. у меня скрипты останавливались сами и с set_time_limit + ignore_user_abort и памяти хватало, многое зависит от хоста
     
  12. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    Если скрипт ничего клиенту не отдает, то, имхо, сосединение может оборватся по keep-alive таймауту
     
  13. Zedi

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

    Joined:
    6 Jun 2007
    Messages:
    316
    Likes Received:
    120
    Reputations:
    13
    ну из этого нужно сделать вывод что нужно set_time_limit + ignore_user_abort + увеличение памяти)))
    если не получится то как я уже сказал вести лог программы, можно даже в окно брацзера только после каждого echo ставь flush()
     
  14. astrologer

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

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Если скрипт ничего не отдаёт, то и про обрыв соединения он не узнает.
     
  15. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    если её включить - скрипт вообще нельзя будет остановить

    вся его работа логируется на экран.
    потому и пишу что он в разные моменты останавливается.
    а на денвере 100% работает.

    я сам пишу "нормальные чекеры"
    далеко не всегда допустимо включать ignore_user_abort

    он выводит лог на экран
    а если не выводит - то включен как раз ignore_user_abort

    @ob_end_flush();
    @ob_flush();
    @flush();
    @ob_start();

    В общем пришёл к выводу что надо попробовать увеличить память
     
  16. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    ТС, не используй PHP для брутеров, ботов и т.п... Лучше используй Perl (это на счет некомпилируемых) или C++ (компилируемый). У меня была та же проблема, и я решил забить на написание тому подобных скриптов на PHP.
     
  17. Zedi

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

    Joined:
    6 Jun 2007
    Messages:
    316
    Likes Received:
    120
    Reputations:
    13
    используй проверку чтот типа есть файл с названием stop то die(); тогда скрипт можно остановить))
     
    1 person likes this.
  18. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Скрипт можно остановить также просто перезаписав на его место новый скрипт с тем же именем и запустить:

    PHP:
    <?exit;?>
     
    1 person likes this.
  19. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    для этого надо их как минимум знать :)