前提・実現したいこと
とある掲示板のスクレイピングツールを製作中です。
スクリプト実行中に現在読み込んでいるページ数を表示するためにfor文の中でechoを実行しています。
for文が終了した後にページ更新によるフォームの再送信を防ぐためにheader()関数でリダイレクト処理をかけているのですが先のechoによってエラーが発生してしまいます。
header()関数でリダイレクト処理をする前のfor文の中でロード画面のような文字列を表示させることはできないのでしょうか。
ご教授よろしくお願いいたします。
発生している問題・エラーメッセージ
Warning: Cannot modify header information – headers already sent by (output started at …
該当のソースコード
php
1<?php 2if(!empty($_POST['action'])){ 3 4 $maxPage = 100;//読み込むページが100ページの場合 5 6 for($i = 0;$i <= $maxPage;$i++){ 7 /*スクレイピングのスクリプトは省略します*/ 8 $countDown = $maxPage - $i; 9 $countDownEcho = "あと".$countDown."ページ"; 10 echo $countDownEcho;//ここで現在処理中のページ数を表示させたい 11 } 12 13 header('Location:#');//フォームの再送信を防ぐためにリダイレクトしたい 14 exit(); 15 16} 17?> 18 19<html> 20<head> 21</head> 22<body> 23 <form action="" method="post"> 24 <input type="submit" name="action" value="スクリプトを実行する"> 25 </form> 26</body> 27</html>
試したこと
セッションに一時的に値を与えてリロードした場合リダイレクトするような事もやってみたのですが以下のコードだとリロードではなくフォームから正常にポストした場合でもリダイレクトされてしまいました。
なにかいい方法はないでしょうか。
php
1<?php 2session_start(); 3 4if(isset($_SESSION['hoge'])){ 5 session_unset($_SESSION['hoge']); 6 header('Location:#'); 7 exit(); 8} 9 10if(!empty($_POST['action'])){ 11 12 $maxPage = 100;//読み込むページが100ページの場合 13 14 for($i = 0;$i <= $maxPage;$i++){ 15 /*スクレイピングのスクリプトは省略します*/ 16 $countDown = $maxPage - $i; 17 $countDownEcho = "あと".$countDown."ページ"; 18 echo $countDownEcho;//ここで現在処理中のページ数を表示させたい 19 } 20 $_SESSION['hoge'] = "hoge"; 21} 22?>
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/15 13:33