1

问题:

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

代码:

<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

4 回答 4

6

您需要的可能是类似彗星的功能。请尝试以下操作以使其正常工作。

<?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>

参考:

于 2013-01-02T10:35:07.680 回答
1

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

  1. 加载带有加载符号的页面
  2. 启动对 PHP 文件的加载 ajax 调用并执行所有计算
  3. 在响应 ajax 调用时,使您的输出替换加载的 div。
于 2013-01-02T11:14:05.690 回答
0

PHP是服务器端的。您无法输出加载消息。

您可以尝试制作一个自动重定向到目标页面的页面(将您的“加载”消息放在此页面中)。现在你看到加载页面,直到你的目标页面被加载

于 2013-01-02T10:11:26.227 回答
0

您可以使用 PHP 输出 JavaScript。您将执行以下操作:

  • 之前longProcess(),输出 JavaScript 设置一个#contentsDIV<body>为加载动画
  • longProcess()
  • 输出 JavaScript 以在其中设置#contentsDIV<body>以输出您想要的任何内容,无论是数据、“完成”还是其他内容。

只是一个快速的想法,几乎可以肯定不是最好的,但它会起作用。


另一种方法是使用 PHP 重新定向到已完成的页面,一旦加载过程使用header完成。

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

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

于 2013-01-02T10:36:36.523 回答