2011-09-15 8 views
0

私は、(毎分1回実行される)バックグラウンドで実行される(別の)スクリプトの状態をユーザーに通知しようとしています。php ajaxのwhile()ループで印刷できません

は、だから私はこのPHPコードがあります:それは何も印刷されません

 
    while(@fopen("dl.conf","r")){ 
     print "Download will start soon"; 
     flush(); 
     sleep(1); 
    } 
    . 
    .

を、プラス私はそのファイルをキャンセルした場合でも、それは残りのスクリプトを実行しません。

基本的に、ユーザーはダウンロードするファイルを送信できます。これにより、dl.confファイルが作成されます。バックグラウンドでdl.confが存在するかどうかをチェックしている場合はそれを読み取り、ダウンロードを開始するスクリプトがあります。 dl.confファイルも削除されます。

ユーザーがダウンロードを送信することがありますが、スクリプトの再実行に数秒かかることがあり、ダウンロードするものがあることを認識している可能性があります。私はちょうどすぐに(ダウンロードの進行状況が表示されます)開始されるダウンロードを待つユーザーにしたい。

は、あなたは、単にこのようなfile_exists()を使用することができ、ファイルがあるかどうかを確認するためにfopen()を使用する必要はありませんあなた

+0

イベントonresponse AJAXで処理する必要があり、この スクリプトを変更することをお勧めいただきたいあなたコード。 – Rijk

+2

解析エラーはありません。このコードを実行しただけでエラーは表示されません。 – danishgoel

+0

私は解析エラーを受け取りません。エラーが何であるか教えてください。 – Danny

答えて

0

に感謝します。バックグラウンドスクリプトはまた、PHPスクリプトで、dl.confファイルを削除するunlink()を使用している場合

// run loop till file exists 
while(file_exists("dl.conf")){ 
    print "Download will start soon"; 
    flush(); 
    sleep(1); 

    // clear stat cache to get correct file status 
    clearstatcache(); 
} 

あなたはは、clearstatcacheを必要としない()を呼び出します。 unlink()は自動的にファイルの統計キャッシュをクリアします。

更新

時々フラッシュ()または動作しないだけではob_flush。 PHPのマニュアルでこのコメントを見てください。http://php.net/manual/en/function.ob-flush.php#90529

したがって、確実にoutput_bufferingを使用している場合は、このコマンドセットを試すことができます。

ob_end_flush(); 
ob_flush(); 
flush(); 
ob_start(); 
+0

申し訳ありませんが、私はこのように同じ動作をします。何も印刷されません。このPHPスクリプトはdl.confを削除する責任がないので、私はunlink()を使用することはできません。それはいつそれを削除するのかわかりません – Danny

+0

出力がない場合、 'file_exists()'がfalseを返すことを意味します。 whileループの直前に 'var_dump(file_exists(" dl.conf "))'を実行して戻り値が何であるかを確認してください。 – danishgoel

+0

私は試しましたが、何も変わりませんでした。 :( – Danny

0

このエラーをブロックしています。

これを試してみてください:

$fOpen = @fopen("dl.conf","r"); 

if(!$fOpen) die('ERROR of some kind...'); 

while($fOpen){ 
    print "Download will start soon"; 
    flush(); 
    sleep(1); 
} 
+0

私は申し訳ありませんが、私はこのように同じ動作を取得します。何も印刷されません。 – Danny

+0

@Danny - PHPエラーが発生し、エラーログが有効になっていますか? – Neal

+0

はい、私はdisplay_errorsとlog_errorsをONにしました。 error_reporting = E_ALL | E_STRICT – Danny

0

は、あなたがこのような場合のために、AJAXを使用してもでパースエラーがあります

if(file_exists('dl.conf')) 
{ 
return 'file created, download will start soon'; 
} 
+0

実際にはajaxで処理されています。このコードは、進行状況バーを表示するスクリプトの一部です。とにかく、スクリプトを続行できないようなサイクルやものが必要です。そうでなければ、私が何か他のもので書いたメッセージを置き換えます。 – Danny

+0

レスポンスはバッファリングされ、スクリプトの実行中は出力されません。php.iniのob_flush()関数や関連する設定オプションで試してみることもできますが、これはオプションではないと思います。 – Dmitry

+0

助けてくださいhttp://stackoverflow.com/questions/6385676/php-buffered-output-depending-on-server-setting – Dmitry

関連する問題