\ 今回の主人公はー?こちらっ /
・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使っとこう。