requireとincludeの違い

 

\ 今回の主人公はー?こちらっ /

・require

・require_once

・include

・include_once

 

 

そもそも上の四つは外部ファイルを参照するときに使います。

requireとincludeの違い

require と include はほぼ同じだが、失敗した場合の動きが異なる。

require → 致命的なエラーを発生する。スクリプトの処理がそこで止まってしまう。 include → 警告 (E_WARNING) を発するが、スクリプトの処理は続行する。

 

<イメージ>

require …

「君が必要なんだ!だから、君がいないならもうやめてしまおう、

こんなこと。」てきな

 

include…

「お前もくる?あ、どっちでもいいよ?無理なら全然いいから〜、

お前おらんでもできるから。」

てきな。

 

※あくまでも個人的なイメージです。

 

 

 

では、require と include を比べて見ましょう。

こんなファイルを用意。requireVsInclude.php

  1 <?php
  2
  3 /**
  4  * 今回比較するもの
  5  * - require
  6  * - include
  7  */
  8
  9 //わざと失敗させる:該当ファイル(notFound.php)がない
 10 echo "---include(Error) START---\n";
 11 include(dirname(__FILE__) . '/notFound.php');
 12 echo "---include(Error) E N D---\n\n";
 13
 14 echo "---include START---\n";
 15 include(dirname(__FILE__) . '/dummy/include.php');
 16 echo "---include E N D---\n\n";
 17
 18 //わざと失敗させる:該当ファイル(notFound.php)がない
 19 echo "---require(Error) START---\n";
 20 require(dirname(__FILE__) . '/notFound.php');
 21 echo "---require(Error) E N D---\n\n";
 22
 23 echo "---require START---\n";
 24 require(dirname(__FILE__) . '/dummy/require.php');
 25 echo "---require E N D---\n\n";

 

いざ、実行!

$ php requireVsInclude.php
---include(Error) START---

Warning: include(/xxxxxx/php/src/notFound.php): failed to open stream: No such file or directory in/xxxxxx/php/src/requireVsInclude.php on line 11

Warning: include(): Failed opening '/xxxxxx/php/src/notFound.php' for inclusion (include_path='.:') in/xxxxxx/php/src/requireVsInclude.php on line 11
---include(Error) E N D---

---include START---
includeしました。
---include E N D---

---require(Error) START---

Warning: require(/xxxxxx/php/src/notFound.php): failed to open stream: No such file or directory in/xxxxxx/php/src/requireVsInclude.php on line 20

Fatal error: require(): Failed opening required '/xxxxxx/php/src/notFound.php' (include_path='.:') in/xxxxxx/php/src/requireVsInclude.php on line 20

 

11行目のincludeで存在しないファイルですとWarningされますが、

処理は続けていますね。

そして、次のinclude処理(15行目)は正しく行われています。

一方で、20行目のrequireは「存在しないファイルをopenできなかった」

とFatalErrorしています。

よって、ここ(20行目)で処理が中止され24行目のrequire処理は実行されませんでした。

 

 

つづいて….  require_onceとinclude_onceを比較します。

こんなファイルを用意。once.php

  1 <?php
  2
  3 /**
  4  * 今回比較するもの
  5  * - require_once
  6  * - include_once
  7  */
  8
  9 //~_onceつかってみる
 10 echo "---require START---\n";
 11 require(dirname(__FILE__) . '/dummy/require.php');
 12 echo "---require E N D---\n\n";
 13
 14 echo "---require_once START---\n";
 15 require_once(dirname(__FILE__) . '/dummy/require.php');
 16 echo "---require_once E N D---\n\n";
 17
 18
 19 echo "---include START---\n";
 20 include(dirname(__FILE__) . '/dummy/include.php');
 21 echo "---include E N D---\n\n";
 22
 23 echo "---include_once START---\n";
 24 include_once(dirname(__FILE__) . '/dummy/include.php');
 25 echo "---include_once E N D---\n\n";

 

いざ、出 陣!

ちなみに

/dummy/require.php がよばれると「requireしました。」をechoします。

/dummy/include.php がよばれると「includeしました。」をechoします。

$ php once.php
---require START---
requireしました。
---require E N D---

---require_once START---
---require_once E N D---

---include START---
includeしました。
---include E N D---

---include_once START---
---include_once E N D---

11行目で一度requireされたので、15行目のrequire_onceでは呼び出されませんでした。

includeでも同様で、

20行目で一度includeされたので、24行目のinclude_onceでは呼び出されませんでした。

 

 

\ まとめ /

・絶対必要なファイルはrequireでよぶ。

何回呼んじゃうか、わからん時はrequrie_once使っとこう。

 

投稿者:

kin29man

農学部卒の7年目エンジニアです👩‍💻 PHPとGASが好きです!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です