- ベストアンサー
headerについて
<?php header("Location:x.php?y=1"); exit; ?> はOKですが <?php $_GET['xx']; header("Location:x.php?y=1"); exit; ?> はだめです エラーメッセージは Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/z.php:2) in /var/www/html/z.php on line 3 $_GET['xx']や$_POST['xx']などをheaderの前に置けないと非常に困ります (上はテスト用PHPです) どうしたらいいでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
isset()を使用すると判断可能です。 $xx = isset($_GET['xx']) ? $_GET['xx'] : ""; あるいは if (isset($_GET['xx'])) { ・・・ } else { ・・・ { 等です。
その他の回答 (2)
- php504
- ベストアンサー率42% (926/2160)
下の質問を見て何がしたいのかわかりました。 $_GET['xx']はecho $_GET['xx']の間違いですね。 何かを表示してからジャンプするにはLocationではなくてRefreshヘッダを使います。 <?php header("Refresh: 2; URL=http://localhost/x.php?y=1"); echo $_GET['xx']; ?> 上の例だと2秒後にジャンプします。
お礼
ありがとうございます 緊急の問題ではないのですが参考になります
- little-m
- ベストアンサー率44% (45/102)
$_GET['xx']は特にheader()の前に置く事ができますが、この場合は、たぶん$_GET['xx']の所で、$_GET[]配列に'xx'というindexが存在しないというエラーメッセージを出力しようとし、そのエラーメッセージによって、上記のエラーが発生しておりのだと思いますよ。
お礼
ありがとうございます テストPHPでなく実際のPHPでは$_GET['xx']が定義されているかどうかの判断をしてその判断いかんでサイト移動させたいのですが その判断をすることによりheaderが置けなくなってしまうのですね 定義されているかどうかを判断するだけでheaderが置けなくなる不都合を解消する方法はあるでしょうか?
お礼
ありがとうございます start.php: <?php if(isset($_POST['x'])) { header("Location:stop.php?msg=by_x"); exit; } if(isset($_POST['y'])) { header("Location:stop.php?msg=by_y"); exit; } ?> <form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>"> <input type="submit" name="x" value="go by x"/> <input type="submit" name="y" value="go by y"/> </form> stop: message:<?php echo $_GET['msg'] ?><br/> <a href="start.php">push</a><br/> でうまくいきました