絶対パスと相対パスの違い
パスとは、HTMLやPHPなどのプログラミングにおいて、外部のファイルなどのディレクトリ *1を指します。ファイルの場所の指定には、2通りの方法があり「絶対パス」 と「相対パス」と呼ばれます。
この「絶対パス」 と「相対パス」のそれぞれの意味と違い、さらには「絶対パス」 と「相対パス」のどちらを使うほうが良いのかを説明します。
*1 ディレクトリとフォルダはほぼ同じ意味です。詳しくはこちら。
絶対パスとは
どの階層から見ても同じ場所を示すことができるルートの絶対位置を示します。
URLで指定する場合
http://ドメイン名/ディレクトリ名/ファイル名
ルートディレクトリからの位置を指定する場合
/ドメイン名/ディレクトリ名/ファイル名
相対パスとは
現在のディレクトリからの相対的な位置を示します。
指定方法
同じディレクトリ内のファイル | ファイル名 |
同じディレクトリ内の別ディレクトリ内のファイル | ディレクトリ名/ファイル名 |
1つ上の階層にあるファイル | ../ファイル名 |
サンプル
以下のようなディレクトリを例とします。
www/ ┣ images/ ┃ ┗photo.jpg ┣style.css ┗index.html
このindex.htmlからstyle.cssと、imagesディレクトリ以下のphoto.jpgを相対パスで指定する場合は以下のようになります。
同じディレクトリ内のファイルを指定する
style.css
同じディレクトリ内の別ディレクトリ内のファイルを指定する
images/photo.jpg
絶対パスと相対パスどちらがいいのか
基本的に、絶対パスで指定するほうが良いです。以下で、その理由を説明します。
理由1:パスの書き方を統一できる
絶対パスの場合、どの階層のどのファイルからも同じパスでファイルを指定できます。ですが、相対パスの場合は、ファイル毎にパスを変えないといけない場合があるので煩雑になります。
理由2:可読性が下がる
同じディレクトリ内の場合は良いのですが、上の階層のファイルを指定する場合、「../../../ファイル名」などとなり、把握しにくくなります。
安全なパスの指定方法
HTMLなどの場合
HTMLなどの場合は、自分のサイト内のファイルをURLで指定するとドメイン変更時やHTTPS化した時にパスを書き換えるのが面倒になります。
そのため、絶対パスで以下のように指定すると良いでしょう。
「http://uxmilk.jp/css/sample.css」を、この記事から指定する場合は以下のようになります。
/css/sample.css
PHPなどプログラムの場合
PHPでライブラリなどを読み込む場合、予期せぬエラーを避けるためdirname(__FILE__)などを使うようにしましょう。