Edit report at https://bugs.php.net/bug.php?id=53663&edit=1
ID: 53663 Updated by: dlsni...@php.net Reported by: sskaje at gmail dot com Summary: fatal error with bad memory allocation in a script echo & exit -Status: Open +Status: Feedback Type: Bug Package: Scripting Engine problem Operating System: Linux/CentOS PHP Version: 5.3.4 Block user comment: N Private report: N New Comment: Please try using this snapshot: http://snaps.php.net/php5.4-latest.tar.gz For Windows: http://windows.php.net/snapshots/ I've just tried to reproduce this against PHP 5.4.12 and Apache and I couldn't get the crash mentioned. Same goes when trying the scripts against nginx. Please try to upgrade to a newer version of PHP and check if the problem still exists for you. I'll close this in 2 weeks if no further feedback. Previous Comments: ------------------------------------------------------------------------ [2011-01-17 04:45:42] sskaje at gmail dot com Whats' more, script without the echo...exit stuff like : :::::::::::::: test.php :::::::::::::: <?php require(__DIR__ . '/Controller.php'); class test extends TestController { public function action() { $this->output = 'Hello'; $this->display('raw'); } } new test; works perfectly. die('a') performs as same as the echo...exit. ------------------------------------------------------------------------ [2011-01-17 04:42:43] sskaje at gmail dot com @Stas: I upgrade my php to 5.3.5 and the memory allocation message disappeared while a *no response* request still exists. php scripts: [root@dev test]# more test*.php > /tmp/php.txt [root@dev test]# cat /tmp/php.txt :::::::::::::: test1.php :::::::::::::: <?php echo 'a'; exit; require(__DIR__ . '/Controller.php'); class test extends TestController { public function action() { $this->output = 'Hello'; $this->display('raw'); } } new test; :::::::::::::: test2.php :::::::::::::: <?php echo 'a'; exit; __halt_compiler(); require(__DIR__ . '/Controller.php'); class test extends TestController { public function action() { $this->output = 'Hello'; $this->display('raw'); } } new test; :::::::::::::: test3.php :::::::::::::: <?php echo 'a'; exit; require(__DIR__ . '/Controller.php'); __halt_compiler(); class test extends TestController { public function action() { $this->output = 'Hello'; $this->display('raw'); } } new test; :::::::::::::: test4.php :::::::::::::: <?php echo 'a'; exit; require(__DIR__ . '/Controller.php'); class test extends TestController { public function action() { $this->output = 'Hello'; $this->display('raw'); } } __halt_compiler(); new test; ============== Controller.php: [root@dev test]# more Controller.php <?php /** * ä¸å¡ TestController * */ require(__DIR__ . '/../ControllerBase.php'); abstract class TestController extends ControllerBase { public function __construct() { # ç¦ç¨ GPC $this->diable_gpc(); $this->checkPara(); $this->action(); } public function __destruct() { if (!empty($this->output)) { # é»è®¤è¾åº $this->display(); unset($this->output); } } } # EOF ========================== Results: test1.php: no http response returned. test2.php: http 200 and an output of 'a' test3.php: same as test2.php test4.php: same as test1.php ------------------------------------------------------------------------ [2011-01-16 22:09:33] s...@php.net Could you please post exact script that doesn't work? I tried some permutations of uncommenting stuff in your example and no one of them led to the error. ------------------------------------------------------------------------ [2011-01-06 09:17:17] sskaje at gmail dot com The original script is like <?php require(__DIR__ . '/blahsparent.php'); class blahblah extends blahsparent { } new blahblah; only if __halt_compiler(); was added before the line of 'class ....', error would not be triggered. ------------------------------------------------------------------------ [2011-01-06 09:13:04] sskaje at gmail dot com In fact, there are also error logs in httpd error-log: [Thu Jan 06 15:15:41 2011] [error] [client 172.16.1.123] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 543450464 bytes) in Unknown on line 0 [Thu Jan 06 15:16:27 2011] [error] [client 172.16.1.123] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1735355393 bytes) in Unknown on line 0 [Thu Jan 06 15:16:27 2011] [error] [client 172.16.1.123] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1999598178 bytes) in Unknown on line 0 [Thu Jan 06 15:16:27 2011] [error] [client 172.16.1.123] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1999598178 bytes) in Unknown on line 0 [Thu Jan 06 15:16:27 2011] [error] [client 172.16.1.123] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1999598178 bytes) in Unknown on line 0 [Thu Jan 06 15:16:28 2011] [error] [client 172.16.1.123] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1999598178 bytes) in Unknown on line 0 And the 'PHP Fatal error: Exception thrown without a stack frame in Unknown on line 0' might not be logged by this test script. Sorry. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=53663 -- Edit this bug report at https://bugs.php.net/bug.php?id=53663&edit=1