對於PHP來說,1K對於在瀏覽器中顯示錯誤來說太低。
[更新]
PHP需要有才能提供足夠的內存,能夠觸發在瀏覽器中顯示錯誤消息的錯誤處理程序。所以在這種情況下,當php嘗試將消息輸出到瀏覽器並停止時,php沒有足夠的內存。
所需的內存量取決於加載的擴展名,服務器環境和其他php.ini設置。
例如,如果在分配1 MB時觸發內存不足錯誤,則需要1.5 MB才能在瀏覽器中顯示錯誤消息。請參閱:Tracking Memory Usage in PHP
演示:http://ideone.com/VmPO0w
<?php
// error.php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$x = str_repeat(' ', 1024 * 1024); //store 1 MB to a string
ini_set('memory_limit', '1535K'); //minimum of 1536K (1.5 MB) needed to display error
while (true) {
echo 'not real: ' . (memory_get_peak_usage(false)/1024/1024) . " MB\n";
echo 'real: ' . (memory_get_peak_usage(true)/1024/1024) . " MB\n\n";
$x .= str_repeat(' ', 1024 * 500); //store 500K more to string
}
命令行使用效果:$>php error.php
not real: 1.2208786010742 MB
real: 1.5 MB
Fatal error: Allowed memory size of 1571840 bytes exhausted (tried to allocate 512001 bytes) in error.php on line 10
當在瀏覽器中加載時,其結果將是一個空白頁。
Windows環境php 5.6 x64 NTS +內置網絡服務器。至少使用256K
。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
echo $error->abc; // should give error
// E_ERROR - run out of memory
ini_set('memory_limit', '256K'); //tested with 255K - blank page
var_dump((object) range(0, 100000));
(!) Fatal error: Allowed memory size of 262144 bytes exhausted (tried to allocate 32 bytes) in ...
Linux環境中的PHP 5.6 64 NTS + PHP-FPM +阿帕奇FCGI。至少使用512K
。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
echo $error->abc; // should give error
// E_ERROR - run out of memory
ini_set('memory_limit', '512K'); //test with 511K - blank page
var_dump((object) range(0, 100000));
(!) Fatal error: Allowed memory size of 524288 bytes exhausted (tried to allocate 32 bytes) in ...
是PHP運行什麼模式? apache/mod_php或fpm? – mkaatman
它在Apache模式下運行 服務器API:\t Apache 2.0處理程序 –