自从我触及任何与网络相关的代码以来已经过去了十多年,所以请原谅我的无知。我已经将一些PHP代码与html混合用于教师/博士后重聚页面,并且令人惊讶的是表面上没有错误。从我的linux控制台执行php时,它会按照我的预期输出,回显字符串。一旦从apache web服务器执行php,它的输出世界就变得无效(完全空白或服务器500代码)。
<?php
header('Content-Type: text/html; charset=utf-8');
$str = file_get_contents('str.txt');
echo '<html>
<head>
<style>body { background: #130; }</style>
</head>
<body>
<code><span style="display:block;line-height:8px; font-size: 8px; font-weight:bold;white-space:pre;font-family: monospace;color: #0F0; background: #130;">';
$r = preg_match_all("/.?/uim", $str, $m);
for($i=0; $i < sizeof($m[0]); $i++) {
echo $m[0][$i];
time_nanosleep(0, 50000000);
}
echo '</span></code>
</body>
</html>';
?>
编辑:mildred上传了错误的文件,更新了 - &gt; str.txt可以在这里找到:https://gist.github.com/anonymous/dbb8ae305d83078d7ae7
答案 0 :(得分:0)
你的php代码似乎不是问题,在测试运行时对我的apache执行正常。这可能是你在php或apache-&gt; php-fpm上执行的超时或为php进程运行分配的内存量。当你检查输出时,你的apache错误日志会给你什么。然后我们可以给你一个更好的答案。
根据以下注释,您需要使用ob_flush()清除输出缓冲区,以便在内容可用时显示,而不是在输出结尾显示内容。对于你正在尝试做的事情,ajax应用程序可能会更有意义,除非你真的想要依赖刷新输出。
还要记住ob_flush,即使你必须更新你的apache / php设置来实际发送数据而不是缓冲它。您的html结束语也一直在底部。如前所述,更好的解决方案是使用javascript作为前端,使用一个基本模板调用单独的php进行处理。在响应中,js将使用附加信息更新页面。
答案 1 :(得分:0)