プロが教える店舗&オフィスのセキュリティ対策術

PHPで条件分岐により別ページにリダイレクトさせたいと思ってます。

<?php

if ($hoge) {
header("Location: hoge.html");
exit;
}


で、これで$hogeに値を引き継がせてXPのIEでみると、真っ白なページにリダイレクトしてしまします。
ただ、hoge.htmlに遷移はしているらしく、ソースの表示をすると正しいファイルが読み込まれていますし、更新をすると表示されます。
全然意味がわかりません。ちなみにNNだとちゃんと表示されているみたいです。
ということはブラウザの問題なのでしょうか?
確実にリダイレクトさせる方法はないのでしょうか?

#混乱するかも知れませんが、いろいろいじってみていたら、上記PHPのファイルを書き換えるとちゃんと動くこともあるようです…??

A 回答 (6件)

locationに関しては絶対URLということで他の方の回答通りだと思います。



PHPに関してですが、サーバーに組み込まないで外部プログラムとして立ち上げることが可能なのでCGIとしても利用出来ます。
ただし、サーバーに組み込む方が多いので、CGIとして利用出来るということはあまり知られていないかもしれません。
(でも、日本PHPユーザー会のサイトにはトップページにCGIとして使えると書いてあるんですけどね・・・)

参考URL:http://www.php.gr.jp/
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

> PHPに関してですが、サーバーに組み込まないで外部プログラムとして立ち上げることが可能なのでCGIとしても利用出来ます。

知らなかったです!
でもすごく意味なさそうな雰囲気ですね。
コマンドラインでPHPを実行するのは結構使えますが、CGIとしては要らないですよね…

お礼日時:2003/03/13 13:33

> リダイレクト先のページはEUCなのですが、ブラウザの設定をS-JISにすると画面が真っ白



思いあたることが一点だけあるのを忘れてました。
ブラウザのバージョンによるのかも分かりませんが、以下のことを確認してください。

<TITLE>~</TITLE>が日本語で書かれていて、かつ
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=EUC-JP">
よりも前にありませんか?

その場合、文字コードの認識がうまくいかない場合があります。
META行を先に記述すればうまくいくようです。
現にPHPの日本語マニュアルがそのようになっており、真っ白になるページがいくつか存在します。
因みに、ブラウザはIE5.01です。

#マニュアルを修正して欲しい...
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。
お礼が遅くなり、申し訳ございませんでした。

最近解決することができましたのでご報告申し上げます。

やはり文字コードの問題だったらしく、
(1)ファイルがEUCで書かれている
(2)METAでEUC-JPを指定している
(3)HTMLの頭に文字コードが判別しやすい漢字を埋め込んでおく
ということを全て行っていても、何故かブラウザがShift_JISとして表示してしまっていたのが原因でした。
#でも結局どのような環境でなるのかは不明でしたが…

そこでリダイレクト先のページのヘッダーを明示的にEUC-JPと出力するように変更したところ、文字化けは解消されました(ようです)。

ご協力ありがとうございました。
色々勉強になりました。
またどうぞよろしくお願いいたします。

お礼日時:2003/05/09 10:40

LocationのURI指定は絶対URIのみです。


相対ではNN6.0などからして動かないように思います。

他の部分の問題かどうかは判断材料が少ないのでよくわかりません。
少しづつ切り分けていくしか無いように思います。
(半角スペース、改行文字等がひとつ余分に混じってもアウトです)


#似ていますがPHPはCGIではありません。
#サーバが外部(CGI)プログラムを呼ぶのがCGIです。
#PHPはサーバ内処理ですので、CGIが呼ばれません。
#PHPがCGIとなると、ASPもCGIになってしまいますよね。
#本題と関係ありませんけれどm(_ _)m
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
お礼が遅れて申し訳ございませんでした。

絶対指定は気をつけます。
PHPマニュアルでも注意書きでそのように書いてありました。

原因は恐らく文字コードらしいことが判明しました。
(取りあえずご報告です)

> #似ていますがPHPはCGIではありません。

色々調べましたがやっぱりそのようですね。
大変勉強になりました。
まとめると、実行したときにプロセスが立ち上がるかどうかがCGIかどうか、という理解でよろしいでしょうか?

お礼日時:2003/03/13 13:31

 何も表示されないのだから文字コードの問題でもないでしょうし...



強制的にリフレッシュさせるように変更するとどうなりますか?

$id = time();
header("Location: hoge.html?id=$id");

>ヘッダの出力ですが、質問の中のPHPでheaderの記述の前に何ら出力を行ってません。
念のため確認しますが、空行もありませんよね。<-詳細はマニュアル参照。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
お礼が遅れて申し訳ございませんでした。

空行もありません。不思議です。。

> 何も表示されないのだから文字コードの問題でもないでしょうし..

実は原因はこれかな?とか思い始めてます。
リダイレクト先のページはEUCなのですが、ブラウザの設定をS-JISにすると画面が真っ白になりました。
まだ完全に確認は取れてないし、どうしたら回避できるのかはわからないですが、この線で検討していきたいと思います。
#それにしてもヘッダーで文字コードを強制的に指定することってできるのだろうか…?

お礼日時:2003/03/13 13:26

リダイレクト先のHTML出力の前の段階、


言い換えればヘッダの出力に問題があるのではないでしょうか。


#役に立たないレスですみません。
#ところで、PHPってCGIじゃないような(^^;
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ヘッダの出力ですが、質問の中のPHPでheaderの記述の前に何ら出力を行ってません。requre、includeもありません。
パラメータを$_GETで取っている記述があるだけです。
なぜでしょう…?

#ところで、PHPってCGIじゃないような(^^;
あれ…?
確かにサーバー側でプロセスは新たに立ち上がらないですが、サーバーサイドで実行結果を返すのでPHPもCGIではないですか?
これも質問しないといけないかな?(笑)

補足ですが、この状態になるのを確認したブラウザはIE6です(XPだからあたりまえか…)。NN4.7ではきちんとページが表示されることも確認しています。

お礼日時:2003/03/09 14:00

hoge.htmlを絶対URIにしてみてはどうでしょう?


また、値を引き継がせたいのであれば、htmlではなくてhoge.php?hoge=$hogeにしないといけないと思うのですが…。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
絶対URIにしましたが変化ありませんでした。

> また、値を引き継がせたいのであれば、htmlではなくてhoge.php?hoge=$hogeにしないといけないと思うのですが…。

いや、値を引き継がせたいわけではないんです。
値$hogeをフラグにして静的なHTML(hoge.html)にリダイレクトさせたいだけなんです…。

お礼日時:2003/03/09 13:53

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