PHPの相対パスと絶対パスについて

採用はこちら

PHPでWebサイトを制作していると、別ファイルを読み込む場面がよくあります。

たとえば、共通のヘッダーやフッターを読み込むとき、設定ファイルを読み込むとき、画像・CSS・JavaScriptを指定するときなどです。

require_once 'config.php';
<img src="images/logo.png" alt="ロゴ">

このようなファイルの場所を示す指定を「パス」と呼びます。

PHPでパスを扱うときに重要なのが、相対パス絶対パスの違いです。

また、PHPでは特に注意したい点があります。

それは、PHPが読み込むファイルパスと、ブラウザが読み込むURLパスは別物だということです。

この違いを理解していないと、次のようなトラブルが起きやすくなります。

Warning: require(config.php): Failed to open stream: No such file or directory

「ファイルはあるはずなのに読み込めない」

「画像が表示されない」

「ローカルでは動いたのに本番サーバーではエラーになる」

このような問題の多くは、パスの指定ミスが原因です。

この記事では、PHPにおける相対パスと絶対パスの違い、__DIR__ を使った安全な書き方、HTMLやCSSとの違い、WordPressでのパス指定まで詳しく解説します。

目次

パスとは

パスとは、ファイルやフォルダの場所を示す住所のようなものです。

たとえば、PHPで別ファイルを読み込む場合は、次のように書きます。

require_once 'config.php';

この 'config.php' がパスです。

画像を表示する場合も、HTMLでは次のようにパスを指定します。

<img src="images/logo.png" alt="ロゴ">

この images/logo.png もパスです。

パスには相対パスと絶対パスがある

パスには大きく分けて、次の2種類があります。

種類意味
相対パスある基準位置から見たファイルの場所
絶対パスルートやURLなど、基準の先頭から完全に指定するパス

ただし、PHPでは「どこを基準にするのか」が重要です。

同じ相対パスでも、PHPで使う場合、HTMLで使う場合、CSSで使う場合では、基準になる場所が変わることがあります。

相対パスとは

相対パスとは、ある基準位置から目的のファイルまでの場所を指定する方法です。

たとえば、以下のようなフォルダ構成があるとします。

project/
├── index.php
├── about.php
├── config.php
├── images/
│   └── logo.png
└── includes/
    └── header.php

index.php から includes/header.php を読み込む場合は、次のように書けます。

require_once 'includes/header.php';

これは、index.php と同じ階層に includes フォルダがあり、その中に header.php がある、という指定です。

また、index.php から images/logo.png をHTMLで表示するなら、次のように書けます。

<img src="images/logo.png" alt="ロゴ">

このように、現在の場所や基準位置から見てファイルの場所を指定するのが相対パスです。

相対パスでよく使う記号

相対パスでは、次のような記号を使います。

書き方意味
./現在のディレクトリ
../1つ上の階層
../../2つ上の階層
folder/file.php現在の場所から見て下の階層
file.php現在の場所にあるファイル

./ は現在のディレクトリを表す

./ は、現在のディレクトリを表します。

require_once './config.php';

これは、現在のディレクトリにある config.php を読み込むという意味です。

多くの場合、次のように ./ を省略しても同じように書けます。

require_once 'config.php';

ただし、PHPでは相対パスの解釈に注意が必要です。

そのため、実務では後述する __DIR__ を使って、より明確にパスを指定することが多いです。

../ は1つ上の階層を表す

../ は、1つ上の階層を表します。

次のような構成を考えてみます。

project/
├── config.php
└── admin/
    └── dashboard.php

admin/dashboard.php から config.php を読み込む場合、dashboard.phpadmin フォルダの中にあります。

そのため、1つ上の project フォルダに戻ってから config.php を指定します。

require_once '../config.php';

../ は「1つ上の階層に戻る」という意味です。

../../ は2つ上の階層を表す

../../ は、2つ上の階層を表します。

次のような構成の場合です。

project/
├── config.php
└── admin/
    └── users/
        └── list.php

admin/users/list.php から config.php を読み込むには、2つ上の階層に戻る必要があります。

require_once '../../config.php';

意味としては、次のようになります。

list.php
↓
users/ から admin/ へ戻る
↓
admin/ から project/ へ戻る
↓
config.php を読み込む

ただし、階層が深くなるほど ../ の数を間違えやすくなります。

そのため、PHPでは次のような書き方の方が安全です。

