include/requireで外部ファイル読み込み
PHPの外部ファイルの読み込みについて学習しましょう。
プログラミング入門者にとっては、外部ファイルを読み込むよりも内容をコピペした方が良さそうに思います。
たしかにファイルがひとつで済むというのもメリットのひとつですが、プログラミング開発中においてはファイルを分けて管理した方がメリットが多いと思われます。
そのため、基本的にプログラミング言語には外部ファイルを読み込むための技法が用意されています。PHPではincludeやrequireを使って外部ファイルを読み込むことができます。さらにinclude_onceやrequire_onceというのもあるので、それらの違いも解説します。
includeとrequireの違い
PHPでは「include(含める)」も「require(求める)」も、外部ファイルを指定して現在のファイルに取り込むときに使います。
includeとrequireの違いは外部ファイルが無かった場合に処理を継続するか終了するかです。
例えば、外部ファイルがあるか無いかわからないけど、あれば読み込みたい場合などにはincludeを使います。
一方、その外部ファイルが無ければ話にならない場合などにrequireを使っておくと、万が一無かった場合に処理を終了させることができます。
また、PHPにはそれぞれに「_once」が付いたinclude_onceやrequire_onceというのもあります。
同じ外部ファイルを読み込もうとした場合には何度も同じファイルを読み込みますが、include_onceやrequire_onceを使った場合には同じファイルは一度しか読み込まなくなります。
それぞれの違いをまとめると次のようになります。
includeとrequireの使い方
includeやrequireなどは外部ファイルのパスを指定して使います。
include('外部ファイルパス');外部ファイルはPHPファイルでなくても構いません。テキストファイルやHTMLファイルを読み込むこともできます。その場合は<?php 〜 ?>の外側のような扱いを受けます。
具体的にどう違うのか試してみよう
いくつかのパターンを実際に試してみましょう。
// tast.phpというファイルは無い include('tast.php'); // 警告は出るが続行 require('tast.php'); // エラーが出て終了
外部ファイルが存在しない場合、includeは警告は出ますが処理は続きます。一方、requireはその時点で処理は終了します。
// test.phpというファイルはある include_once('test.php'); // 読み込まれる include_once('test.php'); // 読み込まれない
二回目のinclude_onceの時点では「test.php」はすでに読み込まれているので読み込まれません。
include('test.php'); // 読み込まれる include_once('test.php'); // 読み込まれない
あくまで、すでに読み込まれているかどうかによるので、前回の読み込み方は関係ありません。
include_once('test.php'); // 読み込まれる include('test.php'); // 読み込まれる
前に_onceで読み込まれようと、今回_onceでなければ何度も読み込まれます。
include('test.php'); // 読み込まれる require_once('test.php'); // 読み込まれない
includeか requireかは関係なく、すでに読み込まれていれば、_onceは読み込みません。
それぞれの違いを理解して、ケースバイケースで正しく使い分けていきましょう。
file_get_contentsとの違い
PHPにはfile_get_contentsという便利な関数が用意されています。この関数も外部ファイルを取り込むものなので、入門者には違いはわかりにくいかもしれません。
includeなどは、外部ファイルをPHPスクリプトとして読み込むので、<?php 〜 ?>の中身はPHPスクリプトとして処理されます。
一方、file_get_contentsは文字列として取り込む関数なので、中身はスクリプトとして処理されません。
次のような「echo2.php」があるとします。
<?php echo 2 ?>
次のようにするとどうなるでしょうか
<?php include('echo2.php'); echo file_get_contents('echo2.php'); ?>
includeでは「echo2.php」内のechoがPHPスクリプトとして処理されるので「2」が出力されます。
file_get_contentsでは「echo2.php」の内容は文字列として取得されるので「<?php echo 2 ?>」という文字列が3行目のechoによって出力されます。