読者が比較して学べるように、これら 2 つの文を一緒に紹介します。
1.require() ステートメント
require() ステートメントは、C 言語の include() ステートメントと同様に、ステートメント自体ではなくファイルを指定するために使用されます。 PHP 構成ファイル php.ini 内の URL fopen ラッパーがオンになっている場合 (デフォルトでオンになっています)、URL を使用してファイルの場所を指定し、リモート ファイル呼び出しを行うことができます。
1 つは、require() ステートメントと include() ステートメントを使用するときに特別な注意を払うことです。つまり、インクルードされたファイルでは、プロセッサは HTML モードに従ってコンテンツを解釈し、インクルードされたコンテンツを処理した後、PHP モードに戻ります。したがって、インクルードされるファイルで PHP 構文を使用する必要がある場合は、正しい PHP 開始タグと終了タグを使用してこれらのステートメントをインクルードする必要があります。
require() と include() は PHP の言語機能であり、関数ではありません。これらは多くの点で関数とは異なります。
例: require() に含まれるファイルには制御構造を含めることはできず、return などのステートメントは使用できません。 require() に含まれるファイルで return ステートメントを使用すると、処理エラーが発生します。
include() ステートメントとは異なり、require() ステートメントは、ステートメントが実行されるかどうかに関係なく、含まれるファイルの内容を無条件に読み取ります。したがって、異なる条件に従って異なるファイルをインクルードする場合は、include() ステートメントを使用する必要があります。もちろん、require() の位置にあるステートメントが実行されない場合、require() に含まれるファイル内のステートメントも実行されません。
require() では、ループ本体内のさまざまな条件に応じて異なるファイルを含めることはできません。 require() ステートメントは、ステートメント自体を置き換えるために初めて実行されるときにのみ、ステートメントに含まれるファイルの内容を呼び出します。再度実行されるときは、最初に含まれるステートメントのみが実行されます。ただし、 include() ステートメントでは、ループ本体にさまざまなファイルを含めることができます。
require() ステートメント内の変数は、require() ステートメントが配置されている場所の変数スコープを継承します。 require() ステートメントの場所でアクセスできるすべての変数は、require() ステートメントに含まれるファイル内でアクセスできます。 require() ステートメントが関数内にある場合、インクルードされたファイル内のステートメントは関数内で定義されているものと同等になります。
require() ステートメントは、PHP プログラムが実行される前に、require で参照されるファイルを読み取るため、通常、require はプログラムの先頭に配置されます。したがって、require ステートメントは少し強力であるという事実に特別な注意を払う必要があります。プログラムが参照ファイルを本当に必要とするかどうかに関係なく、require ステートメントを使用する限り、参照ファイルが含まれてしまいます。この関数を使用して条件制御ステートメントにインクルードすると、条件が true でなくても、参照されたファイルがインクルードされます。ゾンビが形成されると、操作中に目に見える影響はありませんが、明らかに負担が増加しますので、特に注意してください。 require ステートメントを使用してインクルード エラーが発生した場合、プログラムはエラー メッセージを出力して実行を停止します。 !
require() ステートメントにファイルの URL を宣言することでリモート ファイルが含まれており、リモート サーバーが PHP コードに従ってファイルを解釈する場合、ローカル PHP ファイルに含まれるコンテンツは処理の結果です。リモートサーバー上で。例:
コードをコピーします コードは次のとおりです:
/*
この例では、some_server サーバーが想定されています。 .txt ファイルを解釈せずに、.php ファイルを解釈できます。リモート ファイル
には変数 $varfirst と $varsecond が必要です
*/
/* は正しく実行できません。リモート サーバーは .txt ファイルを処理しません*/
require("http:// some_server/file .txt?varfirst=1&varsecond=2");
/*不正解です。file.php ファイルはローカル マシン上でのみ見つかります*/
require("file.php?varfirst) =1&varsecond=2 ");
/*正しいステートメント*/
require("http://some_server/file.php?varfirst=1&varsecond=2");
$ varfirst=1 ;
$varsecond=2;
require("file.txt"); /*正しいステートメント*/
>
元々 php3.0 では、require() に含まれるファイルで return ステートメントを使用できますが、条件として、return ステートメントは {} 内に出現できず、インクルードされたファイルのグローバル スコープ内に出現する必要があります。この require() の機能は php4.0 で廃止されましたが、 include() を使用して実装することができます。
2.include() ステートメント
include() ステートメントと require() ステートメントには多くの類似点があります。上記の require() ステートメントで明示的に記述されておらず、include() に適用できない部分を除いて、require() ステートメントの関数は include() ステートメントに完全に適用できます。以下では、require() ステートメントでは使用できない include() ステートメントの機能と特徴について説明します。
include ステートメントは、実行時にインクルードされるファイルのみを読み取ります。エラー処理を容易にするために、include ステートメントを使用します。include エラーが発生した場合、プログラムはエラー メッセージが表示されますが、プログラムは実行を続行します。
PHP プロセッサは include() ステートメントに遭遇するたびにそれを再処理するため、条件付き制御ステートメントやループ ステートメントで include() を使用して、さまざまな状況に応じてさまざまなファイルをインクルードできます。
例:
コードをコピー コードは次のとおりです:
$files =array(' first.php','first.php','third.php');
for($i=0;$i
include $files [$i];
}
?>
コードをコピー コードは次のとおりです:
echo "復帰前
n";
if(1)
{
return
}
echo "復帰後
;n";
?>
コードをコピーします コードは次のとおりです:
$retval=include('test.inc');
echo "返されたファイル:'$retval'
?> ;
コードをコピーします コードは次のとおりです:
include('test.inc');
echo "Back in main.html
n ";
?>
コードをコピー コード
define(PHPVERSION,floor(phpversion()));
echo "GLOBALS ARE NICE
n"; GoodTea()
{
return "烏龍茶おいしいです!"
}
?>
コードをコピー コードは次のとおりです:
require ("util.inc");
function showVar($var)
{
if(PHPVERSION==4)
{
print_r($var);
}
else
{
var_dump($var);
}
次に、これら 2 つのファイルを error_require.php に含めます。
コードをコピーします コードは次のとおりです。
< ?phprequire("fool.inc");
require("util.inc");//この文はエラーを生成します
$foo=array("1",array("complex) "," クォータニオン"));
echo "これはまた util.inc を必要としていますが、これも
n";
echo "fool.incn で必要です";
echo "goodTea を実行しています:" .goodTea( )."
n";
echo "foo:
n";
showVar($foo)>; 🎜>error_require.php を実行すると、出力は次のようになります:
GLOBALS ARE NICE
GLOBALS ARE NICE
致命的なエラー: util.inc の 4 行目で GoodTea() を再宣言できません
php include_once("a.php"); // これには a.php が含まれます include_once("A.php"); // これは Windows 上でも a.php を含みます! 4 のみ) ?>
この動作は PHP 5 で変更されました。最初にパスが正規化されるため、C:PROGRA~1A.php と C:Program Filesa が実装されます。 php は同じです。インクルードされるのは 1 回だけです。
インクルードするファイルが存在しない場合、include はプロンプトを通知し、次のステートメントの実行を続行し、require は致命的なエラーを表示して終了します。
win32 プラットフォームでは、これらは最初にインクルードされてから実行されるため、ディレクトリの混乱を引き起こす可能性があるため、インクルードされたファイルに include または require ステートメントを含めないことをお勧めします。 Linux では状況が異なる可能性がありますが、まだテストしていません。
function r($file_name) { $ filenum=@fopen($file_name,"r"); @flock($filenum,LOCK_SH)
$file_data=@fread($filenum,file_name($file_name)); @fclose( $filenum); return $file_data;
}
function w($file_name,$data,$method="w"){
$filenum=@fopen($file_name, $method) ;
flock($filenum,$data);
fclose($filenum);