require_once __DIR__ . '/../../config.php';

この __DIR__ については、後ほど詳しく解説します。

絶対パスとは

絶対パスとは、基準となるルートから目的のファイルまでを完全に指定するパスです。

ただし、PHPやWeb制作で「絶対パス」と言う場合、いくつかの種類があります。

種類主な用途
ファイルシステムの絶対パス/var/www/html/project/config.phpPHPの require / include
Windowsの絶対パスC:/xampp/htdocs/project/config.phpローカル開発環境など
URLの絶対パスhttps://example.com/images/logo.pngブラウザで画像やCSSにアクセスする
ルート相対パス/images/logo.pngWebサイトのドメイン直下を基準にする

ここで特に重要なのは、PHPが使う絶対パスと、ブラウザが使う絶対URLは別物だということです。

PHPで使う絶対パス

PHPで requireinclude を使う場合は、基本的にサーバー上のファイルパスを指定します。

たとえば、Linux系サーバーでは次のようなパスです。

require_once '/var/www/html/project/config.php';

これは、サーバー内部のファイルシステム上にある config.php を指定しています。

Windows環境では、次のようなパスになることもあります。

require_once 'C:/xampp/htdocs/project/config.php';

PHPではWindows環境でも、バックスラッシュ \ よりスラッシュ / を使う書き方がよく使われます。

次のようなWindows形式のパスもあります。

require_once 'C:\xampp\htdocs\project\config.php';

ただし、PHPの文字列内では \ がエスケープ文字として扱われる場合があるため、次のように / を使う方が分かりやすく安全です。

require_once 'C:/xampp/htdocs/project/config.php';

Web上の絶対URL

HTMLで画像やCSSを読み込む場合は、URLとしての絶対パスを使うことがあります。

<img src="https://example.com/images/logo.png" alt="ロゴ">

CSSなら次のようになります。

<link rel="stylesheet" href="https://example.com/css/style.css">

これはブラウザがWeb上でアクセスするためのURLです。

一方、PHPの require で次のようにURLを指定するのは、通常はおすすめしません。

require_once 'https://example.com/includes/header.php';

PHPの設定によってはURL経由で読み込める場合もありますが、通常のWeb制作では避けるべきです。

理由は以下の通りです。

  • 外部通信に依存してしまう
  • 通信エラーで処理が止まる可能性がある
  • セキュリティリスクがある
  • サーバー設定によって動作しないことがある
  • ローカルファイルを読み込むより遅い
  • PHPコードとして意図通りに処理されない場合がある

PHPでファイルを読み込む場合は、URLではなくサーバー上のファイルパスを使うのが基本です。

require_once __DIR__ . '/includes/header.php';

PHPの相対パスで注意すべきこと

PHPの相対パスは、初心者が特につまずきやすいポイントです。

HTMLの感覚で「このファイルから見た場所を書けばよい」と考えると、うまく動かない場合があります。

たとえば、次のような構成があるとします。

project/
├── index.php
├── config.php
└── includes/
    └── header.php

index.phpheader.php を読み込みます。

require_once 'includes/header.php';

そして、includes/header.php の中に次のように書いたとします。

require_once 'config.php';

この場合、一見すると header.phpconfig.php は別の階層にあるため、次のように書くべきに見えます。

require_once '../config.php';

しかし、PHPの相対パスは、実行時のカレントディレクトリや include_path の影響を受けることがあります。

そのため、header.php の中で書いた相対パスが、必ずしも header.php 自身の場所を基準に解釈されるとは限りません。

このような理由から、PHPで別ファイルを読み込む場合は、単なる相対パスよりも __DIR__ を使う書き方が安全です。

PHPでは相対パスの基準が分かりにくくなることがある

PHPで相対パスが分かりにくくなる理由は、コードを書いているファイルの場所と、実際に処理が開始されるファイルの場所が異なることがあるためです。

たとえば、index.php から includes/header.php を読み込んだ場合、header.php の中の処理も index.php の実行の流れの中で動きます。

そのため、単純に「今書いているファイルから見た相対パス」と考えると、想定と違う結果になることがあります。

require_once 'config.php';

このような書き方は短くて便利ですが、ファイル構成が複雑になると読み込み先が分かりにくくなる場合があります。

そこで、ファイル自身の場所を基準にできる __DIR__ を使うと、パス指定が安定します。

__DIR__とは

