PHP混合html没有输出

时间:2014-08-03 09:36:38

标签: php html linux apache loops

自从我触及任何与网络相关的代码以来已经过去了十多年,所以请原谅我的无知。我已经将一些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

2 个答案:

答案 0 :(得分:0)

你的php代码似乎不是问题,在测试运行时对我的apache执行正常。这可能是你在php或apache-&gt; php-fpm上执行的超时或为php进程运行分配的内存量。当你检查输出时,你的apache错误日志会给你什么。然后我们可以给你一个更好的答案。

根据以下注释,您需要使用ob_flush()清除输出缓冲区,以便在内容可用时显示,而不是在输出结尾显示内容。对于你正在尝试做的事情,ajax应用程序可能会更有意义,除非你真的想要依赖刷新输出。

还要记住ob_flush,即使你必须更新你的apache / php设置来实际发送数据而不是缓冲它。您的html结束语也一直在底部。如前所述,更好的解决方案是使用javascript作为前端,使用一个基本模板调用单独的php进行处理。在响应中,js将使用附加信息更新页面。

答案 1 :(得分:0)

匹配您可以使用的每个单个字符/(.)/

像这样

preg_match_all("/(.)/", $str, $m);

或者你可以str_split docs

str_split($str);