Страницы

Поиск по вопросам

воскресенье, 26 января 2020 г.

Как отменить подавление ошибок в php

#php #отладка


Доброе время суток, на работе сегодня столкнулся с такой задачей есть некая платная
CMS (если ее можно так назвать ) в которой гов... тоесть "разработчики" по 10 раз в
каждом файле ( а их больше 1000 ) установили  error_reporting none и им подобные конструкции
( во общем сделали все что бы скрыть следы своих косяков ) приложение платное код с
обфускацией, выискивать в коде все error_reporting none не реально... Скрипт падает
где то в середине из за 


  mod_fcgid: read data timeout in 300 seconds


Почему скрипт так подвисает я уже догадываюсь, не могу найти место где это происходит,
включить уровень логирование debug не дало ни каких результатов т.к. везде понапихан
error_reporting none что по уровню иерархии является приоритетнее для интерпретатора PHP 

Вопрос: что нужно сделать что бы игнорировать error_reporting и выводить всё по возможности
для отладки? Как быть? как отменить глобально подавление ошибок? какие есть способы? 

php 5.6 FreeBSD 9 apache22
    


Ответы

Ответ 1



Если есть возможность вставить дополнительно свой код в код CMS (например, дописать в какой-то файл, подключаемый всегда), то можно зарегистрировать собственный обработчик ошибок. Он будет вызываться независимо от error_reporting. Стандартно, предполагается, что в этом обработчике будет проверяться уровень ошибки и сравниваться с настройкой error_reporting, но это на усмотрение разработчика. Т.е. примерно так: function myErrorHandler($errno, $errstr, $errfile, $errline) { if (!(error_reporting() & $errno)) { // This error code is not included in error_reporting, so let it fall // through to the standard PHP error handler return false; } echo "$errstr at $errfile on line $errline\n"; } Вот этот if в функции можно не делать, а всегда показывать ошибки. А лучше не показывать, а просто писать в лог, вместе с бэктрейсом. Потом анализировать.

Ответ 2



можно с помощью ide убрать все эти error_reporting none, вернее заменить их или на что-то своё или на пустую строку в итоге они исчезнут

Ответ 3



Если есть доступ на запись к httpd.conf, то прописать в нем php_admin_value error_reporting -1

Ответ 4



Вставьте вначале файла #PHP ini_set("display_errors", 1); error_reporting(E_ALL);

Комментариев нет:

Отправить комментарий