__DIR__ は、PHPでよく使われるマジック定数です。

__DIR__ は、そのPHPファイルが置かれているディレクトリの絶対パスを表します。

たとえば、次の場所にファイルがあるとします。

/var/www/html/project/index.php

この index.php の中で次のように書きます。

echo __DIR__;

すると、次のような値が出力されます。

/var/www/html/project

別の例も見てみましょう。

/var/www/html/project/includes/header.php

この header.php の中で、

echo __DIR__;

と書くと、次のようになります。

/var/www/html/project/includes

つまり、__DIR__ は「現在実行しているPHPファイル」ではなく、そのコードが書かれているファイル自身のディレクトリを指します。

この性質があるため、PHPでファイルを読み込むときに非常に便利です。

__DIR__を使った安全な読み込み方

次のような構成があるとします。

project/
├── index.php
├── config.php
└── includes/
    └── header.php

index.php から config.php を読み込む場合は、次のように書けます。

require_once __DIR__ . '/config.php';

__DIR__index.php のあるディレクトリを表すため、実際には次のようなパスになります。

/var/www/html/project/config.php

次に、includes/header.php から config.php を読み込む場合を考えます。

header.phpincludes フォルダの中にあるため、1つ上の階層に戻る必要があります。

require_once __DIR__ . '/../config.php';

このように書けば、header.php 自身の場所を基準にして、確実に config.php を指定できます。

__DIR__を使うメリット

__DIR__ を使う最大のメリットは、パスの基準を明確にできることです。

単純に次のように書くと、

require_once 'config.php';

どこを基準に config.php を探すのかが、状況によって分かりにくくなることがあります。

一方、次のように書けば、

require_once __DIR__ . '/config.php';

「このPHPファイルがある場所にある config.php を読み込む」という意味が明確になります。

階層が違う場合も同じです。

require_once __DIR__ . '/../config.php';

このように書けば、「このPHPファイルがある場所から1つ上に戻って config.php を読み込む」という意味になります。

実務では、PHPの requireinclude では、できるだけ __DIR__ を使うのがおすすめです。

__FILE__との違い

PHPには __DIR__ と似たものに __FILE__ があります。

定数意味
__DIR__現在のファイルがあるディレクトリの絶対パス
__FILE__現在のファイル自身の絶対パス

たとえば、次の場所にファイルがあるとします。

/var/www/html/project/includes/header.php

このファイル内で次のように書きます。

echo __DIR__;
echo __FILE__;

結果は次のようになります。

/var/www/html/project/includes
/var/www/html/project/includes/header.php

昔は次のような書き方もよく使われていました。

dirname(__FILE__) . '/config.php'

現在は、次のように __DIR__ を使えば同じ意味になります。

__DIR__ . '/config.php'

そのため、基本的には __DIR__ を使えば問題ありません。

requireincludeの違い

PHPで別ファイルを読み込むときは、主に以下を使います。

include 'file.php';
require 'file.php';
include_once 'file.php';
require_once 'file.php';

それぞれの違いは次の通りです。

書き方特徴
include読み込みに失敗しても警告を出して処理を続ける
require読み込みに失敗すると致命的エラーになり処理が止まる
include_once同じファイルを1回だけ読み込む
require_once同じファイルを1回だけ読み込む。失敗すると処理が止まる

必須ファイルにはrequire_onceを使うことが多い

設定ファイル、共通関数、クラスファイルなど、必ず必要なファイルには require_once を使うことが多いです。

require_once __DIR__ . '/config.php';

一方、読み込めなくてもページ全体を止めたくない部品には include を使う場合もあります。

include __DIR__ . '/parts/banner.php';

ただし、通常のサイト制作では、共通ファイルの読み込みには require_once を使う場面が多いです。

PHPの/から始まるパスに注意

HTMLでは、次のような書き方をよく使います。

<img src="/images/logo.png" alt="ロゴ">

これはWebサイトのドメイン直下を基準にしたパスです。

たとえば、サイトURLが次の場合、

https://example.com

次のHTMLは、

<img src="/images/logo.png" alt="ロゴ">

以下のURLを指します。

https://example.com/images/logo.png

しかし、PHPで次のように書くと意味がまったく変わります。

require_once '/includes/header.php';

PHPの場合、これはWebサイトのルートではなく、サーバーのファイルシステムのルートを意味します。

Linux系サーバーなら、次のような場所を探しに行きます。

