2016-12-20 19 views
3

私はPHPを初めて使い、コードをデバッグする方法を理解しようとしています。私はini_setini_get関数を使用しています。PHP致命的なエラーがブラウザの画面に表示されない

<?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でプレーしようとしています。

+0

? apache/mod_phpまたはfpm? – mkaatman

+0

Apacheモードで実行中 サーバAPI:\t Apache 2.0ハンドラ –

答えて

1

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 +組み込みWebサーバー。少なくとも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のx64 NTS + PHP-FPM + ApacheのFCGI。少なくとも512Kを使用してください。 PHPが実行されているどのようなモード

<?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 ...

+0

いいえ!それでも死の白い画面が表示されています:( –

+0

@PritamBohraは完全なスクリプトとともにLinux環境設定でアップデートされた回答ですが、低すぎる 'memory_limit'はどちらの場合でも問題になりますので、表示するまで増やしてください。 – fyrye

+0

私は本当にその理由を理解していませんでした。理由を説明してください。 –

関連する問題