Req #77981 [Opn->Wfx]: "Undefined offset" notice must include name of variable in ERROR LOG message
| From: | cmb@php.net | Date: | Wed, 28 Jul 2021 10:12:44 +0000 |
| Subject: | Req #77981 [Opn->Wfx]: "Undefined offset" notice must include name of variable in ERROR LOG message | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-235428@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=77981&edit=1
ID: 77981
Updated by: cmb@php.net
Reported by: forkik at gmail dot com
Summary: "Undefined offset" notice must include name of
variable in ERROR LOG message
-Status: Open
+Status: Wont fix
Type: Feature/Change Request
Package: *General Issues
PHP Version: Irrelevant
-Assigned To:
+Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
There is no guarantee that there is a variable name involded, e.g.
timezone_identifiers_list()[42]. And actually, the notice is
about a *value*, not a *variable*.
If you still think this should be improved, please pursue the RFC
process[1].
[1] <https://wiki.php.net/rfc/howto>
Previous Comments:
------------------------------------------------------------------------
[2019-05-09 13:01:17] forkik at gmail dot com
Comprehensive
------------------------------------------------------------------------
[2019-05-07 11:33:23] forkik at gmail dot com
Description:
------------
Very important to know (from log) and to log in which variable (name of the variable) error like
"NOTICE (Undefined offset: 1)" occurred! Still it is NOT POSSIBLE!
This is important when one of these situations occur (the more situations occurred the more
difficult to detect the exact variable (name)):
1. code changes rapidly (so error line can even mislead without variable name);
2. variables data is from database (and database changes rapidly in big database so it is impossible
to detect in which variable name);
3. there are multiple variables in the same line.
Test script:
---------------
<?php
$A = [1 => ''];
$B = [1 => ''];
$X_variable_name = [];
set_error_handler('log_handler');
function log_handler ( $errno, $errstr, $errfile, $errline, $errcontext ) {
$bt = debug_backtrace();
//print_r($bt);
$bt0 = (isset($bt[0]) && isset($bt[0]['file']) ?
basename(dirname($bt[0]['file'])).'/'.basename($bt[0]['file']).':'.$bt[0]['line']
: '');
$bt1 = (isset($bt[1]) ?
basename(dirname($bt[1]['file'])).'/'.basename($bt[1]['file']).':'.$bt[1]['line']
: '');
$bt2 = (isset($bt[2]) ?
basename(dirname($bt[2]['file'])).'/'.basename($bt[2]['file']).':'.$bt[2]['line']
: '');
$errorType = [E_ERROR => 'ERROR',E_WARNING => 'WARNING',E_PARSE =>
'PARSING ERROR',E_NOTICE => 'NOTICE',E_CORE_ERROR => 'CORE
ERROR',E_CORE_WARNING => 'CORE WARNING',E_COMPILE_ERROR => 'COMPILE
ERROR',E_COMPILE_WARNING => 'COMPILE WARNING',E_USER_ERROR => 'USER
ERROR',E_USER_WARNING => 'USER WARNING',E_USER_NOTICE => 'USER
NOTICE',E_STRICT => 'STRICT NOTICE',E_RECOVERABLE_ERROR => 'RECOVERABLE
ERROR'];
echo date("y-m-d H:i:s").' '.$errorType[$errno]." ($errstr)
".$errfile.":$errline "./*print_r($errcontext, true).*/' '.$bt0.'
1:'.$bt1.' 2:'.$bt2."\n";
//debug_print_backtrace();
}
echo $A[1].$B[1].$X_variable_name[1];
Expected result:
----------------
19-05-07 14:07:06 NOTICE (Undefined offset: 1 in variable: X_variable_name)
/home/tests/php/error_log.php:65 php/error_log.php:65 1: 2:
Actual result:
--------------
19-05-07 14:07:06 NOTICE (Undefined offset: 1) /home/tests/php/error_log.php:65
php/error_log.php:65 1: 2:
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=77981&edit=1