/includes/header.php

これは通常、Webサイトの公開ディレクトリではありません。

つまり、HTMLの /images/logo.png と、PHPの /includes/header.php は、基準が違います。

書き方解釈するもの意味
<img src="/images/logo.png">ブラウザドメイン直下の /images/logo.png
require '/includes/header.php'PHPサーバーのファイルシステムルートの /includes/header.php

PHPでWebサイト内のファイルを読み込みたい場合は、次のように書く方が安全です。

require_once __DIR__ . '/includes/header.php';

PHPのパスとHTMLのパスは別物

PHPのパス指定で最も重要なのは、PHPが使うパスブラウザが使うパスを分けて考えることです。

PHPの requireinclude は、サーバー上のファイルを読み込むために使います。

require_once __DIR__ . '/includes/header.php';

一方、HTMLの img srclink hrefscript src は、ブラウザがWeb上のファイルにアクセスするために使います。

<img src="/images/logo.png" alt="ロゴ">
<link rel="stylesheet" href="/css/style.css">
<script src="/js/app.js"></script>

この2つは、まったく別のものです。

用途解釈する側
PHPファイルの読み込みサーバーのPHP__DIR__ . '/includes/header.php'
画像の表示ブラウザ/images/logo.png
CSSの読み込みブラウザ/css/style.css
JavaScriptの読み込みブラウザ/js/app.js
リンク先の指定ブラウザ/contact/

HTMLにはサーバー内部のパスを書かない

たとえば、次のようなHTMLは不適切です。

<img src="/var/www/html/project/images/logo.png" alt="ロゴ">

これはサーバー内部のファイルパスであり、ブラウザから直接アクセスするURLではありません。

画像を表示したい場合は、ブラウザから見えるURLを書く必要があります。

<img src="/images/logo.png" alt="ロゴ">

または、ベースURLを定義している場合は次のように書きます。

<img src="<?php echo BASE_URL; ?>/images/logo.png" alt="ロゴ">

HTMLで使うパスの種類

HTMLで画像やCSSを指定する場合、主に次のようなパスがあります。

種類意味
相対URLimages/logo.png現在のURL階層を基準にする
ルート相対パス/images/logo.pngドメイン直下を基準にする
絶対URLhttps://example.com/images/logo.png完全なURLで指定する

相対URLは現在のURL階層を基準にする

たとえば、現在のページが次の場合を考えます。

https://example.com/news/detail.php

このページで次のように書くと、

<img src="images/logo.png" alt="ロゴ">

ブラウザは以下のURLを探しに行きます。

https://example.com/news/images/logo.png

つまり、現在表示しているページの階層を基準にします。

ルート相対パスはドメイン直下を基準にする

一方、次のように書くと、

<img src="/images/logo.png" alt="ロゴ">

ブラウザは以下のURLを探しに行きます。

https://example.com/images/logo.png

このように、HTMLでは現在のページURLを基準にするのか、ドメイン直下を基準にするのかで、参照先が変わります。

サブディレクトリで運用する場合の注意点

Webサイトをサブディレクトリで運用する場合は、ルート相対パスに注意が必要です。

たとえば、サイトのURLが次のような場合です。

https://example.com/my-site/

このとき、HTMLで次のように書くと、

<img src="/images/logo.png" alt="ロゴ">

ブラウザは次のURLを探しに行きます。

https://example.com/images/logo.png

しかし、本当は次のURLを見てほしいかもしれません。

https://example.com/my-site/images/logo.png

この場合、次のようにサブディレクトリ名を含める必要があります。

<img src="/my-site/images/logo.png" alt="ロゴ">

BASE_URLを定義すると管理しやすい

サブディレクトリ運用では、PHPで BASE_URL を定義しておくと管理しやすくなります。

define('BASE_URL', '/my-site');

HTML出力では次のように使えます。

<img src="<?php echo BASE_URL; ?>/images/logo.png" alt="ロゴ">

出力結果は次のようになります。

<img src="/my-site/images/logo.png" alt="ロゴ">

開発環境と本番環境でURLが変わる場合は、設定ファイルや環境変数で BASE_URL を管理すると便利です。

BASE_PATHBASE_URLを分けて考える

PHPでパスを管理するときは、BASE_PATHBASE_URL を分けると理解しやすくなります。

define('BASE_PATH', __DIR__);
define('BASE_URL', 'https://example.com');

