1

印刷しようとしている 145064642 文字の長い HTML 文字列があります。

echo/var_dump/die を試すと、ページが false(0) を返しますが、変数の半分だけを出力しようとすると、正常に動作します。

例:

動作しない:

echo $MY_HTML_STR; die($MY_HTML_STR); var_dump($MY_HTML_STR)

2 つの行はそれぞれ次のように機能します。

die(var_dump(substr($MY_HTML_STR,strlen($MY_HTML_STR)/2)));

die(var_dump(substr($MY_HTML_STR,0,strlen($MY_HTML_STR)/2)));

しかし、両方を一緒に印刷しようとすると:

var_dump(substr($MY_HTML_STR,strlen($MY_HTML_STR)/2));
die(var_dump(substr($MY_HTML_STR,0,strlen($MY_HTML_STR)/2)));

再びクラッシュしています。

エコーの1つの方法でエラーが発生しました:

echo <<<EOF
    TEXTTEXT...
       $MY_HTML_STR                   
    BLABLAHTML...
EOF;

エラー:Fatal error: Out of memory (allocated 324009984) (tried to allocate 145090561 bytes) in .....page.php on line 675

675行目がそのEOF;行です。スクリプトは、WAMPSERVER と memory_limit を -1 (無制限) に設定して自宅のコンピューターで実行しています。

4

2 に答える 2

2

出力バッファリングがオンになっているかどうかを確認します。出力バッファリングが有効になっている場合、出力がフラッシュされるまで、出力するものはすべてメモリに保持されることに注意してください(これはスクリプトのシャットダウン時にも暗黙的に発生します)。

印刷する前にob_end_clean()を試して、問題が解決するかどうかを確認してください。

また、印刷する前に以下のコードを追加してみてください。ネストされた出力バッファリングを使用している可能性があります(たとえば、php.iniで有効にしていて、スクリプトの先頭でob_startを呼び出した場合)

print ob_get_level();
exit;
于 2012-06-16T12:45:40.857 に答える
1

echo は長すぎる文字列を好みません。印刷したい場合は、 for ループを使用して、 substr() で約 10000 文字以下の小さな文字列に分割します。

内部書き込みバッファを超えすぎています。

于 2012-06-16T11:35:00.427 に答える