PHPで思うようにsleep()が動作しない

2020年6月12日

30日分の安い宿一覧を、楽天APIのデータを使って表示するPHPプログラムを製作していたのですが、一部の処理を手動にしていたのを全自動で更新できるようにしました。

その際、処理内容を画面で確認するために、途中で処理結果の表示を持続したかったのですが、処理を指定した時間だけ止めるsleep()が効かないんです。

随分頑張って、試行錯誤したのですが解決できず、最後に頼るのはYAHOO!知恵袋です。

原因は、時間がかかる処理をした場合、ブラウザの仕様でバッファをフラッシュするためのようです。
echoコマンドを実行した後に
@ob_flush();
@flush();
を挿入して、その後に
sleep(40);
を挿入すると画面表示した後に、表示を一定時間(今回の場合は40秒)停めて、その後に新しい処理に移る事ができるようになりました。

これで、30日分の最安値宿一覧を、更新内容を確認しながら全自動で更新できるようになりました。やったね。

2020年6月14日

40秒停めても、画面を見続けないといけない事が面倒なので、表示以後の別ウインドウでさせたほうが便利だと気づきました。
PHPで新しいウインドウを開くのが難しく、Javaスクリプトを使わなければいけない事がわかり、実際に試したのですが、うまく動作しませんでした。
結局、アップロードする前に<form   target=”_blank”>で希望通りの処理ができることが分かりました。これだと表示を一定時間(今回の場合は40秒)停止も不要になります。

<body onload=”document.all.jikkou.click();”>
<form action=”https://kimassi.net/insert25.php” method=”post” target=”_blank”>
<input type=”hidden” name=”up_file” value=”<?= urlencode(file_get_contents(‘../../../data/output/csv-put2.csv’)) ?>”>
<input type=”submit” value=”up” name=”jikkou”>
</form>
</body>

コメントを残す

メールアドレスが公開されることはありません。