Bug #81591 [Opn->Ver]: Fatal Error not properly logged in particular cases

From: Date: Thu, 04 Nov 2021 15:10:46 +0000
Subject: Bug #81591 [Opn->Ver]: Fatal Error not properly logged in particular cases
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-237561@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=81591&edit=1 ID: 81591 Updated by: nikic@php.net Reported by: anton at cpp dot in Summary: Fatal Error not properly logged in particular cases -Status: Open +Status: Verified Type: Bug Package: *General Issues Operating System: FreeBSD 12.3 PHP Version: 8.0.12 Block user comment: N Private report: N New Comment: Thanks! I can reproduce the issue with ignore_repeated_errors=On. Previous Comments: ------------------------------------------------------------------------ [2021-11-04 14:40:21] anton at cpp dot in Thanks for the instant reply. Indeed it depends on the config. I think it only happens with "ignore_repeated_errors=On". The complete php.ini follows: [PHP] expose_php = Off cgi.fix_pathinfo = 0 disable_functions = dl enable_dl = Off date.timezone = "UTC" default_mimetype = "text/html" default_charset = "windows-1251" default_socket_timeout = 10 max_execution_time = 3600 ; Maximum execution time of each script, in seconds max_input_time = 1200 ; Maximum amount of time each script may spend parsing request data memory_limit = 1024M ; Maximum amount of memory a script may consume (8MB) post_max_size = 200M max_input_vars = 500 upload_tmp_dir = /tmp upload_max_filesize = 200M error_reporting = E_ALL & ~E_NOTICE display_errors = Off log_errors = On error_log = /var/log/php.log ignore_repeated_errors = On ;zend_extension = /usr/local/lib/php/20160303/opcache.so ;zend_extension = /usr/local/lib/php/20170718/opcache.so ;zend_extension = /usr/local/lib/php/20180731/opcache.so ;zend_extension = /usr/local/lib/php/20190902/opcache.so zend_extension = /usr/local/lib/php/20200930/opcache.so extension = apcu.so extension = apc.so apc.enabled = On apc.shm_segments = 1 apc.shm_size = 32M opcache.memory_consumption = 128 opcache.interned_strings_buffer = 8 opcache.max_accelerated_files = 2000 opcache.max_wasted_percentage = 5 opcache.validate_timestamps = 1 opcache.fast_shutdown = 1 openssl.cafile = /usr/local/share/certs/ca-root-nss.crt curl.cainfo = /usr/local/share/certs/ca-root-nss.crt ------------------------------------------------------------------------ [2021-11-04 14:27:18] nikic@php.net I can't reproduce this. https://3v4l.org/iAGg4 shows that this works with error display, and trying with "-d display_errors=0 -d log_errors=1" instead I get the same result, with both errors logged. Which ini settings are necessary to reproduce this? ------------------------------------------------------------------------ [2021-11-04 14:15:48] anton at cpp dot in Description: ------------ We had a few 500 pages without any traces in php.log after updating from 7.4 to 8.0. The reason was a parameter type mismatch of in_array and array_key_exists functions, but TypeError was not logged if a warning previously occurred at the same line. We had these warnings silenced with @$_REQUEST['whatever'], so no log messages were produced as a result of the crash. While this pattern is ugly and should be refactored with proper checking and casting (and it was), I believe TypeError should be generated and properly logged in this case nonetheless. Test script: --------------- <?php error_reporting(E_ALL); $not_array = false; // Case #1, incorrect: only 'PHP Warning: Undefined array key "nonexistant"' is logged echo (array_key_exists($_REQUEST['nonexistant'], $not_array) ? "yes" : "no"); // Case #2, correct: 'PHP Fatal error: Uncaught TypeError: array_key_exists(): Argument #2 ($array) must be of type array, bool given' is logged $nonexistant = NULL; echo (array_key_exists($nonexistant, $not_array) ? "yes" : "no"); // Case #3, correct: both Warning and Fatal error are logged function my_ake(string|int $key, array $array): bool {return array_key_exists($key, $array);} echo (my_ake($_REQUEST['nonexistant'], $not_array) ? "yes" : "no"); ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=81591&edit=1

« previous php.bugs (#237561) next »