require()、include()、require_オンス()とinclude_オース()の違い


この二つの文を一緒に紹介します。読者は比較的に勉強できます。1.require()ステートメントrequire()ステートメントは、ステートメント自体の代わりに指定されたファイルを使用しており、C言語のinclude()ステートメントと同じです。phpプロファイルphp.iniのURL fopen wrappersが開いている場合(デフォルトでは開いています)、URLを使ってファイルの位置を指定してリモートファイルの呼び出しを行うことができます。一つは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文を使えば、それらを含めます。条件制御文にこの関数を使って含まれていても、その条件が真実ではないと参照ファイルが含まれます。ゾンビが形成されていますが、実行中にこれらのゾンビは何の可視作用もありません。しかし、明らかに負担がかかります。この点に注意してください。require文を使ってエラーが発生したら、プログラムはエラー情報を出力して実行を停止します。require()文が声明ファイルのURLによってリモートファイルを含み、リモートサーバがphpコードによってこのファイルを解釈すると、ローカルphpファイルに含まれる内容はリモートサーバで処理した後の結果となります。例えば、
 
/*
some_server .php , .txt 。
$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"); /* */
require("file.php"); /* */
はもともとphp 3.0において、require()に含まれるファイルはreturn文を使用することができますが、条件はreturn文が{}内部に現れることができず、ファイルが含まれているグローバル範囲に現れる必要があります。この機能は、php 4.0においてキャンセルされましたが、include()を使用して実現されます。2.include()のステートメントinclude()の文とrequire()の文は同じところがたくさんあります。上のrequire()の文に明確な説明がないとinclude()に適用できない部分以外に、require()の文の機能は完全にinclude()の文に適用されます。require()文にないinclude()文の機能と特徴を紹介します。include文は、実行された時にのみ、含まれるファイルを読み込むことができます。エラー処理が便利で、include文を使ってエラーが発生したら、プログラムはinclude文をスキップします。エラーメッセージが表示されますが、プログラムは続行されます。phpプロセッサは、include()の文に出会うたびに、それを再処理するので、条件に応じて、条件制御文と循環文の中に、include()を使用して、異なるファイルを含むことができる。例えば、
 
<?php
$files=array('first.php','second.php','third.php');
for($i=0;$i<count($files);$i++)
{
include $files[$i];
}
?>
は、php 3.0とphp 4.0のinclude()文に含まれるファイルのいずれも、return文を使用して値を返し、ファイルの下に含まれるコンテンツの実行を停止することができる。しかしphp 3.0とphp 4.0はこのような状況を処理する時に違いがあります。php 3.0でreturn文は一つの関数に含まれない限り、ファイルの戻り値ではなく関数の戻り値を表します。php 4.0にはこのような制限がありません。ユーザは、関数の戻り値のように、ファイルの中から数字を返すこともできます。このような文はphp 3.0ではしばしばエラーを報告します。以下の例は、test.incと主ファイルmain.phpがディレクトリ内に含まれていると仮定する。test.incの内容は以下の通りです。test.inc
 
<?php
echo "Before the return<br>
";
if(1)
{
return 27;
}
echo "After the return<br>
";
?>
は、main.phpファイルに次のような文が含まれていると仮定します。
 
<?php
$retval=include('test.inc');
echo "File returned:'$retval'<br>
";
?>
php 3.0インタプリタは、2行目でエラーを報告し、include()文の戻り値を得ることができません。しかし、php 4.0では以下の結果が得られます。Before the return File returned:'27'の下では、main.phpを、
 
<?php
include('test.inc');
echo "Back in main.html<br>
";
?>
がphp 4.0で出力された結果は、Before the return Back mann.であると仮定して、php 5.0で出力された結果も、Before the the return Bareturn backである。e error in/apache/httocs/phptest/mann.on line 5上のエラーが発生したのは、return文が{}の内部にあり、関数の内部ではないからです。を取り除くとtest.incの最外階に位置し、出力結果は:Before the return 27 Back in mann.が27に現れたのは、php 3.0でinclude()が返されないからです。3.require_オンス()とinclude_オンス()語句require_オンス()とinclude_Once()の文はそれぞれrequire()とinclude()の文に対応します。require_オンス()とinclude_Once()の文は主に複数のファイルを含む必要がある場合、同じセグメントのコードを含めて関数や変数が繰り返し定義されたエラーが発生することを効果的に避けることができます。例えば、2つのファイルutil.incとfool.incを作成すると、プログラムコードはそれぞれ、util.inc:
 
