Я бы решил это, не решая ... Позвольте мне объяснить:
В настоящее время нет способа отключить трассировки стека от необработанных исключений. PHP не позволяет вам сделать это.
Таким образом, вместо того, чтобы пытаться отключить его, я бы просто не позволил исключению остаться необработанным ... Я бы установил обработчик исключений , который бы затем регистрировал ответ -трекать информацию. Я бы не отображал это на экране. Я не проверю, в какой среде он находится. Я не проверю информацию запроса. Я просто записал бы его в файл и отобразил бы общую страницу 500 ошибок сервера.
Теперь в вашем обработчике вы можете выборочно показывать информацию о вызове, чтобы вы могли выбирать, регистрировать или нет информацию об аргументах:
set_exception_handler(function($exception) {
$log = array(
'message' => $exception->getMessage(),
'trace' => array(),
);
foreach ($exception->getTrace() as $item) {
$trace = isset($item['class']) ? $item['class'] . $item['type'] : '';
$trace .= $item['function'] . '()';
$log['trace'][] = $trace;
}
save_to_log($log);
});
Но я принимаю непонятное исключение как признак ошибки в вашем приложении. Вы должны найти их и исправить их. Если вы получаете их достаточно, чтобы беспокоиться о представлении аргументов на странице, то вам действительно нужно исправить тот факт, что в первую очередь существуют необъяснимые исключения ...
Редактировать Вот демонстрация того, что происходит:
class Foo {
public function doSomething($user, $password) {
throw new Exception('Something Went Wrong!');
}
}
$f = new Foo();
$f->doSomething('user', 'passw');
на CodePad Результат:
<br />
<b>Fatal error</b>: Uncaught exception 'Exception' with message 'Something Went Wrong!' in /code/MxH9Ls:4
Stack trace:
#0 /code/MxH9Ls(10): Foo->doSomething('user', 'passw')
#1 {main}
thrown in <b>/code/MxH9Ls</b> on line <b>4</b><br />
Но, с обработчиком исключений (изменен для печати вместо журнала):
set_exception_handler(function($exception) {
$log = array(
'message' => $exception->getMessage(),
'trace' => array(),
);
foreach ($exception->getTrace() as $item) {
$trace = isset($item['class']) ? $item['class'] . $item['type'] : '';
$trace .= $item['function'] . '()';
$log['trace'][] = $trace;
}
echo $log['message'] . "\n";
foreach ($log['trace'] as $trace) {
echo " - $trace\n";
}
});
class Foo {
public function doSomething($user, $password) {
throw new Exception('Something Went Wrong!');
}
}
$f = new Foo();
$f->doSomething('user', 'passw');
На CodePad производит:
Something Went Wrong!
- Foo->doSomething()