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