1

我有 145064642 个字符长的 HTML 字符串,我正在尝试打印。

当我尝试对其进行 echo/var_dump/die 时,它​​会导致页面返回 false(0),但如果我尝试仅打印变量的一半,它工作正常。

例子:

不工作:

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

这两行中的每一个都有效:

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)));

它又崩溃了。

一种回显方式确实给了我一个错误:

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 回答