複数のページからなるサイトで、あるページから他のPHPファイルで
一律の処理をしたあと、またもとのページに戻る処理をしたいと
思います。下記方法で実現はできないのでしょうか。
A.php
---------
<?
!!do something!!
$referer = $_SERVER[’HTTP_REFERER’];
if referer = "" {
header("Location: (TOPのURL)");
} else {
header("Location: $referer");
?>
-------
あるいは、元のページのリンクを
<a href="A.php?url=back.php>
みたいにして、
header("Location: $url");
するとか・・・(ページが100ページぐらいあるので
back.phpの名前はPHPで自動的にとらないと難しいですが。)
そんなことは実現できますでしょうか?
PHPのソースも教えてもらえると助かります。
※そのPHPは外部ファイルにする必要があります。
PHPで取得できるリファラは1ページ前だけなので、
処理を終えた先のページから見ると2つ前になってしまい取得でないと思います。
処理をするページ(以下ではregister.php)にてリファラを取得し、
form タグ内に hidden フィールドを設けて戻るURLを受け渡すというのはどうでしょうか。
register.php
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <p>ここで何らかの処理をします</p> <?php $ref = $_SERVER['HTTP_REFERER']; ?> <p>リファラである <?= $ref ?> も変数として同時に送信します</p> <form method="post" action="refresh.php"> <input name="ref" type="hidden" value="<?= $ref ?>"> <input type="submit" value="送信"> </form> </body> </html>
refresh.php
<html> <head><meta http-equiv="refresh" content="1;URL=<?= $ref ?>"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> もとのファイル <a href="<?= $ref ?>"><?= $ref ?></a> へ1秒後にジャンプします </body> </html>
という2つのファイルを同じディレクトリに配置し、
任意のURLから register.php にリンクを張ってアクセスしたあと、
「送信」ボタンを押すともとのURLにリダイレクトされます。
このような方法ではいかがでしょうか。
> refererの方はうまくどうしてもうまくいかなかったので
php.ini の設定、php のバージョンによって異なるけど、いちばんありがちなのは $_ENV['HTTP_REFERER'] じゃないかなぁ。getEnv("HTTP_REFERER") なら確実かも。
すいません。実は下のコメントにあるように解決しています。
ただ、普通は
$ref = $_SERVER['HTTP_REFERER'];
でリファラ取得できますよね。。私の場合はできなかったものですから・・・。
ウィルスソフトも切って実験してみたのですが、だめでした。
ちなみに質問文の!!DO SOMETHING!!ですが、クッキー関係の処理
なので、何かを出力することはありませんので、上記だとregiresh.phpを
使うことなく実現できるような気がしています。
いずれにしても他の人も見ているようですので、新たな考えを
ありがとうございました。<(m_m)>
引き続きb-windさんの回答お待ちしています。