【PHP】require_once関数でエラーになった件
↑tatum.phpはCelticsフォルダの中にあります。
上記ような構成のアプリケーションがあり、実行ファイルをindex.phpとする。
それぞれのコードの内容
index.php
<?php require_once('Lakers/lebron.php'); hello(); ?>
lebron.php
<?php require_once('../Celtics/tatum.php');
tatum.php
<?php function hello() { echo 'hello'; } ?>
上記コードでindex.phpを実行するとエラーとなる。
エラーとなる原因はrequire_onceのパスの指定の仕方とPHPの仕様にある。
PHPは実行ファイル(index.php)のディレクトリ位置を基準として、requireを行うのでlebron.phpのrequire_onceのパスは
testing_php/../Celtics/tatum.php となり、当然そのディレクトリにはtatum.phpが存在しないのでエラーとなる。
解決方法
__DIR__ を使う。PHPでは__DIR__というマジカル定数が用意されています。
PHP: マジック定数 - Manual
PHPドキュメントによると
include の中で使用すると、 インクルードされるファイルの存在するディレクトリを返します。
つまり実行ファイルの影響を受けず、パスを指定することができる。
例えばlebron.phpの中で__dir__は
/var/www/html/Lakers
となり /から始まっているパスなので絶対パスになっていることが分かる。
なのでlebron.phpを以下のように変えればエラーが発生せずに実行を行うことができる。
<?php require_once(__DIR__.'/../Celtics/tatum.php');