【PHP】require / include / require_once / include_once 関数の違い

PHP のファイルを読み込む関数は
- require
- require_once
- include
- include_once
の4種類があります。
この記事ではそれぞれの違いを紹介していきます。
使用するファイル
ここでは sample フォルダに
- index.php
- hello.php
という2つのファイルを用意しています。
index.php
<!DOCTYPE html>
<html>
<head>
<title>TEST</title>
</head>
<body>
<p>--------------------------------</p>
<?php /* ここにコードを書きます。 */ ?>
<p>--------------------------------</p>
</body>
</html>
hello.php
<h1>こんにちは</h1>
once がある・ないの違い
once(ワンス)は英語で「一度、一回」という意味なので、ファイルの読み込みを一度だけ行う場合に使います。
require_once 関数を使って、index.php で hello.php を読み込んでみます。

ブラウザで index.php を開くと「こんにちは」と表示されます。

同じコードを2回書いてみましょう。

ブラウザで確認してみると、hello.php は一度しか読み込まれていません。

次に require_once を require に変更してみます。

今度は hello.php が2回読み込まれています。

このようにファイルの読み込みを1度だけ行うのが require_once / include_once 関数です。
require と include の違い
require と include の違いは、ファイルの読み込みに失敗した場合に「処理を続けるか・止めるか」です。
間違ったパスのファイルを require_once 関数で読み込んでみます。

ブラウザを開くと Fatal error(致命的なエラー)が出てしまい、require_once 以降のコードが実行されません。

今度は include_once 関数を使って、間違ったパスのファイルを読み込んでみます。

Warning(警告)は出ていますが、その後の HTML は表示されています。

このようにファイルの読み込みに失敗したときに
- 処理を中断するのが require / require_once
- 処理を続けるのが include / include_once
です。
まとめ
ファイルの読み込みに失敗したときに
- 処理をストップする場合は require
- 処理を続ける場合は include
を使います。
ファイルの読み込みを一度だけ行う場合は _once を付けます。