Обработчик ошибок ест память

  • Автор темы Alexandr_do
  • Дата начала

Alexandr_do

Guest
Обработчик ошибок ест память

Проблема:
При увеличении размера скрипта обработчика ошибок с определенного момента скрипт начинает серьезно есть память.

Проверял следующим образом.

В цикле генерится NOTICE, например:
-----------------------------------------------
echo("Memory:".memory_get_usage());
for ($i=0; $i<100; $i++) {
$a=b$; //использую неопределенную переменную
}
echo("Memory:".memory_get_usage());
-----------------------------------------------
Что в обработчике - роли не играет, например

function userErrorHandler () {
$err= "test_0001\n";
$err .= "test_0001\n";
$err .= "test_0001\n";
... и т.д.

return(1);
}
Но с определенного момента, у меня например, когда количество строк ($err .= "test_0001\n"; ) превышает 37.
Память начинает резко изчезать.
То есть, если до выполнения цикла memory_get_usage=197912, то после уже memory_get_usage=2285904. И это как уже было сказано, начинается только, если размер скрипта обработчика превышает определенный размер.

Может кто сталкивался. В чем может быть причина?
Есть смутное подозрение, что в самом обработчике возникает ошибка, которую он пытается обработать. Если это так, то что ему может не нравиться?

PHP - 4.3.11

Спасибо.
 

Кром

Новичок
>Что в обработчике - роли не играет, например

Есть подозрение, что играет. Ты можешь привести здесь короткий тестовый скрипт?
 

Alexandr_do

Guest
Автор оригинала: Кром
>Что в обработчике - роли не играет, например

Есть подозрение, что играет. Ты можешь привести здесь короткий тестовый скрипт?
Глюк оказался не смертельным. Вылечилось путем отключения Zend Debugger в php.ini. Все ж таки интересно. Разве отладчик влияет как-то на выполнение скрипта, если его об этом не просят?

Обработчик же такой:

function userErrorHandler () {
$err= "test_0001\n";
$err .= "test_0001\n";
$err .= "test_0001\n";
//... последняя строка повторяется еще 38 раз и ВСЕ !!!
return(1);
}
 

Alexandre

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