在php中输出加载消息

时间:2013-01-02 10:05:33

标签: php

问题:

在执行一个很长的计算过程之前,我想向用户输出一条加载消息。

代码:

<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函数。问题是它没有输出,服务器正在计算漫长的过程。

4 个答案:

答案 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()
  • 输出JavaScript以将#contents DIV设置为<body>以输出您想要的任何内容,无论是数据,“已完成”还是其他任何内容。

只是一个简单的想法,几乎肯定不是最好的,但它会起作用。


另一种方法是在加载过程使用header完成后,将PHP重新指向已完成的页面。

header('Location: http://www.example.com/');

最后,肖的禁用缓冲是你应该看看的东西!

答案 3 :(得分:0)

而不是在同一页面中计算,

  1. 使用加载符号
  2. 加载页面
  3. 启动对PHP文件的on load ajax调用并执行所有计算
  4. 响应ajax调用,使输出替换你的div加载。