【PHP】require_onceで読み込むファイルを絶対パスで指定する
ファイルから別ファイルの読み込みを行うrequire_once文で、
対象ファイルを絶対パスで指定する方法をメモします。
環境:PHP 7.4.4
相対パスでファイルを読み込む例
(以下のようなファイルの構成を例に)
├── config │ └── config.php ├── index.php └── src └── execute.php
「index.php」(実行ファイル)
<?php require_once 'src/execute.php';
src/execute.phpを相対パス指定で読み込む。
「src/execute.php」
<?php require_once 'config/config.php'; print NOW;
config/config.phpを相対パス指定で読み込む。
(注意)
require_once文で指定するファイル(読み込み先)のパスは
require_once文を記述したファイルからのパスではなく、
実行ファイルからのパスを記述する。
「config/config.php」
<?php define('NOW', date('Y-m-d:H:i:s'));
実行ファイルを変更する
実行ファイルを「index.php」から「src/main.php」へ変更する。
. ├── config │ └── config.php ├── index.php └── src ├── execute.php └── main.php
「src/main.php」
index.phpと同様、execute.phpを相対パス指定で読み込む。
<?php require_once 'execute.php';
相対パスの問題点
実行ファイルをindex.phpから、src/main.phpへ変更した為、
src/execute.php内からconfig/config.phpを読み込むrequire_once文の相対パス指定を変更する必要がある。
(変更前) index.phpからのパス
config/config.php
(変更後)src/main.phpからのパス
<?php require_once '../config/config.php'; print NOW;
ファイルの指定を絶対パスへ変更する
index.php、 src/main.phpのどちらからでも実行出来るように、
src/execute.php内のrequire_once文の記述を以下のように絶対パス指定へ変更する。
「src/execute.php」
<?php require_once __DIR__ . '/../config/config.php'; print NOW;
「require_once __DIR__ . ’/読み込むファイルのパス’」
require_onceを記述したファイル自身の※絶対パスを指定し、
その後ろに読み込む対象ファイルを、自身から見たパスで記述する。
※定数 __DIR__ は自身(記述したファイル)が存在しているディレクトリ名を絶対パスで返す。
このような記述に変更する事で実行ファイルのパスの影響を受けずに必要なファイルを読み込む事が出来ます。
実行ファイルも同様に絶対パスでの記述に変更しておきます。
index.php
<?php require_once __DIR__ . '/src/execute.php';
src/main.php
<?php require_once __DIR__ . '/execute.php';
require_onceでの読み込みはファイル構成の変更や拡張性のし易さを考慮して
相対パスよりも絶対パスでの記述の方が良いと思います。