[英]PHP Fatal Error not getting displayed on browser screen
我是PHP的新手,並試圖了解如何調試代碼。 我正在使用ini_set
和ini_get
函數。
這是我的代碼:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('log_errors_max_len', 0); // 0 = unlimited length
ini_set('error_log', '/var/www/html/debugging/php_errors.log');
echo $error->abc; // should give error
// E_ERROR - run out of memory
ini_set('memory_limit', '1K');
var_dump((object) range(0, 100000));
require 'abc.php';
?>
所有錯誤都記錄在php_errors.log文件中,並顯示在瀏覽器上。 但是當我使用var_dump((object) range(0, 100000));
為了耗盡內存導致致命錯誤,我在瀏覽器上出現一個空白屏幕,而錯誤則記錄在php_errors.log中 。
我是否需要更改任何其他設置以在瀏覽器上顯示錯誤以及登錄文件。 我只是想在這里玩PHP。
1K太低,PHP無法在瀏覽器中呈現錯誤。
[更新]
PHP需要有足夠的可用內存才能觸發在瀏覽器中顯示錯誤消息的錯誤處理程序。 所以在這種情況下,當php試圖將消息輸出到瀏覽器並且剛剛停止時,它沒有足夠的內存。
所需的內存量取決於加載的擴展,服務器環境和其他php.ini設置。
例如,當分配1 MB時觸發內存不足錯誤時,它需要1.5 MB才能在瀏覽器中顯示錯誤消息。 請參閱: 在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));
(!)致命錯誤:允許的內存大小為262144字節耗盡(試圖分配32個字節)...
Linux環境php 5.6 x64 NTS + php-fpm + Apache 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));
(!)致命錯誤:允許的內存大小為524288字節耗盡(試圖分配32個字節)...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.