BASE_PATHはPHPが使うサーバー上のパス

BASE_PATH は、PHPがサーバー上のファイルを読み込むためのパスです。

require_once BASE_PATH . '/includes/header.php';

BASE_PATH の値は、たとえば次のようなサーバー内部のパスになります。

/var/www/html/project

BASE_URLはブラウザが使うURL

BASE_URL は、ブラウザがWeb上のファイルにアクセスするためのURLです。

<img src="<?php echo BASE_URL; ?>/images/logo.png" alt="ロゴ">

BASE_URL の値は、たとえば次のようなURLになります。

https://example.com

この2つを混同しないことが大切です。

定数用途
BASE_PATHPHPがサーバー上のファイルを扱う/var/www/html/project
BASE_URLブラウザがWeb上でアクセスするhttps://example.com

BASE_PATHBASE_URLを間違える例

たとえば、次のように書くのは正しくありません。

require_once BASE_URL . '/includes/header.php';

BASE_URL はURLなので、PHPのローカルファイル読み込みには向いていません。

逆に、次のようにHTMLへサーバーパスを出力するのも不適切です。

<img src="<?php echo BASE_PATH; ?>/images/logo.png" alt="ロゴ">

BASE_PATH はサーバー内部のパスなので、ブラウザからアクセスする画像URLとしては使えません。

小規模サイトでの実践例

次のような小規模サイトを例にします。

site/
├── index.php
├── about.php
├── contact.php
├── config.php
├── includes/
│   ├── header.php
│   └── footer.php
├── css/
│   └── style.css
└── images/
    └── logo.png

トップページで共通ファイルを読み込む例

index.php では次のように書けます。

<?php
require_once __DIR__ . '/config.php';
require_once __DIR__ . '/includes/header.php';
?>

<main>
  <h1>トップページ</h1>
  <img src="/images/logo.png" alt="ロゴ">
</main>

<?php
require_once __DIR__ . '/includes/footer.php';
?>

この中で、

require_once __DIR__ . '/includes/header.php';

はPHPがサーバー上のファイルを読み込むための指定です。

一方、

<img src="/images/logo.png" alt="ロゴ">

はブラウザが画像にアクセスするための指定です。

同じ「パス」でも、使われる場所と解釈する側が違います。

下層ページでの実践例

次のような構成を考えます。

site/
├── config.php
├── includes/
│   ├── header.php
│   └── footer.php
└── news/
    └── detail.php

下層ページから設定ファイルを読み込む例

news/detail.php から config.php を読み込む場合は、次のように書けます。

require_once __DIR__ . '/../config.php';

__DIR__news フォルダを指します。

/site/news

そこから ../ で1つ上に戻るため、次のファイルを読み込めます。

/site/config.php

下層ページから共通ヘッダーを読み込む例

共通ヘッダーを読み込む場合は、次のように書けます。

require_once __DIR__ . '/../includes/header.php';

下層ページでは ../ が必要になる場面が増えますが、__DIR__ を組み合わせることで基準が明確になります。

CSS内の画像パスにも注意

HTMLだけでなく、CSS内の画像パスにも注意が必要です。

CSSファイル内で url() を使って画像を指定する場合、そのパスは基本的にCSSファイルの場所を基準に解釈されます。

たとえば、次のような構成です。

site/
├── css/
│   └── style.css
└── images/
    └── bg.png

CSSではCSSファイルの場所が基準になる

css/style.css から見て、images/bg.png は1つ上の階層にあります。

そのため、CSSでは次のように書きます。

background-image: url("../images/bg.png");

HTMLファイルの場所ではなく、CSSファイルの場所を基準に考えるのがポイントです。

DOCUMENT_ROOTとは

PHPでは、$_SERVER['DOCUMENT_ROOT'] を使ってパスを指定する方法もあります。

require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php';

DOCUMENT_ROOT は、Webサーバーが公開しているドキュメントルートを表します。

たとえば、次のような値になることがあります。

/var/www/html

この場合、

require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php';

は、次のファイルを読み込む意味になります。

/var/www/html/includes/header.php

DOCUMENT_ROOTを使うときの注意点

DOCUMENT_ROOT は便利ですが、注意点もあります。

  • サーバー設定によって値が変わる
  • CLIでPHPを実行すると期待通りに使えないことがある
  • サブディレクトリ運用ではプロジェクトルートと一致しないことがある
  • WordPressやフレームワークでは専用の関数や仕組みを使う方がよい場合がある

