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.php は admin フォルダの中にあります。
そのため、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.php | PHPの require / include |
| Windowsの絶対パス | C:/xampp/htdocs/project/config.php | ローカル開発環境など |
| URLの絶対パス | https://example.com/images/logo.png | ブラウザで画像やCSSにアクセスする |
| ルート相対パス | /images/logo.png | Webサイトのドメイン直下を基準にする |
ここで特に重要なのは、PHPが使う絶対パスと、ブラウザが使う絶対URLは別物だということです。
PHPで使う絶対パス
PHPで require や include を使う場合は、基本的にサーバー上のファイルパスを指定します。
たとえば、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.php で header.php を読み込みます。
require_once 'includes/header.php';
そして、includes/header.php の中に次のように書いたとします。
require_once 'config.php';
この場合、一見すると header.php と config.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.php は includes フォルダの中にあるため、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の require や include では、できるだけ __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__ を使えば問題ありません。
requireとincludeの違い
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の require や include は、サーバー上のファイルを読み込むために使います。
require_once __DIR__ . '/includes/header.php';
一方、HTMLの img src、link href、script 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を指定する場合、主に次のようなパスがあります。
| 種類 | 例 | 意味 |
|---|---|---|
| 相対URL | images/logo.png | 現在のURL階層を基準にする |
| ルート相対パス | /images/logo.png | ドメイン直下を基準にする |
| 絶対URL | https://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_PATHとBASE_URLを分けて考える
PHPでパスを管理するときは、BASE_PATH と BASE_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_PATH | PHPがサーバー上のファイルを扱う | /var/www/html/project |
BASE_URL | ブラウザがWeb上でアクセスする | https://example.com |
BASE_PATHとBASE_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 は、include や require でファイルを探すときに参照される検索パスです。
たとえば、次のように書いた場合、
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.php と Config.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.php、CONFIG.php、config.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() |
| URL | get_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ファイル基準のURL | url("../images/bg.png") |
| WordPressでテーマ内PHPを読み込む | テーマのサーバーパス | get_template_directory() |
| WordPressでテーマ内画像を表示する | テーマのURL | get_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の require や include は、サーバー上のファイルを読み込むために使います。
require_once __DIR__ . '/config.php';
一方、HTMLの img src や link 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の相対パスと絶対パスについてでした。
最後までお読みいただき、ありがとうございました。









