【PHP】でファイルを読み込むときのパスの書き方とマジック定数 __DIR__と__FILE__の使い方

PHP

PHPでファイルを読み込むときパスを使いますが、パスの取り扱いにはいろいろと気をつけることがあるので、パスの書き方について紹介します。
また、マジック定数 __DIR__と__FILE__の使い方を紹介します。

相対パスでの指定方法

<?php
// 同じディレクトリへの相対パス
  require 'file1.php';
  require './file1.php';

  // 一つ上の階層への相対パス
  require '../file1.php';
  

上のケースでは、実行中のファイルを起点としてパスを決める相対パスで指定していることになります。
上のファイル名のみや、./の場合、同じディレクトリ内にあるファイルを指定しているということになります。
../の場合は一つ上の階層への相対パスになります。

require()の使い方は、【PHP】ファイルの分割方法とrequire、include、require_once、function_existsの使い方を参照してみてください。

絶対パスとマジック定数 __DIR__と__FILE__の使い方

絶対パスの場合マジック定数と合わせて使うことが多いです。
マジック定数は、

<?php
// 実行中のファイルが格納されているフォルダまでの絶対パス
  echo __DIR__;
// 実行中のファイルまでの絶対パス
  echo __FILE__;

  // 絶対パスで指定
  require __DIR__ . '/file1.php';

__DIR__は実行中のファイルが格納されているフォルダまでの絶対パスを取得できます。
__FILE__は実行中のファイルまでの絶対パスを取得できます。

dirnameの使い方

<?php
// 2階層上のファイルまでのパスを取得
  echo dirname(__FILE__, 2);

dirname()を使うことで、第二引数に階層を指定して、ディレクトリまでのパスを指定することができます。
上の場合では、2階層上のフォルダまでのパスを取得できます。
デフォルト引数には1が設定されているので、実行中のファイルのあるフォルダまでのパスの場合は省略できます。

パスの/(スラッシュ)と\(バックスラッシュ)の使い分け

windowsの場合は、/(スラッシュ)と\(バックスラッシュ)は使い分ける必要はありませんが、MACやなどのUNIX系システムでは、\(バックスラッシュ)は、エスケープシーケンスとして認識されてしまう場合があるため、パスは基本的には/(スラッシュ)を使う必要があります。
UNIX系では\(バックスラッシュ)は動かないことがあるので、基本的にはどちらでも使える/(スラッシュ)を使っておけばいいです。

require()の挙動、"と’は使い分け

<?php
require __DIR__ . '/file1.php';
  // requireでは絶対パスの中に相対パスで指定できる
  require __DIR__ . './file1.php';

  // 相対パスで階層を上がることもできるけど、先頭にスラッシュがある場合のみ
  require __DIR__ . '/../file1.php';
  require __DIR__ . '../file1.php'; //こちらはエラーになる

requireでは絶対パスの中に相対パスが混在していてもよしなにパスを変換して正しく動作します。
相対パスで階層を上がることもできますが、先頭にスラッシュがある場合のみ有効になります。

PHP

Posted by devsakaso