1

カードリーダーからライブフィードをキャプチャし、PHP を使用して印刷しようとしています。

<?php
    $i=0;
    for(;;)
    {
        $subdata=file_get_contents("/home/openflow/subscribedata.txt");
        $subdata2=file_get_contents("/home/openflow/subscribedatatemp.txt");

        if($subdata!=$subdata2)
        {
            copy("/home/openflow/subscribedatatemp.txt","/home/openflow/subscribedata.txt");
            $sub=file_get_contents("/home/openflow/subscribedata.txt");
            $i++;
            echo "\n". $i."--".$sub;
        }
    }
?>

for ループを無限ループとして使用しています。新しいデータがあるたびに、私のカード リーダー スクリプトはそれをsubscribedatatemp.txtファイルに書き込み、上記のスクリプトはsubscribedatatemp.txt (最新のエントリ) とsubscribedata.txt (前のエントリ)の違いをチェックします。違いがある場合は、最新のものを前のものにコピーし、最新のデータをエコーする必要があります。

問題は、上記の PHP コードを実行しているときに、しばらく何も表示されず、しばらくするとブラウザの読み込みが停止し、読み込み中に取得したすべてのデータが表示されることです。

これは、ループの実行が停止され、while ループの終了後にすべてのデータが出力されていることを示していますよね? どうすればこれを修正できますか?

4

4 に答える 4

0

私があなたを正しく理解している場合、(スクリプト全体が終了するのを待つのではなく) 各ループの後に出力を表示しようとしているので、各ループを echo( ) するには、ループの最後にflush追加する必要がありますflush().

また、ループの前に追加set_time_limit(0)するので、スクリプトの実行には時間がかかります。

<?php
set_time_limit(0);
ob_end_flush();


$i=0;
for(;;)
{
$subdata=file_get_contents("/home/openflow/subscribedata.txt");
$subdata2=file_get_contents("/home/openflow/subscribedatatemp.txt");

if($subdata!=$subdata2)
{
copy("/home/openflow/subscribedatatemp.txt","/home/openflow/subscribedata.txt");
$sub=file_get_contents("/home/openflow/subscribedata.txt");
$i++;
echo "\n". $i."--".$sub;
/*flush()*/
}

}
ob_start();
?>
于 2013-05-21T18:13:13.793 に答える
0

ループの最後でflushand関数を使用します...sleep

しかし、これにはajax呼び出しを使用する方が良いでしょう..

于 2013-05-21T18:17:15.540 に答える
0

コードの先頭に、次の行を追加します。

set_time_limit(0);

したがって、コード全体は次のようになります。

<?php
set_time_limit(0);
$i=0;
for(;;)
{
$subdata=file_get_contents("/home/openflow/subscribedata.txt");
$subdata2=file_get_contents("/home/openflow/subscribedatatemp.txt");

if($subdata!=$subdata2)
{
copy("/home/openflow/subscribedatatemp.txt","/home/openflow/subscribedata.txt");
$sub=file_get_contents("/home/openflow/subscribedata.txt");
$i++;
echo "\n". $i."--".$sub;
}
}
?>

詳しくはset_time_limit() こちらをご覧ください。

また、ファイルに が設定されていないかどうかを確認max_execution_timeしてください。php.ini

于 2013-05-21T18:03:42.850 に答える