質問: ### 前提・実現したいこと とある掲示板のスクレイピングツールを製作中です。 スクリプト実行中に現在読み込んでいるページ数を表示するためにfor文の中でechoを実行しています。 for文が終了した後にページ更新によるフォームの再送信を防ぐためにheader()関数でリダイレクト処理をかけているのですが先のechoによってエラーが発生してしまいます。 header()関数でリダイレクト処理をする前のfor文の中でロード画面のような文字列を表示させることはできないのでしょうか。 ご教授よろしくお願いいたします。 ### 発生している問題・エラーメッセージ ``` Warning: Cannot modify header information – headers already sent by (output started at ... ``` ### 該当のソースコード ``` ``` ### 試したこと セッションに一時的に値を与えてリロードした場合リダイレクトするような事もやってみたのですが以下のコードだとリロードではなくフォームから正常にポストした場合でもリダイレクトされてしまいました。 なにかいい方法はないでしょうか。 ``` ```
回答: header関数でできないのは既存の回答の通りです。これは原理的にできません。 ですが、header関数以外の方法、たとえばJavaScriptによる遷移であれば、表示を出すことも可能です。 しかし、まだ問題があります。 ウェブの表示というものは処理が終わった後でないとできないのです。処理途中の表示は、絶対にできないわけでもないようですが、難易度が高いです。 そこで、A→B という遷移をするとして A: 「処理中」と表示してから JavaScript でBに遷移 B: 処理をする という流れでどうでしょうか? PoC(概念実証コード)を簡単に書いてみました。 ``` 処理中 ``` ``` 処理しました ```