PHPで外部ファイルを読み込む以下4つの使い方と、それぞれの違いをご紹介します。
include
include_once
require
require_once
なんとなくrequire_once()
で引っ張ってきていましたが、両者には違いもあります。
まずはそれぞれの特長を把握し、使うシーンによって両者を適切に使い分ける方法も身につけましょう。
目次
include文
include文は指定されたファイルを読み込みます。
includeの使い方
index.php
でinc.html
に記述された予約ボタンのHTMLコードを読み込んで、内容を表示させるサンプルです。
inc.html
1 2 |
// HTMLコードを記述 <a href="yoyaku.html">春の宴会コースご予約はこちら!</a> |
index.php
1 2 |
// include文でinc.htmlを読み込む <?php include('inc.html'); ?> |
index.phpを表示
春の宴会コースの予約リンクが読み込まれました。
外部ファイルは.txt
や.php
などの、html以外のテキストファイルも読み込めます。
include文は何回でも使い回せる
先ほどの宴会コースの予約リンクですが、ページで複数箇所に同じリンクを設置する際にinclude文で使い回すと便利です。
inc.html
1 2 |
// HTMLコードを記述 <a href="yoyaku.html">春の宴会コースご予約はこちら!</a> |
index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<h2>当店おすすめコース</h2> <p>当店おすすめのお得な飲放題付きコースをご紹介します。</p> // include文でinc.htmlを読み込む <?php include('inc.html'); ?> <p>春の宴会コースは、たけのこの刺身や菜の花の天ぷらなど春ならではの味覚を味わえます!</p> // include文でinc.htmlを読み込む <?php include('inc.html'); ?> <p>飲み放題は生ビールも付いて、今なら3時間まで延長!</p> // include文でinc.htmlを読み込む <?php include('inc.html'); ?> |
index.phpを表示
当店おすすめコース当店おすすめのお得な飲放題付きコースをご紹介します。
春の宴会コースご予約はこちら!
春の宴会コースは、たけのこの刺身や菜の花の天ぷらなど春ならではの味覚を味わえます!
春の宴会コースご予約はこちら!
飲み放題は生ビールも付いて、今なら3時間まで延長!
春の宴会コースご予約はこちら!
上記のように、include文で同じ外部ファイルを何回も使い回しました。
保守性を考えて外部ファイル化で読み込もう
上記サンプル程度の分量ならわざわざ外部ファイル化する必要もないですが、100ページを超えるような大規模サイトだとどうでしょう?
例えばリンクの文言を修正することになった場合、全ページを手作業で修正するのは大変な作業ですね。
こういったケース以外にも、サイドバーやフッター、グローバルメニューなど、何度も使い回すHTMLパーツは外部ファイル化し、include文で読み込むようにすれば、外部ファイルを1箇所修正するだけで全ページに反映してくれるので、保守性もアップします。
include_once
わたくしは使ったことはありませんが、include_once()
というのもあります。
これは1回しか読み込めないinclude文なので、include()
のように複数回使い回すことはできません。
inc.html
1 2 |
// HTMLコードを記述 <a href="yoyaku.html">春の宴会コースご予約はこちら!</a> |
index.php
1 2 3 4 |
// include_once文でinc.htmlを読み込む <?php include_once('inc.html'); ?> // include_once文でinc.htmlを再度読み込む <?php include_once('inc.html'); ?> |
index.phpを表示
春の宴会コースの予約リンクは1回しか読み込まれませんでした。
一回しか読み込む必要がない関数などは、エラー時に処理が中断するrequire_once()
を使うのが一般的なため、あまり使い途はないように思います。
include文のエラー
include文のエラーはWarning
を発行し、処理は中断しません。
require文はFatalError
を発行するため、その時点で処理が中断します。
inc.html
1 2 |
// HTMLコードを記述 <a href="yoyaku.html">春の宴会コースご予約はこちら!</a> |
index.php
1 2 3 4 5 6 7 |
<?php // include文で存在しないファイルを読み込む include('unknown.html'); // テキストを表示させる echo 'こんなお得なコースは100年に一度あるかないか〜〜〜〜〜〜!!!'; ?> |
index.phpを表示
Warning: include(unknown.html): failed to open stream: No such file or directory in …
Warning: include(): Failed opening ‘unknown.html’ for inclusion (include_path=’.…
こんなお得なコースは100年に一度あるかないか〜〜〜〜〜〜!!!
「そんなファイルはないよ!」とWarning
から始まるエラーが表示されましたが、その後のecho
はちゃんと表示されています。
エラーは出ますがその後の処理も続行するため、処理が続行しても大して問題ではないHTMLやテキストなどのパーツはinclude()で読み込ませるのが一般的です。
require文
require文はエラー時に FatalError
(致命的なエラー)を発行するため、処理が中断します。
requireの使い方
わたくしは使ったことはありませんが、require文はinclude()
同様、何回でも外部ファイルを読み込むことができます。
inc.html
1 2 |
// HTMLコードを記述 <a href="yoyaku.html">春の宴会コースご予約はこちら!</a> |
index.php
1 2 3 4 |
// require文でinc.htmlを読み込む <?php require('inc.html'); ?> // require文でinc.htmlを再度読み込む <?php require('inc.html'); ?> |
index.phpを表示
春の宴会コースご予約はこちら!
春の宴会コースご予約はこちら!
上記のようにrequire文で同じ外部ファイルを2回読み込みました。
ただ、エラー以外はinclude()
と同じ動作なので、あまり使い途はないように思います。
require_onceの使い方
require_once()
はエラー時に処理を中断しなければならないような、関数などの重要なプログラムで使われます。
関数は1回読み込めば使えることが多く、また関数を何回も呼び出すとその都度処理が上書きされ、バグの原因になったりもするので、include文ではなくrequire_once()
を使うのが一般的です。
それでは、echo
などの出力の際、セキュリティ上エンティティ化は必須となっていますが、その関数のサンプルを見てみましょう。
functions.php
1 2 3 4 5 6 |
<?php // HTMLエンティティ化の関数 function h($s) { return htmlspecialchars($s, ENT_QUOTES, "UTF-8"); } |
index.php
1 2 3 4 5 6 7 |
<?php // require_onceで functions.phpを読み込む require_once('functions.php'); // エンティティ化されて出力 echo h('エンティティ化されました。'); |
セキュリティ対策でよく使う関数です。
詳しくは以下記事をご覧ください。
参考:PHPのhtmlspecialcharsでのHTMLエンティティ化と、一文字に簡略化方法
require文のエラー
require文のエラーはFatalError
を発行し、処理がエラー箇所で中断します。
include文はWarning
を発行するため、処理は中断しません。
inc.html
1 2 |
// HTMLコードを記述 <a href="yoyaku.html">春の宴会コースご予約はこちら!</a> |
index.php
1 2 3 4 5 6 7 |
<?php // require文で存在しないファイルを読み込む require('unknown.html'); // テキストを表示させる echo 'こんなお得なコースは100年に一度あるかないか〜〜〜〜〜〜!!!'; ?> |
index.phpを表示
Fatal error: require(): Failed opening required ‘unknown.html’ (include_path=’.…
「そんなファイルはないよ!」とFaralError
から始まるエラーが表示されて処理が中断、その後のecho
も表示されません。
エラーが出た時点で処理が中断するため、必ず読み込ませないと重大なエラーが発生するような重要な関数などを読み込む際に使います。
関数は一般的にrequire_once()
で読み込みますね。
include文とrequire文の比較
include()
とrequire()
についてご紹介しましたが、以下のように使い分けると良いでしょう。
include系の比較一覧表
制御構造 | 用途 | エラー時の処理の中断 | 読み込める回数 |
---|---|---|---|
include | HTMLやテキストなどの読み込み | 中断しない | 複数回 |
include_once | 基本使わない | 中断しない | 1回のみ |
require | 基本使わない | 中断する | 複数回 |
require_once | 関数などの重要な読み込み | 中断する | 1回のみ |
エラーのレベル
ちなみに、下記のようにエラーのレベルによって処理が変わります。
エラーレベル | 説明 | 処理の中断 |
---|---|---|
ParseError | 構文エラー | 中断する |
FatalError | 致命的なエラー | 中断する |
Warning | 警告 | 中断しない |
Notice | 注意 | 中断しない |
定数の外部ファイル化
関数だけではなく、よく使う定数をまとめた外部ファイルconfig.php
も併せて設定することが多いでしょう。
詳しくは以下の記事で参照ください。
参考:PHPの定数を使いこなす