デジットさんの生活便利サイトトップへ デジットさんの相対アドレス取得(PHP)

トップページ > ホームページ作成 > 相対アドレス取得

PHPを利用して、自分の置かれたファイルのディレクトリから指定されたファイルまでの相対アドレスを自動的に取得します。リンクしたいファイルのパスがわかれば、自動的にリンクがつくれます。

相対アドレスとは

ホームページは、絶対アドレスで読み込まれます。たとえば、このページは「http://digit-01/ownpage/php_relative_add.html」が絶対アドレスとなります。自分でホームページを作成する場合は、絶対アドレスで指定していると融通が利きませんので、相対アドレスで指定したほうが便利です。相対アドレスで指定すると、デバックやメンテが楽に出来ます。
相対アドレスで、他のページ(ファイル)を指定する場合には、自分のページから相対的にそのページが何処にあるかを指定します。例えば、ディレクトリがこのファイルと同じ「ownpage」内に「aa.html」があったとすると、そのまま「aa.html」を指定します。または、「./aa.html」でも、同じです。一つ上のディレクトリ(この場合は、digit-01のルートディレクトリ)に「bb.html」があった場合は、「../bb.html」と指定します。 「../」は、フォルダーの階層を一つあげることを意味します。自分より下の階層のファイルは、例えば「ownpage」の中のディレクトリー「dd」にファイル「cc.html」がある場合は、「dd/cc.html」または「./dd/cc.html」と指定します。
また、自分のディレクトリ内のファイルは「aa.html」で指定できましたが、ルートディレクトリに戻り「../ownpage/aa.html」と、指定してもかまいません。「dd/cc.html」も「../ownpage/dd/cc.html」と指定できます。

相対アドレスを取得する方法

PHPには、サーバー関連の情報を得るための「$_SERVER[]」という関数があります。自分のファイルのディレクトリパスをチェックするには、「$_SERVER['PHP_SELF']」を使えばできます。自分のパスから自分の相対アドレスを求め、リンクしたいファイルのディレクトリパスを相対アドレスに変換します。

相対アドレスを取得するサンプルリスト

サンプルリストは次のとおりです。
ファイル名は、「drctry_pth.php」としてこのファイルと同ディレクトリに置いてあると想定してください。(実際にはおいてありませんので、ご注意ください。)
「http://digit-01/life/life_bank.html」が、相対アドレスに変換してリンクしたいディレクトリパスとファイルとしました。今回は、ルートディレクトリからのパスを最初に"/"を付けない形「$lnk_path = "life/life_bank.html"」で定義してみました。
「dirname()」関数を使い、「$_SERVER['PHP_SELF']」で求めた自分のディレクトリパスからディレクトリ名だけ取り出します。この例なら「/ownpaget」となります。ルーとディレクトリの場合は、名前無しに「/」だけになります。
「substr_count( dirname($file_name) , "/" )」で"/"の出現回数を調べます。「$cnt」が出現回数です。基本的には"/"の出現回数が、自分のルートディレクトリからのディレクトリの階層数になります。ただし、自分のファイルがルートディレクトリにあった場合も「dirname($file_name)」はファイル名無しで"/"だけ返しますので、"/"だけだったら「$relativ_path = ($cnt == 0) ? ("./") : str_repeat( "../", $cnt ) ;」で、0回に設定しなおします。
「$cnt」がルートディレクトリからの階層数になりましたので、「str_repeat( "../", $cnt )」で階層の分だけ"../"を繰り返し、その後に「$lnk_path = "life/life_bank.html"」をつなげれば、相対アドレスの完成です。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>PHP ディレクトリパス</title>
</head>
<body>
<?php
$file_name = $_SERVER['PHP_SELF'];//自分ディレクトリパス
$lnk_path = "life/life_bank.html";//最初に"/"を付けない
$lnk_name = "ネット銀行";
//表示
echo "<p>このファイルの置いてあるディレクトリ<br/>";
echo "相対アドレス ファイル: " .$file_name. "<br/>";
echo "ディレクトリ名: " . dirname($file_name) . "</p>";
$cnt = substr_count( dirname($file_name) , "/" ); //"/"の出現回数
$cnt = ( !strcmp(dirname($file_name), "/" ) ) ? (0) : $cnt ;//"/"だけだったら0
$relativ_path = ($cnt == 0) ? ("./") : str_repeat( "../", $cnt ) ;
$relativ_path .= $lnk_path ;
echo "<p>" .$lnk_path. "の" .$lnk_name. "へリンク<br/>";
echo "<a href=\"" .$relativ_path. "\" >" .$lnk_name. "</a></p>";
?>
</body>
</html>

相対アドレスを取得するサンプルの結果

上のサンプルリストの実行結果です。このサンプルは、どの階層のディレクトリにおいても大丈夫です。リンクしたいページのリストを作れば、ポップアップメニューなどのナビゲーションの共通化が可能になります。

このファイルの置いてあるディレクトリ
相対アドレス ファイル: /ownpage/drctry_pth.php
ディレクトリ名: /ownpage

life/life_bank.htmlのネット銀行へリンク
ネット銀行

これで、自分の置かれたファイルからの相対アドレスを、自動的に取得することが出来ました。
レンタルサーバーのロリポップでは、動作確認できています。

ホームページを公開するレンタルサーバーは、 ロリポップ! がお薦め、 PHP5を使うならPHP5から選ぼう。

関連ページ

ホームページ作成

PHP5を使う

アフィリエイトをする

PHPの使い方

デジットさんのホームページ入門に移行中

スポンサード リンク

Amazon.co.jpアソシエイト:
PHP&プログラミング

売れている順 新刊順

:%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%20php :php2_  :5

とことん!ホームページホームページ入門役立つサイトデジットさんのリストラ日記仮福真琴の精神科医はうそだらけ

2005-2010 Copyright © Digit-01 All Rights Reserved.