そのため、一般的なPHPファイルの読み込みでは、__DIR__ を使った方が分かりやすく安定しやすいです。

require_once __DIR__ . '/includes/header.php';

include_pathとは

PHPには include_path という設定があります。

include_path は、includerequire でファイルを探すときに参照される検索パスです。

たとえば、次のように書いた場合、

require_once 'config.php';

PHPは現在の実行環境や include_path などをもとに、config.php を探します。

include_pathは確認できる

現在の include_path は次のように確認できます。

echo get_include_path();

ただし、初心者のうちは include_path に頼るより、__DIR__ を使って明示的に書く方が安全です。

require_once __DIR__ . '/config.php';

この方が、どのファイルを読み込もうとしているのか分かりやすくなります。

realpath()でパスを確認する

PHPには realpath() という関数もあります。

realpath() は、../ などを解決した実際の絶対パスを返します。

echo realpath(__DIR__ . '/../config.php');

たとえば、次のようなパスがあった場合、

__DIR__ . '/../config.php'

realpath() を使うと、実際の絶対パスとして確認できます。

/var/www/html/project/config.php

realpath()は存在しないファイルではfalseを返す

ただし、realpath() は対象のファイルやディレクトリが存在しない場合、false を返します。

そのため、次のように確認して使うと安全です。

$path = realpath(__DIR__ . '/../config.php');

if ($path === false) {
    exit('config.php が見つかりません');
}

require_once $path;

パスのトラブルを調査するときに便利です。

ファイルが存在するか確認する方法

パスが合っているか確認したい場合は、file_exists() を使えます。

$path = __DIR__ . '/../config.php';

if (file_exists($path)) {
    echo 'ファイルは存在します';
} else {
    echo 'ファイルが見つかりません: ' . $path;
}

これにより、PHPが実際にどのパスを見に行っているのか確認できます。

本番環境ではサーバーパスを表示しない

本番環境でサーバー内部のパスを画面に表示するのは避けるべきです。

サーバー構成が外部に見えてしまうため、セキュリティ上よくありません。

file_exists()realpath() を使った確認は、開発環境やデバッグ時だけにしましょう。

よくあるエラーと原因

PHPのパス指定でよくあるエラーに、次のようなものがあります。

Warning: require(config.php): Failed to open stream: No such file or directory

これは、指定した場所にファイルが見つからないという意味です。

パス指定でエラーが出る主な原因

主な原因は次の通りです。

原因内容
../ の数が違う上の階層に戻る数を間違えている
基準ディレクトリの認識が違うPHPの相対パスの基準を誤解している
ファイル名が違うconfig.phpConfig.php など
ファイルが存在しないアップロード漏れや配置ミス
権限がないファイルを読み込む権限がない
サーバー環境が違うローカルと本番でパスが異なる

このようなエラーを避けるためにも、PHPのファイル読み込みでは次のように書くのがおすすめです。

require_once __DIR__ . '/config.php';

大文字・小文字にも注意

ローカル環境がWindowsの場合、ファイル名の大文字・小文字を厳密に区別しないことがあります。

たとえば、実際のファイル名が次の場合、

config.php

コードで次のように書いても、Windowsでは動く場合があります。

require_once 'Config.php';

しかし、Linux系の本番サーバーでは、大文字・小文字が区別されることが一般的です。

そのため、本番環境ではエラーになる可能性があります。

No such file or directory

ファイル名は大文字・小文字まで正確に合わせる

ファイル名とコード内のパスは、大文字・小文字まで正確に合わせましょう。

たとえば、実際のファイル名が config.php なら、コードでも次のように書きます。

require_once 'config.php';

Config.phpCONFIG.phpconfig.PHP のような表記ゆれは避けるべきです。

WordPressの場合のパス指定

WordPressでは、通常のPHPサイトとは少し書き方が異なります。

WordPressには、テーマディレクトリのパスやURLを取得するための関数が用意されています。

親テーマのサーバー上のパスを取得する場合は、次を使います。

get_template_directory()

親テーマのURLを取得する場合は、次を使います。

get_template_directory_uri()

子テーマを使っている場合は、次の関数も重要です。

get_stylesheet_directory()
get_stylesheet_directory_uri()

WordPressのパス用関数とURL用関数

整理すると、次のようになります。

