问题:
在执行一个很长的计算过程之前,我想向用户输出一条加载消息。
代码:
<html>
<!doctype html>
<head>
<title>Loading</title>
</head>
<?php
function longProcess()
{
//where long process takes a long time to compute
}
?>
<body>
<?php
echo <div id = 'loading'> LOADING </div>
echo '</body>';
echo '</html>';
flush();
longProcess();
?>
更多详情:
基本上,在我调用longProcess函数之前,我希望将LOADING输出给用户。我使用flush,所以我可以输出HTML的结束标记,然后调用longProcess函数。问题是它没有输出,服务器正在计算漫长的过程。
答案 0 :(得分:4)
你需要的可能是类似彗星的功能。请尝试以下操作以使其正常工作。
<?php
// Disable buffering
@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('output_buffering', 'Off');
@ini_set('implicit_flush', 1);
// Flush buffers
ob_implicit_flush(1);
for ($i = 0, $level = ob_get_level(); $i < $level; $i++) ob_end_flush();
?><!DOCTYPE html>
<html>
<head>
<title>Loading</title>
</head>
<body>
<div id="loading">LOADING</div>
<?php
// We need to send enough junk messages to make it works for all browsers
echo str_repeat(" ", 1024), "\n";
ob_start();
// Long process starts here
// For this example, just sleep for 5 seconds
sleep(5);
echo "Loaded";
// Flush output like this
ob_flush();
flush();
?>
</body>
</html>
参考文献:
答案 1 :(得分:0)
PHP是服务器端的。您无法输出加载消息。
您可以尝试制作一个页面(在此页面中放置“加载”消息),该页面会自动重定向到您的目标页面。现在,您可以看到加载页面,直到加载目标页面
答案 2 :(得分:0)
您可以使用PHP输出JavaScript。您将执行以下操作:
longProcess()
之前,输出JavaScript以将#contents
内的<body>
DIV设置为加载动画longProcess()
#contents
DIV设置为<body>
以输出您想要的任何内容,无论是数据,“已完成”还是其他任何内容。只是一个简单的想法,几乎肯定不是最好的,但它会起作用。
另一种方法是在加载过程使用header完成后,将PHP重新指向已完成的页面。
header('Location: http://www.example.com/');
最后,肖的禁用缓冲是你应该看看的东西!
答案 3 :(得分:0)
而不是在同一页面中计算,