include

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

ファイルの読み込みに関して注意すべき点としては、 ファイルがinclude()またはrequire() される際には、読み込まれるファイルの先頭でPHPモードから抜け HTMLモードになること、読み込み完了時にPHPモードに戻ることがあります。 このため、読み込むファイル中のPHPコードとして実行する必要がある コードは、 有効なPHPの開始タグおよび終了タグ で括る必要があります。

読み込み処理はinclude文を処理する度に行われます。 このため、異なった複数のファイルを読み込むためにル�×構造の中で includeを使用することができます。


$files = array ('first.inc', 'second.inc', 'third.inc');
for ($i = 0; $i < count($files); $i++) {
    include $files[$i];
}
     

include()require()と異なり、 include文が実行される度に再度評価されます。 (そして、実行時に初めて評価されます。)一方、require()文は、 (条件式がfalseであるif 文の中にある場合のように)読み込まれるファイルの内容が評価されるかによらず 最初に処理された際に読み込まれるファイルで置換されます。

include()は特殊な言語構造なので、if構造内 にある時には、命令ブロックとして括っておく必要があります。


/* 以下は誤っており、希望通りに動作しません。 */
 
if ($condition)
    include($file);
else
    include($other);
 
/* 以下が正解です。 */
 
if ($condition) {
    include($file);
} else {
    include($other);
}
     

PHP3およびPHP4では共にinclude()されたファイル内で ファイルの実行処理を終了し呼出側のスクリプトに戻るために return文を実行することが可能です。 しかし、動作にはいくつかの違いがあります。まず、PHP3では 関数ブロック以外のブロック内でreturnを 使用することはできません。PHP3では、return が適用っMるのは関数であり、ファイル全体には適用できません。 しかし、PHP4ではこの制限はありません。また、PHP4では include()されたファイルから値を返すことが可能です。 通常の関数と同様にinclude()コールの値を 取得できます。これは、PHP3ではパース時にエラーとなります。

例 11-1. PHP3とPHP4におけるinclude()

メインファイルと同じディレクトリに(test.inc という名前の)以下のファイルが存在すると仮定します。

<?php
echo "Before the return <br>\n";
if (1) {
    return 27;
}
echo "After the return <br>\n";
?>
     

メインファイル(main.html)に以下の文が含まれている 仮定します。

<?php
$retval = include ('test.inc');
echo "File returned: '$retval'<br>\n";
?>
     

main.htmlがPHP3でコールされた場合、 2行目でパースエラーとなります。つまり、PHP3では include()の値を取得できないのです。 しかし、PHP4では、以下のような結果となります。

Before the return
File returned: '27'
     

ここで、main.htmlを以下のように変えたと 仮定しましょう。

<?php
include ('test.inc');
echo "Back in main.html<br>\n";
?>
     

PHP4では、出力は次のようになります。

Before the return
Back in main.html
     
しかし、PHP3では出力は以下となります。

Before the return 
27Back in main.html

Parse error: parse error in /home/torben/public_html/phptest/main.html on line 5
     

上のパースエラーは、test.inc内で return文が関数以外のブロックで括られている ためです。returnをブロックの外に移動すると、出力は次のようになります。

Before the return
27Back in main.html
     

偽の'27'はPHP3がファイルからreturnにより値を返すことを サポートしていないことによるものです。

include()およびrequire()は共に 実際にターゲットファイルの中身を呼出側のファイル自体に読みこむことに 注意してください。ターゲットをHTTPのようなものを経由してコールする わけではありません。よって、 インクルードされるファイルは効率的に呼出側のファイルの一部になるため、 インクルードされた側のスコープで設定された全ての変数はインクルード されるファイルの中でも自動的に利用可能です。


include( "file.inc?varone=1&vartwo=2" ); /* 動作しません */
 
$varone = 1;
$vartwo = 2;
include ("file.inc");  /* $varoneおよび$vartwoはfile.incで利用可能です */
     

リモートファイル機能により HTTP経由でrequireやincludeによるファイルの読み込めることと誤解しないで 下さい。その場合は、可能です。

readfile(), require(), virtual() も参照下さい。