用途親テーマ基準子テーマ基準
サーバー上のパスget_template_directory()get_stylesheet_directory()
URLget_template_directory_uri()get_stylesheet_directory_uri()

たとえば、親テーマ内のPHPファイルを読み込みたい場合は、次のように書きます。

require_once get_template_directory() . '/inc/custom.php';

子テーマ内のPHPファイルを読み込みたい場合は、次のように書きます。

require_once get_stylesheet_directory() . '/inc/custom.php';

子テーマ内の画像を表示したい場合は、URLを取得する関数を使います。

<img src="<?php echo esc_url(get_stylesheet_directory_uri() . '/images/logo.png'); ?>" alt="ロゴ">

WordPressでも、考え方は同じです。

PHPでファイルを読み込む場合は「サーバー上のパス」。

画像やCSSを表示する場合は「ブラウザからアクセスできるURL」。

この2つを分けて考えることが大切です。

実務でおすすめの書き方

通常のPHPサイトで、別ファイルを読み込む場合は、次の書き方がおすすめです。

require_once __DIR__ . '/config.php';

1つ上の階層にあるファイルを読み込む場合は、次のようにします。

require_once __DIR__ . '/../config.php';

共通ファイルを読み込む場合は、次のように書けます。

require_once __DIR__ . '/includes/header.php';
require_once __DIR__ . '/includes/footer.php';

ファイル数が増えたらプロジェクトルートを定義する

ファイル数が増えてきたら、プロジェクトルートを定義しておくと便利です。

define('BASE_PATH', __DIR__);

そして、次のように使います。

require_once BASE_PATH . '/includes/header.php';

ただし、BASE_PATH を使うには、先にそれを定義したファイルを読み込んでおく必要があります。

パス指定の使い分けまとめ

PHPのパス指定では、次のように考えると整理しやすくなります。

場面使うパス
PHPで設定ファイルを読み込むサーバー上のファイルパス__DIR__ . '/config.php'
PHPで共通パーツを読み込むサーバー上のファイルパス__DIR__ . '/includes/header.php'
HTMLで画像を表示するブラウザ用URL/images/logo.png
HTMLでCSSを読み込むブラウザ用URL/css/style.css
CSS内で背景画像を指定するCSSファイル基準のURLurl("../images/bg.png")
WordPressでテーマ内PHPを読み込むテーマのサーバーパスget_template_directory()
WordPressでテーマ内画像を表示するテーマのURLget_template_directory_uri()

PHPでファイルを読み込む場合

PHPでファイルを読み込むなら、基本は次の形です。

require_once __DIR__ . '/ファイル名.php';

HTMLで画像やCSSを指定する場合

HTMLで画像やCSSを指定するなら、ブラウザから見えるパスを使います。

<img src="/images/logo.png" alt="ロゴ">
<link rel="stylesheet" href="/css/style.css">

まとめ

PHPの相対パスと絶対パスを理解するうえで最も重要なのは、PHP側のパスブラウザ側のURLを分けて考えることです。

PHPの requireinclude は、サーバー上のファイルを読み込むために使います。

require_once __DIR__ . '/config.php';

一方、HTMLの img srclink href は、ブラウザがWeb上のファイルにアクセスするために使います。

<img src="/images/logo.png" alt="ロゴ">
<link rel="stylesheet" href="/css/style.css">

同じ「パス」という言葉でも、誰が解釈するのかによって意味が変わります。

特にPHPでは、相対パスが実行時のカレントディレクトリや include_path の影響を受けることがあります。

そのため、別ファイルを読み込むときは、__DIR__ を使ってファイル自身の場所を基準にするのがおすすめです。

require_once __DIR__ . '/config.php';

階層が違う場合は、次のように書きます。

require_once __DIR__ . '/../config.php';

また、HTMLやCSSで使う画像・CSS・JavaScriptのパスは、PHPのファイルパスではなく、ブラウザからアクセスできるURLとして指定する必要があります。

PHPのパス指定で迷ったときは、まず次の2つを確認しましょう。

確認すること判断ポイント
PHPが読み込むファイルか__DIR__ を使ってサーバー上のパスを指定する
ブラウザが読み込む画像・CSS・JSか/images/logo.png などWeb上のURLを指定する

この違いを理解しておけば、PHPのパス指定によるエラーを大きく減らせます。

以上、PHPの相対パスと絶対パスについてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次