PHPのincludeとrequireの使い方と違いを比較

  • このエントリーをはてなブックマークに追加
  • Pocket

スポンサードリンク

PHPで外部ファイルを読み込む以下4つの使い方と、それぞれの違いをご紹介します。

  1. include
  2. include_once
  3. require
  4. require_once

なんとなくrequire_once()で引っ張ってきていましたが、両者には違いもあります。

まずはそれぞれの特長を把握し、使うシーンによって両者を適切に使い分ける方法も身につけましょう。

 

include文

include文は指定されたファイルを読み込みます。

includeの使い方

index.phpinc.htmlに記述された予約ボタンのHTMLコードを読み込んで、内容を表示させるサンプルです。

inc.html

index.php

index.phpを表示

春の宴会コースご予約はこちら!

春の宴会コースの予約リンクが読み込まれました。

外部ファイルは.txt.phpなどの、html以外のテキストファイルも読み込めます。

include文は何回でも使い回せる

先ほどの宴会コースの予約リンクですが、ページで複数箇所に同じリンクを設置する際にinclude文で使い回すと便利です。

inc.html

index.php

index.phpを表示

当店おすすめコース当店おすすめのお得な飲放題付きコースをご紹介します。
春の宴会コースご予約はこちら!
春の宴会コースは、たけのこの刺身や菜の花の天ぷらなど春ならではの味覚を味わえます!
春の宴会コースご予約はこちら!
飲み放題は生ビールも付いて、今なら3時間まで延長!
春の宴会コースご予約はこちら!

上記のように、include文で同じ外部ファイルを何回も使い回しました。

保守性を考えて外部ファイル化で読み込もう

上記サンプル程度の分量ならわざわざ外部ファイル化する必要もないですが、100ページを超えるような大規模サイトだとどうでしょう?

例えばリンクの文言を修正することになった場合、全ページを手作業で修正するのは大変な作業ですね。

こういったケース以外にも、サイドバーやフッター、グローバルメニューなど、何度も使い回すHTMLパーツは外部ファイル化し、include文で読み込むようにすれば、外部ファイルを1箇所修正するだけで全ページに反映してくれるので、保守性もアップします。

include_once

わたくしは使ったことはありませんが、include_once()というのもあります。

これは1回しか読み込めないinclude文なので、include()のように複数回使い回すことはできません。

inc.html

index.php

index.phpを表示

春の宴会コースご予約はこちら!

春の宴会コースの予約リンクは1回しか読み込まれませんでした。

一回しか読み込む必要がない関数などは、エラー時に処理が中断するrequire_once()を使うのが一般的なため、あまり使い途はないように思います。

include文のエラー

include文のエラーはWarningを発行し、処理は中断しません。

require文はFatalErrorを発行するため、その時点で処理が中断します。

inc.html

index.php

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

index.php

index.phpを表示

春の宴会コースご予約はこちら!
春の宴会コースご予約はこちら!

上記のようにrequire文で同じ外部ファイルを2回読み込みました。

ただ、エラー以外はinclude()と同じ動作なので、あまり使い途はないように思います。

require_onceの使い方

require_once()はエラー時に処理を中断しなければならないような、関数などの重要なプログラムで使われます。

関数は1回読み込めば使えることが多く、また関数を何回も呼び出すとその都度処理が上書きされ、バグの原因になったりもするので、include文ではなくrequire_once()を使うのが一般的です。

 

それでは、echoなどの出力の際、セキュリティ上エンティティ化は必須となっていますが、その関数のサンプルを見てみましょう。

functions.php

index.php

セキュリティ対策でよく使う関数です。

詳しくは以下記事をご覧ください。

参考:PHPのhtmlspecialcharsでのHTMLエンティティ化と、一文字に簡略化方法

require文のエラー

require文のエラーはFatalErrorを発行し、処理がエラー箇所で中断します。

include文はWarningを発行するため、処理は中断しません。

inc.html

index.php

index.phpを表示

Fatal error: require(): Failed opening required ‘unknown.html’ (include_path=’.…

「そんなファイルはないよ!」とFaralErrorから始まるエラーが表示されて処理が中断、その後のechoも表示されません。

エラーが出た時点で処理が中断するため、必ず読み込ませないと重大なエラーが発生するような重要な関数などを読み込む際に使います。

関数は一般的にrequire_once()で読み込みますね。

include文とrequire文の比較

include()require()についてご紹介しましたが、以下のように使い分けると良いでしょう。

include系の比較一覧表

制御構造用途エラー時の処理の中断読み込める回数
includeHTMLやテキストなどの読み込み中断しない複数回
include_once基本使わない中断しない1回のみ
require基本使わない中断する複数回
require_once関数などの重要な読み込み中断する1回のみ

エラーのレベル

ちなみに、下記のようにエラーのレベルによって処理が変わります。

エラーレベル説明処理の中断
ParseError構文エラー中断する
FatalError致命的なエラー中断する
Warning警告中断しない
Notice注意中断しない

定数の外部ファイル化

関数だけではなく、よく使う定数をまとめた外部ファイルconfig.phpも併せて設定することが多いでしょう。

詳しくは以下の記事で参照ください。

参考:PHPの定数を使いこなす

スポンサードリンク

  • このエントリーをはてなブックマークに追加
  • Pocket

コメントを残す

*