<?php
define(PHPVERSION,floor(phpversion()));
echo "GLOBALS ARE NICE<br>
";
function goodTea()
{
return "Olong tea tasts good!";
}
?>
とfool.inc:
 
<?php
require ("util.inc");
function showVar($var)
{
if(PHPVERSION==4)
{
print_r($var);
}
else
{
var_dump($var);
}
}
?>
の後、error_にあります。require.phpにはこの二つのファイルが含まれています。
 
<?php
require("fool.inc");
require("util.inc");//
$foo=array("1",array("complex","quaternion"));
echo "this is requiring util.inc again which is also<br>
";
echo "required in fool.inc
";
echo "Running goodTea:".goodTea()."<br>
";
echo "Printing foo:<br>
";
showVar($foo);
?>
にはerror_が実行されます。require.phpの場合、出力結果は以下の通りです。GLOBALS ARE NICE GLOOBALS ARE Fatal error:Canot redeclare goodTea()in util.inc on line 4を使用すれば、require_を使用します。oice()文をrequire()の代わりに使うと、上のエラーが発生しません。私たちはerrorをいじりますrequire.phpとfool.incのrequire()の文をrequire_に変えます。onece()の文を改めてerror_と命名します。require_OGLOBALS ARE NICE this requiring util.inc again which is also required in fool.inc Running good:Olong tea tastes good!Printing foo:Aray([0]=>1[1]=>Aray([0]=>compplex[1]=quaternion)include_Onece()文の文法はinclude()文と類似していますが、主な違いは一つのファイルを複数含むことによって関数や変数の重複定義を引き起こすことを避けることです。require_Onece文には参照チェーンがあります。ファイルがあなたのプログラムに参加するのは一回だけで、変数値と関数名の間の衝突を避けることができます。require_とオンスの語句は同じで、include_once文はincludeの機能を拡張しました。プログラム実行中に指定されたファイルを含めると、ファイルから引用されたプログラムが前にすでに含まれていた場合、include(u)オンスはもうこれを含まないです。つまり同じ書類を一度だけ引用することができます。include_Once()ステートメントは、スクリプト実行中に指定されたファイルを含んで実行します。この挙動はinclude()の文と類似していますが、このファイルのコードがすでに含まれている場合は、再は含まれません。この文の名前が暗示しているように、一回だけ含まれます。include_Once()はスクリプト実行中に同じファイルが一回以上含まれる可能性がある場合に、関数再定義、変数再割り当てなどの問題を避けるために一度だけ含まれることを確認したいです。リキュールを使うオンス()とinclude_onece()の詳細な例は最新のPHPソースプログラムの発行パッケージのPEARコードを参照してください。戻り値はinclude()と同じです。ファイルが含まれている場合、本関数はTRUEに戻ります。注:include_オンス()はPHP 4.0.1 pl 2に新しく加入したものです。注:include_に注意してください。オンス()とrequire_ワンス()大きさや書き込みに敏感でないオペレーティングシステムにおける(例えばWindows)の挙動は、望ましいものではないかもしれない。例:include_Onece()Windowsでは大文字小文字
 
<?php
include_once("a.php"); // this will include a.php
include_once("A.php"); // this will include a.php again on Windows! (PHP 4 only)
?>
はPHP 5で変更されています。経路は先に規格化されていますので、C:\PROGRA~1\A.phpとC:\Program Files\a.phpの実現は同じです。ファイルは一回だけ含まれます。含まれるファイルが存在しない場合は、includeはnoticeを提示し、次のステートメントを実行し続け、requireは致命的なエラーを提示し、終了します。win 32のプラットフォームの下では、それらは先に含まれて実行されますので、ファイルに含まれています。includeやrequire文がないようにしてください。ディレクトリが混乱します。Linuxは状況が違うかもしれません。まだテストしていません。一つのファイルが複数含まれたくないなら、include_を使ってもいいです。オンスまたはrequire_Oce萼葃読み取りで、ドキュメントデータを書き込むことができます。
 
<?php
function r($file_name) {
 $filenum=@fopen($file_name,"r");
 @flock($filenum,LOCK_SH);
 $file_data=@fread($filenum,filesize($file_name));
 @fclose($filenum);
 return $file_data;
}
function w($file_name,$data,$method="w"){
 $filenum=@fopen($file_name,$method);
 flock($filenum,LOCK_EX);
 $file_data=fwrite($filenum,$data);
 fclose($filenum);
 return $file_data;
}