2011-07-08 16 views
1

ページがブラウザに送信された後に関数を呼び出そうとしていますが、その方法が見つかりませんでした。ページロード後に関数を呼び出す方法

私はregister_shutdown_functionと__destructの両方を試しましたが、動作しません。

これは私が持っている構造である。

register_shutdown_function('MyClass::Save'); 
MyClass::Initialize(); 
CreateAllOutput(); 

のMyClass ::セーブは内部の睡眠(20)を持っています。

CreateAllOutput()の後にshutdown関数が呼び出されますが、実際にはブラウザのロードバーはSave関数が実行されてから20秒待って終了するだけです...私は静的でないクラスと__destructの内部にsleep(20)があり、同じことが起こります。

出力がすべてブラウザに送信された後にのみ関数を実行する方法はありますか?

ありがとうございます。

答えて

2

一般的には、なしです。すべての出力をフラッシュしてから呼び出す以外の方法はありませんが、ブラウザの読み込みバーも終了しません。

私が考えることができるのは、iFrameをページに保存して、保存機能を使用してPHPファイルを呼び出すことだけです。または、Ajax呼び出しを行うこともできます。

第3の可能性は、exec()Documentation)と呼ぶことです。 PHPファイルを実行可能にした後、そのメソッドで実行することができます。文書で述べたように:

プログラムは、それがバックグラウンドで実行されている を継続するためには、プログラムの出力 が ファイルまたは別の出力にリダイレクトする必要があり、この 機能が起動された場合ストリーム。 を実行すると、PHPの実行が終了し、 になり、プログラムの実行が終了します。

+0

私は今までこのような機能を実際には必要としませんでしたが、これは大きな制限のようです。私はちょうど何も出力に追加されていないことを確認するために、ページが読み込みを完了するのを期待しているので、ユーザーがそれを待つことを強制されることなく機能するようにしたい...失望... – BlunT

+0

@BlunT - 私は私の答えで別の可能な解決策を追加しました –

+0

私はすでにexecをやっていると思っていましたが、あまりにもオーバーヘッドに見えるだけで、私は共有ホスティング環境にいるので、私はGoogleから逃したかもしれないシンプルでストレートな解決策を望んでいましたが、これまでのところはそうではありません。 – BlunT

関連する問題