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を出力したいと思います。フラッシュを使用して、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ファイルへのonloadajax呼び出しを開始し、すべての計算を実行します
  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('Location: http://www.example.com/');

最後に、Xiaoのバッファリングの無効化は、一見の価値があります。

于 2013-01-02T10:36:36.523 に答える