• ベストアンサー
  • 困ってます

php 処理が長い時の動作

  • 質問No.9062182
  • 閲覧数353
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 40% (11/27)

php5で、外部からファイルをダウンロードするモノを作っています。
htmlでフォームからPOSTでコードを送り、それをもとにダウンロードしています。
フォームからコードを送信すると、サーバー側でのダウンロード処理が終わるまでの時間、フォームの画面のまま読み込み中になってしまいます。
そこで、ダウンロード処理が始まる前に待機するように促すメッセージを出そうと、ダウンロード処理をしているphpの最初にechoでメッセージを出そうと試みたのですが、画面が切り替わるのはすべての処理が終わってからのようで、変わらずでした。
理想は、フォームから送信すると待機ページに切り替わり、ダウンロード中と書かれた部分がダウンロード終了と同時にダウンロードボタンになる、といった動作をさせたいです。
不可能であれば、ダウンロード処理を開始する前に時間がかかることを知らせるメッセージを出すだけでも構いません。
お力を貸していただけると幸いです。長文失礼しました。

質問者が選んだベストアンサー

  • 回答No.2
  • ベストアンサー

ベストアンサー率 77% (407/525)

PHPだけで「徐々に表示する」という処理を行うことは可能です。有名なPHP製CMSであるWordpressの設定画面もこれを採用していますね。

処理途中で結果を出力
http://so-zou.jp/web-app/tech/programming/php/sample/progress.htm

【補足】
・php.iniの設定によっては何もしなくてもob_start();された状態になっていますが、最初に while (ob_get_level()) { ob_end_clean(); } としておけば ob_flush() は不要です。
・@演算子でエラー抑制しなくても上記のようにちゃんとバッファリングネストレベルを把握した上でコーディングすればエラーは絶対に発生しません。バッファリングのことを理解しないで初心者が煩雑に書いたコードが流布された結果でしょう。
・PHP5.4以降でセーフモードは消滅しました。

ただ、こういうやり方自体がレガシーすぎるのは言うまでもありません。モダンなほとんどのサイトはJavaScriptを併用して非同期処理を行っているはずです。どうせスクロールさせるにはscriptタグの生成が必要ですし、最初から非同期でやればいい話です。

JavaScript(jQuery)からPHPのAPIを利用する
http://qiita.com/mpyw/items/62e6e415f86eb30a5ff4
お礼コメント
digda_mc

お礼率 40% (11/27)

実現できました。ありがとうございました!
投稿日時:2016/09/16 20:52

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 38% (3205/8338)

他カテゴリのカテゴリマスター
POSTのデータを受取る処理と、ダウンロード処理を別プログラムに分けて処理するしかありません。
同期処理である以上、全ての処理が終わるまでサーバから応答を返す事はありませんので、非同期で処理しましょう。
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

ピックアップ

ページ先頭へ