現在、config.phpにて、初期URLとして
<?php
define(SITE_URL, "http://www.i-ive.com/mobile/");
?>
と記載して、menu.phpで、
<a href="<?php echo SITE_URL; ?>" accesskey="7">HOME</a>
で、サイトのURLを入力しています。
このconfig.phpで記載した初期URLを、いちいち入力しなくても自動で判別できるようなので、その方法を探しています。
どなたか教えていただけないでしょうか。
No.4ベストアンサー
- 回答日時:
現在のURLが、「
http://mydomain12345.jp/mydir/」で、表示しているスクリプトが「index.php」のとき、$_SERVER配列の中身は、それぞれ
$_SERVER[SERVER_NAME] :「mydomain12345.jp」
$_SERVER[PHP_SELF] :「/mydomain12345.jp/mydir/index.php」
$_SERVER[SCRIPT_NAME] :「/mydomain12345.jp/mydir/index.php」
となります。
一番やってはいけないのは、$_SERVER[PHP_SELF]をそのまま出力することです。セキュリティ的に脆弱性があります。
また、$_SERVER[PHP_SELF]よりも$_SERVER[SCRIPT_NAME]の方が安全とされてます。
htmlentities(*** , ENT_QUOTES)を通して、サニタイズするとよいでしょう。
入力時よりも出力時にサニタイズすることが大事です。
以下のコードでは、念のため、入力時と出力時の両方でサニタイズしました。
ま、サニタイズして、得することはあっても損することはないので。
以下がコードですが、ここでは「index.php」を取り除きした。
$script_name = htmlentities($_SERVER[SCRIPT_NAME] , ENT_QUOTES);
$i = strrpos($script_name , '/');
$script_name = substr($script_name , 0 , $i + 1);
で、$script_nameの中身は、「/mydomain12345.jp/mydir/」となります。
$url_name = 'http://' . htmlentities($_SERVER[SERVER_NAME] , ENT_QUOTES) . $script_name;
で、$url_nameの中身は、「http://mydomain12345.jp/mydir/」となります。
<a href="<?php echo htmlentities($url_name , ENT_QUOTES); ?>" accesskey="7">HOME</a>
とするとよいと思います(最低限、出力時には必ずサニタイズする)。
「index.php」をつけたい場合は、
$i = strrpos($script_name , '/');
$script_name = substr($script_name , 0 , $i + 1);
の2行はいりません。
No.7
- 回答日時:
No.3,4,5です。
重複してしまってすみませんでした。間違いがありました。
$_SERVER[SERVER_NAME] :「mydomain12345.jp」
$_SERVER[PHP_SELF] :「/mydomain12345.jp/mydir/index.php」
$_SERVER[SCRIPT_NAME] :「/mydomain12345.jp/mydir/index.php」
ではなくて、
$_SERVER[SERVER_NAME] :「mydomain12345.jp」
$_SERVER[PHP_SELF] :「/mydir/index.php」
$_SERVER[SCRIPT_NAME] :「/mydir/index.php」
でした。
No.6
- 回答日時:
No.3,4です。
重複してしまってすみませんでした。間違いがありました。
$_SERVER[SERVER_NAME] :「mydomain12345.jp」
$_SERVER[PHP_SELF] :「/mydomain12345.jp/mydir/index.php」
$_SERVER[SCRIPT_NAME] :「/mydomain12345.jp/mydir/index.php」
ではなくて、
$_SERVER[SERVER_NAME] :「mydomain12345.jp」
$_SERVER[PHP_SELF] :「/mydir/index.php」
$_SERVER[SCRIPT_NAME] :「/mydir/index.php」
でした。
No.5
- 回答日時:
ANo.4です。
$_SERVER[SERVER_NAME] :「mydomain12345.jp」
$_SERVER[PHP_SELF] :「/mydomain12345.jp/mydir/index.php」
$_SERVER[SCRIPT_NAME] :「/mydomain12345.jp/mydir/index.php」
ではなくて、
$_SERVER[SERVER_NAME] :「mydomain12345.jp」
$_SERVER[PHP_SELF] :「/mydomain12345.jp/mydir/index.php」
$_SERVER[SCRIPT_NAME] :「/mydomain12345.jp/mydir/index.php」
でした。
No.3
- 回答日時:
現在のURLが、「
http://mydomain12345.jp/mydir/」で、表示しているスクリプトが「index.php」のとき、$_SERVER配列の中身は、それぞれ
$_SERVER[SERVER_NAME] :「mydomain12345.jp」
$_SERVER[PHP_SELF] :「/mydomain12345.jp/mydir/index.php」
$_SERVER[SCRIPT_NAME] :「/mydomain12345.jp/mydir/index.php」
となります。
一番やってはいけないのは、$_SERVER[PHP_SELF]をそのまま出力することです。セキュリティ的に脆弱性があります。
また、$_SERVER[PHP_SELF]よりも$_SERVER[SCRIPT_NAME]の方が安全とされてます。
htmlentities(*** , ENT_QUOTES)を通して、サニタイズするとよいでしょう。
入力時よりも出力時にサニタイズすることが大事です。
以下のコードでは、念のため、入力時と出力時の両方でサニタイズしました。
ま、サニタイズして、得することはあっても損することはないので。
以下がコードですが、ここでは「index.php」を表示させないために、「index.php」を取り除きした。
$script_name = htmlentities($_SERVER[SCRIPT_NAME] , ENT_QUOTES);
$i = strrpos($script_name , '/');
$script_name = substr($script_name , 0 , $i + 1);
で、$script_nameの中身は、「/mydomain12345.jp/mydir/」となります。
$url_name = 'http://' . htmlentities($_SERVER[SERVER_NAME] , ENT_QUOTES) . $script_name;
で、$url_nameの中身は、「http://mydomain12345.jp/mydir/」となります。
<a href="<?php echo htmlentities($url_name , ENT_QUOTES); ?>" accesskey="7">HOME</a>
とするとよいと思います(最低限、出力時には必ずサニタイズする)。
ファイル名(ここではindex.php)をつけたい場合は、
$i = strrpos($script_name , '/');
$script_name = substr($script_name , 0 , $i + 1);
の2行はいりません。
No.2
- 回答日時:
相対URLを使用せずに、絶対URLを使うという目的を考えると、複数の、しかも階層がバラバラのPHPから同一のmenu.phpを呼び出されているのだと思います。
過去に同じような事をしようとしていました。
その際には、サイトトップ位置がサーバ名のみの場合でも(独自ドメインのような場合)、フォルダがある場合でもキチンと自動判別するのは不可能である、defineするしかないとあきらめました。
ローカルでのテスト時と、サーバにアップする際、いちいち書き変えなければいけないのを避けたいという事であれば、一応、以下のような方法は考えられます。
if ($_SERVER['SERVER_NAME']=='localhost'){
define(SITE_URL, 'http://localhost/hogehoge/mobile/');
}else{
define(SITE_URL, 'http://hogehoge/mobile/');
}
仰るとおり、階層がバラバラのものですが、ローカルのPHP実行環境は方法がいまいち分からずにいますので、環境を整えれた時に使用してみます。
わざわざ、ご回答ありがとうございました。
No.1
- 回答日時:
ヒント : $_SERVER[SERVER_NAME];
ヒント : $_SERVER[SCRIPT_NAME];
ヒントありがとうございます。
悩んだ末、
define(SITE_URL, $_SERVER[SERVER_NAME]);
で、惜しいとこまでいけました。
後一歩、http://と/mobile/を付け加える方法が分からず、この式に直接打ち込める方法などを検索してみています。
課題としていい問題になりましたので、できるのかできないのかを引き続き探してみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
require_onceで読み込む場合、...
-
フリーペーパーR25が置いて...
-
【初歩?】functionの使い方
-
ファイルの遷移がうまく行われ...
-
サイトパスに使用しているURLを...
-
PHPのif文でその処理を途中で抜...
-
.phpと.incファイルの違いはな...
-
CSV出力にHTMLが入ってしまう
-
FTPコマンドでディレクトリごと...
-
PHPでネットワークドライブのop...
-
onedrive にexcelファイルをア...
-
MkDir関数
-
phpの中でphpを書けないか
-
【file_exists】ファイルが存在...
-
バッチを用いたフォルダの自動移動
-
MAPI コンポーネントを使ったメ...
-
トランザクションが原因?DBに...
-
webroot以外の画像の表示
-
Cronで同じ処理を複数同時に実...
-
php で C言語のdefineマクロの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ZendFramework 環境設定
-
ロリポップでSmartyのtpl読み込...
-
CakePHPの表示エラーについて
-
【初歩?】functionの使い方
-
require_onceで読み込む場合、...
-
pearライブラリのインクルード...
-
ブラウザに表示させたフォルダ...
-
(初級)require等で共通ファイ...
-
PHP Linux から Windowsへの移行
-
Ethnaの設定について
-
特定のディレクトリだけ、phpを...
-
<FORM action="./" ついて
-
ファイルのパスについて
-
__FILE__をHTMLタグ内で使う
-
ゼンド フレイムワークがどうや...
-
ラミネート加工について
-
index.phpに入るには、どうすれ...
-
相対パスでrequireはできないの...
-
[PHP] 任意のDNSでIPアドレスを...
-
PHPファイルが、そのまま見えて...
おすすめ情報