#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);
Комментариев нет:
Отправить комментарий