3

cronjobによって毎分起動されるphpファイルがあります。

phpファイルが起動されると、データベースの更新、スリープなどが行われます。

これは次のようにプログラムされています。

$start = microtime(true);
set_time_limit(10);

for($i=0;$i<5;$i++)
{
    updateDB();
    time_sleep_until($start + $i + 1);
}

このコードを実行しても、データベースで変更が行われていることはわかりません。私が気付くもう一つのことは、私が何かをエコーアウトするとき、私はループがワンピースで終わるときに印刷されます。

[編集]flushとob_flushを使用しようとしましたが、それでも行の行が出力されませんでした[/ edit]

これらのエラーを回避するにはどうすればよいですか。データベースを更新する必要があります。

私が疑問に思っていたもう1つのことは、この種のことをログに記録するのが最善の方法です。結果をログファイルに記録できますか?

4

2 に答える 2

4

ループ自体は正常に見えます。データベースを更新していない場合は、updateDB()関数にエラーがあるはずです。

エコーのことについて。スクリプトの出力は多くの場合バッファリングされます。PHPにすぐに印刷させるには、出力をフラッシュするたびにflush()を呼び出すか、スクリプトの先頭でob_implicit_flush()を呼び出すだけで、何かを印刷するたびに自動的にフラッシュされます。

また、ブラウザを介してスクリプトを呼び出している場合、ブラウザ自体が応答をさらにバッファリングしてから表示する場合があります。

また、ログに関しては、最も簡単な方法は、どこかでファイルを選択し、file_put_contents()を使用してログに記録したいものをすべて印刷することです。3番目のパラメーターのFILE_APPENDフラグに注意してください。

于 2009-11-24T00:53:18.553 に答える
0

コマンドラインから実行しているように見えます。この場合、バッファリングがないようにstderrに書き込むことができます。$ stderr = fopen('php:// stderr'、'w');

ロギングの場合は、ファイルを開いて書き込み、閉じます。(fopen、fwrite、fclose);

于 2009-11-24T01:19:17.470 に答える