PHPで複数ファイルを組み合わせて開発する際に欠かせないのが、require
や include
などの「ファイル読み込み構文」です。
この記事では、それぞれの特徴や違い、使い分けのポイントをわかりやすく解説します。
目次
require とは?
require
は、指定したファイルを読み込む構文です。もし読み込むファイルが存在しなかった場合、**致命的なエラー(fatal error)**を発生させ、スクリプトの実行を停止します。
require 'header.php';
使うべき場面
- 読み込むファイルが 必須 な場合(ヘッダーや共通処理など)
- ファイルがない状態で処理を続行できないケース
require_once とは?
require_once
は、require
と同じようにファイルを読み込みますが、同じファイルを2回以上読み込まないようにする機能が付いています。重複読み込みを防ぎたい場合に便利です。
require_once 'header.php';
使うべき場面
- 同じスクリプト内で、同じファイルが複数回読み込まれる可能性がある場合
- クラスや関数を定義しているファイル(多重定義によるエラー防止)
include とは?
include
は、指定したファイルを読み込みますが、ファイルが存在しない場合でも 警告(warning)を出して処理を続行します。
include 'header.php';
使うべき場面
- 読み込むファイルが あれば使うが、なくてもスクリプトの実行を止めたくない場合
- オプション的に表示するバナーやパーツなど
include_once とは?
include_once
は、include
と同様にファイルを読み込み、さらに 同じファイルを2回以上読み込まないようにする機能を持ちます。
include_once 'header.php';
違いのまとめ
構文 | ファイルがない場合の挙動 | 同じファイルの多重読み込み防止 |
---|---|---|
require | エラーで処理を停止 | なし |
require_once | エラーで処理を停止 | あり |
include | 警告を出し処理は継続 | なし |
include_once | 警告を出し処理は継続 | あり |
require と include の使い分けのコツ
- ファイルが必須の場合は require / require_once を使う
- ファイルがオプション的な役割で、なくても問題ない場合は include / include_once を使う
- 同じファイルを複数箇所で読み込む可能性がある場合は require_once / include_once を使い、重複定義を防ぐ
以下は記事に追記できる「__DIR__を使ったパス指定方法」の解説です。パスの管理を安全にするためのポイントを含めています。
DIR を使ったパス指定方法
PHPでファイルを読み込む際、相対パスだとスクリプトを呼び出す場所によって正しく動作しないことがあります。
そんなときに便利なのが __DIR__
定数 です。__DIR__
は 現在のファイルが存在するディレクトリの絶対パスを返すため、確実に目的のファイルを読み込むことができます。
例:DIR を使った require
require __DIR__ . '/header.php';
このように書くことで、スクリプトがどこから呼ばれても、現在のスクリプトと同じディレクトリにある header.php
を確実に読み込めます。
DIR を使うメリット
- スクリプトの実行場所に依存しないため、CLIやサーバー環境でも安定して動作する
- サイト全体で同じ基準のパスを使えるため、保守性が上がる
- ディレクトリ階層が深くなっても相対パスを数え直す必要がない
サブディレクトリにあるファイルを読み込む場合
例えば、現在のスクリプトと同じディレクトリにある includes/config.php
を読み込みたい場合は以下のように記述します。
require __DIR__ . '/includes/config.php';
ドキュメントルートからの絶対パスで管理したい場合
大規模なプロジェクトでは、ルートディレクトリのパスを定数化して共通化するのもおすすめです。
define('BASE_PATH', __DIR__);
require BASE_PATH . '/includes/config.php';
このようにすることで、全ファイルで BASE_PATH
を基準にファイルパスを統一できます。
まとめ
PHPのファイル読み込みは、コードの分割や再利用性を高めるうえで重要なテクニックです。
ファイルの有無で処理を止めるかどうか、同じファイルが複数回読み込まれる可能性があるかを考慮して、最適な構文を選びましょう。