Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   почему останавливается скрипт? (https://forum.antichat.xyz/showthread.php?t=145336)

Дикс 03.10.2009 09:59

почему останавливается скрипт?
 
замечал такое на некоторых хостингах
работает пхп-скрипт минуты 3-5 и вдруг ни с того ни с сего останавливается. ни ошибок, ни ограничений на время выполнения.
причем иногда это бывает вообще в самое разное время после запуска.
с чем это может быть связано? браузер может оборвать соединение?

lo0 03.10.2009 10:21

Есть такая функция ignore_user_abort
+
пару слов о скрипте, хотябы знать, с чем он работает, т.к. без дополнительной инфы очень тяжело помочь.

Zedi 03.10.2009 10:44

скорее всего останавливается ииза того что память у него кончается, попробуй количество памяти разрешенной увеличть(на некоторых хостингах выделяют больше на других меньше, поэтому он работает так)
но если это не поможет попробуй в скрипте вести типа лога чтобы увидеть когда он остановился там можно разобраться почему
P.S.ignore_user_abort по моему здесь не при чем, скрипт бы завершался сразу после закрытия браузера но не через 2-3 минуты

b1oxa 03.10.2009 12:28

Цитата:

Сообщение от Zedi
скорее всего останавливается ииза того что память у него кончается, попробуй количество памяти разрешенной увеличть(на некоторых хостингах выделяют больше на других меньше, поэтому он работает так)
но если это не поможет попробуй в скрипте вести типа лога чтобы увидеть когда он остановился там можно разобраться почему
P.S.ignore_user_abort по моему здесь не при чем, скрипт бы завершался сразу после закрытия браузера но не через 2-3 минуты

согласен.
попробуй этот же скрипт на других хостах.

Tigger 03.10.2009 13:01

1) set_time_limit(0);
2) В php.ini стоят значения на выполнения, которые нельзя изменить;
3) Вариант Zedi.

Deathdreams 03.10.2009 14:15

ini_set('memory_limit', 15);

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

Doom123 03.10.2009 15:10

Deathdreams а помойму надо так ini_set('memory_limit', '15M'); не?

Pashkela 03.10.2009 15:18

Цитата:

To change the memory allocation limit permanently for all PHP scripts running on the server, modify the PHP.INI configuration file of the server (location depending on your OS and installation method). Search for memory_limit after opening the file in an editor. If the memory_limit doesn’t exist, add the following line. If it’s there, modify the value of the memory_limit:

memory_limit = 12M

The 12M sets the limit to 12 megabytes (12582912 bytes). Change to the value you desirable.
Перевод:

Цитата:

Чтобы изменить предел распределения памяти надолго для всех подлинников PHP, бегущих на сервере, измените файл конфигурации PHP.INI сервера (местоположение в зависимости от Вашего OS и инсталляционного метода). Поиск memory_limit после открытия файла в редакторе. Если memory_limit не существует, добавьте следующую линию. Если это там, измените ценность memory_limit:

memory_limit = 12M

12M устанавливает предел к 12 мегабайтам (12582912 байтов). Измените на ценность Вас желательный.

Deathdreams 03.10.2009 18:55

Doom123
Да так. Забыл просто в каком формате.

BlackSun 03.10.2009 18:58

Цитата:

Сообщение от Zedi
скорее всего останавливается ииза того что память у него кончается, попробуй количество памяти разрешенной увеличть(на некоторых хостингах выделяют больше на других меньше, поэтому он работает так)
но если это не поможет попробуй в скрипте вести типа лога чтобы увидеть когда он остановился там можно разобраться почему
P.S.ignore_user_abort по моему здесь не при чем, скрипт бы завершался сразу после закрытия браузера но не через 2-3 минуты

ignore_user_abort как раз и нужен, у меня тоже скрипты останавливаются даже с нулевым тайм лимитом и при этом памяти им хватает.

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

Zedi 03.10.2009 19:53

ну если браузер не закрывать то ignore_user_abort не нужен)) скрипт должен остановится сразу после закрытия браузера
P.S. у меня скрипты останавливались сами и с set_time_limit + ignore_user_abort и памяти хватало, многое зависит от хоста

BlackSun 03.10.2009 20:02

Цитата:

Сообщение от Zedi
ну если браузер не закрывать то ignore_user_abort не нужен)) скрипт должен остановится сразу после закрытия браузера
P.S. у меня скрипты останавливались сами и с set_time_limit + ignore_user_abort и памяти хватало, многое зависит от хоста

Если скрипт ничего клиенту не отдает, то, имхо, сосединение может оборватся по keep-alive таймауту

Zedi 03.10.2009 20:11

ну из этого нужно сделать вывод что нужно set_time_limit + ignore_user_abort + увеличение памяти)))
если не получится то как я уже сказал вести лог программы, можно даже в окно брацзера только после каждого echo ставь flush()

astrologer 03.10.2009 20:15

Цитата:

Сообщение от BlackSun
Если скрипт ничего клиенту не отдает, то, имхо, сосединение может оборватся по keep-alive таймауту

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

Дикс 04.10.2009 08:21

Цитата:

Есть такая функция ignore_user_abort
если её включить - скрипт вообще нельзя будет остановить

Цитата:

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

Цитата:

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

Цитата:

Если скрипт ничего клиенту не отдает, то, имхо, сосединение может оборватся по keep-alive таймауту
он выводит лог на экран
а если не выводит - то включен как раз ignore_user_abort

Цитата:

в окно брацзера только после каждого echo ставь flush()
@ob_end_flush();
@ob_flush();
@flush();
@ob_start();

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

mailbrush 04.10.2009 09:55

ТС, не используй PHP для брутеров, ботов и т.п... Лучше используй Perl (это на счет некомпилируемых) или C++ (компилируемый). У меня была та же проблема, и я решил забить на написание тому подобных скриптов на PHP.

Zedi 04.10.2009 10:32

Цитата:

если её включить - скрипт вообще нельзя будет остановить
используй проверку чтот типа есть файл с названием stop то die(); тогда скрипт можно остановить))

Pashkela 04.10.2009 13:33

Скрипт можно остановить также просто перезаписав на его место новый скрипт с тем же именем и запустить:

PHP код:

<?exit;?>


Дикс 04.10.2009 17:43

Цитата:

ТС, не используй PHP для брутеров, ботов и т.п... Лучше используй Perl (это на счет некомпилируемых) или C++ (компилируемый).
для этого надо их как минимум знать :)


Время: 00:03