dポイントプレゼントキャンペーン実施中!

以下は、
(1) テキストフォームに記入された値をPOSTすると
(2) 文字列はSESSION変数としてセットされてpage2に遷移し
(3) page2 に書き出される
というものですが、

ローカルのWInXP(SP3)+IIS+PHP5.2.6では動作するプログラムが
今般レンタルしたサーバー上で(FreeBSD+Apache1.3.37+PHP5.2.2)
では動作しません。

具体的には、page2.phpに遷移できずに
Warning: Cannot modify header information - headers already sent by (output started at /usr/home/myaccountname/public_html/page1.php:7) in /usr/home/myaccountname/public_html/page1.php on line 14
となります。

ちなみに、page1.phpの<?php $_SERVER["PHP_SELF"] ?>を
page1.phpに書き換えても改善ありませんでした。

ローカルで動いていたものがそのまま動作するとも思っていませんが、
見直すべき設定項目として、何がありますでしょうか?


---------------------------page1.php

<?php
session_cache_limiter('none');
session_start();
?>
<html>
<body>
<form method="post" action="<?php $_SERVER["PHP_SELF"] ?>">
<input type="text" name="email">
<input type="submit" name="reg">
</form>
<?php
if ($_POST['email'] != "") {
$_SESSION["email"] = $_POST["email"];
header("Location: page2.php");
}
?>
</body>
</html>


---------------------------page2.php

<?php
session_cache_limiter('none');
session_start();
?>
<html><body>
<?php
echo $_SESSION["email"];
?>
</body></html>

A 回答 (2件)

page1.phpに問題があります。


header関数はあらゆる出力の前にコールされる必要があることになっています。
http://jp2.php.net/header

従って、header関数を使うなら以下のような感じに書き直すべきでしょう。

<?php
session_cache_limiter('none');
session_start();
if (isset($_POST['email'])) {
$_SESSION["email"] = $_POST["email"];
header("Location: page2.php");
}
?>
<html>
(省略)
</html>

余談ですが、遷移先は絶対URIで記述しないと受け付けないクライアントもあった気がします。
    • good
    • 0
この回答へのお礼

UmJammerさん、早速のご回答ありがとうございました。

ご教示の内容を読んで凍り付いてしまったのですが、
なまじっか、Win(IIS)上で、ちゃんと動いていたことに過信し、
既に、ほとんどのプログラムが完成してしまっている状況です。

さあ、本番環境(レンタルサーバー)でテストしようかという矢先の
トラブルで、途方に暮れています。困りました、、、

ともかく、対策を考えて見ます。ありがとうございました。

お礼日時:2008/10/10 00:10

ANo.1です。



なるほど、同様の記述がたくさんあるということですね。
良い方法かわかりませんが、output_bufferingを有効にするという対策もあるかと思います。
    • good
    • 0
この回答へのお礼

UmJammerさん、たびたびのアドバイスありがとうございました。
わたしもちょうど、output_bufferingを有効にするという対策にたどり着いていたところです。
http://go4it.seesaa.net/article/73726670.html

(そういえば、過去にIISで開発時も、この設定をOnにしたような記憶もあるような気がします。)

一応、Onで動作は確認できました。首吊りそうでした(^^;ありがとうございました。

お礼日時:2008/10/10 00:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!