ID: 45592
User updated by: andy at boeckler dot org
-Summary: E_STRICT-warnings throws HTTP 500 error when
display_errors is off
Reported By: andy at boeckler dot org
Status: Open
Bug Type: Output Control
Operating System: Linux
PHP Version: 5.2.6
New Comment:
changed summary.
Previous Comments:
------------------------------------------------------------------------
[2008-07-22 22:53:10] andy at boeckler dot org
Sorry ..
the code example goes in the wrong direction
I've narrowed the actual issue. It has to do with evaled code.
The @eval-Function is not catched properly.
<?php
error_reporting(E_ALL & ~E_NOTICE);
class Test {
function func1() { // HTTP 500
ini_set('display_errors', 'off');
@eval('completely wrong');
echo 'boo'; exit();
}
function func2() { //HTTP 200
ini_set('display_errors', 'on');
@eval('completely wrong');
echo 'boo'; exit();
}
function func3() { // HTTP 200 and HTTP 500 with output buffering
ini_set('display_errors', 'off');
echo 'noerror';
@eval('completely wrong');
echo 'boo'; exit();
}
}
Test::func1();
//Test::func2();
//Test::func3();
?>
------------------------------------------------------------------------
[2008-07-22 22:15:59] [EMAIL PROTECTED]
You have a parse error there:
PHP Parse error: syntax error, unexpected T_STRING, expecting
T_VARIABLE in /home/jani/t.php on line 7
And I don't get any E_STRICT notices with fixed version of this code
either..
------------------------------------------------------------------------
[2008-07-22 15:25:38] andy at boeckler dot org
Update:
ob_flush() doesn't change anything ...
I accidentally tested it with display_errors=ON
------------------------------------------------------------------------
[2008-07-22 15:13:17] andy at boeckler dot org
Description:
------------
I'm getting Ajax-Request-Failures since PHP5 throws HTTP-500 Errors
back.
This was not the case before upgrading from PHP4.
This is annoying:
* E_STRICT are filtered out
* when display_errors is ON, the request is OK!
* display_errors ON is no option on a productionserver
It only works, when ob_flush() is called before exit() (see
staticFunc2)
Reproduce code:
---------------
<?php
error_reporting(E_ALL & ~E_NOTICE); // NO E_STRICT is in here
ini_set('display_errors', 'off');
//ini_set('display_errors', 'on');
class Test {
public staticFunc() { echo 'boo'; exit(); }
public staticFunc2() { echo 'boo'; ob_flush(); exit(); }
}
Test::staticFunc();
?>
Expected result:
----------------
HTTP 200
Actual result:
--------------
HTTP 500, w/o ob_flush() when display_errors is off
HTTP 200, w/o ob_flush() when display_errors is ON
HTTP 200, with ob_flush()
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=45592&edit=1