Intereting Posts
что является самым надежным методом для получения файла с удаленного сервера в php Doctrine2 Querybuilder побитовый и JQuery :: Ajax работает индикатор выполнения? php json_encode частично не работает с массивами Как декодировать url в php, где url закодирован с помощью encodeURIComponent () Решение для «Неустранимая ошибка: максимальный уровень вложенности функции« 100 »достигнут, прерван!» В PHP PHP – содержимое формы письма – как добавить поле CC? Арабские символы в декодировании JSON Доктрина Symfony Многие для многих вставляют загрузить файл php $ _FILES undefined index error Помогите редактировать JSON, чтобы сделать массив, а не «словарь», Включить поддержку SSL для pgsql Почему stream_select в STDIN становится блокирующим, когда cmd.exe теряет фокус? Использование glob () для отображения изображений из каталога, в то время как echo'ing уникальное первое изображение Лучший способ создать пустой объект в JSON с PHP?

Могу ли я сделать исключение в цикле for, если память превышает этот цикл

Как я могу обработать исключение, происходящее в цикле foreach?

Я хочу бросить свое исключение, если цикл for не работал должным образом.

Поскольку данные огромны, foreach выходит, поскольку предел памяти PHP превышен.

try { foreach() }catch (exception $e) { echo $e; } 

Это не работает. Как сделать исключение?

Память превышена – это фатальная ошибка, а не исключение и не может обрабатываться с помощью блоков try / catch. Вам нужен set_error_handler .

EDIT: Если это не работает, вы можете использовать register_shutdown_function в качестве последнего средства и проверить, был ли сценарий остановлен и ошибка.

В зависимости от того, что происходит внутри вашего цикла, вы можете использовать memory_get_usage() . Это не устранит проблемы, связанные с памятью, но по крайней мере вы можете предотвратить выход PHP из-за превышения memory_limit. Пример:

 try{ $memory_limit = 1*1024*1024; /* 1M, this should be lower than memory_limit */ foreach($something as $anything){ if(memory_get_usage() >= $memory_limit){ throw new Exception('Memory limit exceeded!'); } } } catch(Exception $ex){ //handle error, optionally freeing memory by unset()-ing unused variables } 

Я не думаю, что это возможно. превышение памяти – это смертельная неустранимая ошибка. поэтому страница должна быть прервана, когда это произойдет.

Но я нашел этот вопрос для catch E_ERROR: как поймать PHP Fatal Error