Я ищу лучшее решение, как отключить известные предупреждения (и не относится к моему сценарию), о которых сообщается из включенного файла.PHP @ operator for include не отключает error_reporting
Краткое пример включенного файла:
$ cat incl_file.php
<?php
error_reporting(E_ALL);
ini_set("display_errors", "on");
$x = $y;
?>
Пример желаемого кода (который не допустить отображения ошибок из включенного файла)
$ cat main2.php
<?php
error_reporting(E_ALL);
ini_set("display_errors", "on");
@include_once "incl_file.php";
$d=$e;
print "main_file\n";
?>
вывода является:
$ php main2.php
Notice: Undefined variable: y in /tmp/php_hack/incl_file.php on line 6
Notice: Undefined variable: e in /tmp/php_hack/main2.php on line 7
main_file
После «обходного пути» работает, но я не удовлетворен тем, что «беспорядок»
<?php
function myErrorHandler($errno, $errstr, $errfile, $errline) {
if (!(error_reporting() & $errno)) {
// This error code is not included in error_reporting
return;
}
//print "called $errstr\n";
/* Don't execute PHP internal error handler */
return true;
}
set_error_handler("myErrorHandler");
error_reporting(0);
ini_set("display_errors", "off");
include_once "incl_file.php";
restore_error_handler();
error_reporting(E_ALL);
ini_set("display_errors", "on");
$d=$e;
print "main_file\n";
?>
Выход:
$ php main.php
Notice: Undefined variable: e in /tmp/php_hack/main.php on line 24
main_file
Если включаемый файл не
error_reporting(E_ALL);
ini_set("display_errors", "on");
затем @ оператор работает, как ожидалось ...
Ошибка очевидна? Просто установите '$ y' в ваш включенный файл (а также, возможно,' $ e'? Тем не менее, не используйте оператор '@' для удаления уведомлений/предупреждений. Это плохая привычка, и это затрудняет цифру где происходят ошибки. – h2ooooooo
Оператор '@' просто означает, что он не будет выводить ошибки в результате фактического 'include', такого как ошибка, которую не удалось найти включенному файлу и т. Д. Он не отключает ошибки для всего включенного кода. – Anthony
Я просто использовал $ x = $ y; для запуска php-ошибки. Вместо этого я мог бы использовать trigger_error(). – Predkambrij