include() require() include_once() require_once()区别

时间:2009-7-21     作者:smarteng     分类: PHP相关


require() 语句包含并运行指定文件。

include() 语句包含并运行指定文件。

require()include() 除了怎样处理失败之外在各方面都完全一样。

include() 产生一个警告而 require() 则导致一个致命错误。

换句话说,如果想在丢失文件时停止处理页面,那就别犹豫了,用 require() 吧。

include() 就不是这样,脚本会继续运行。同时也要确认设置了合适的include_path。[break]

寻找包含文件的顺序先是在当前工作目录的相对的 include_path 下寻找,然后是当前运行脚本所在目录相对的 include_path 下寻找。例如 include_path 是 .,当前工作目录是 /www/,脚本中要 include 一个 include/a.php 并且在该文件中有一句 include "b.php",则寻找 b.php 的顺序先是 /www/,然后是 /www/include/。如果文件名以 ./ 或者 ../ 开始,则只在当前工作目录相对的 include_path 下寻找。

当一个文件被包含时,其中所包含的代码继承了 include 所在行的变量范围。从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。不过所有在包含文件中定义的函数和类都具有全局作用域。

例:基本的include()例子

vars.php
<?php

$color
= 'green'
;
$fruit = 'apple'
;

?>

test.php
<?php

echo "A $color $fruit";
// A

include 'vars.php'
;

echo
"A $color $fruit";
// A green apple

?>

如果 include 出现于调用文件中的一个函数里,则被调用的文件中所包含的所有代码将表现得如同它们是在该函数内部定义的一样。所以它将遵循该函数的变量范围。

例: 函数中的包含

<?php

function foo
()
{
global
$color
;

include
'vars.php'
;

echo
"A $color $fruit"
;
}



foo();
// A green apple
echo "A $color $fruit";
// A green

?>

当一个文件被包含时,语法解析器在目标文件的开头脱离 PHP 模式并进入 HTML 模式,到文件结尾处恢复。由于此原因,目标文件中应被当作 PHP 代码执行的任何代码都必须被包括在有效的 PHP 起始和结束标记之中。

例:通过 HTTP 进行的 include()

<?php



// Won't work; file.txt wasn't handled by www.example.com as PHP
include 'http://www.example.com/file.txt?foo=1&bar=2'
;

// Won't work; looks for a file named 'file.php?foo=1&bar=2' on the
// local filesystem.
include 'file.php?foo=1&bar=2'
;

// Works.
include 'http://www.example.com/file.php?foo=1&bar=2'
;

$foo = 1
;
$bar = 2
;
include
'file.txt';
// Works.
include 'file.php';
// Works.

?>

安全警告:

远程文件可能会经远程服务器处理(根据文件后缀以及远程服务器是否在运行 PHP 而定),但必须产生出一个合法的 PHP 脚本,因为其将被本地服务器处理。如果来自远程服务器的文件应该在远端运行而只输出结果,那用 readfile() 函数更好。另外还要格外小心以确保远程的脚本产生出合法并且是所需的代码。


require_once() 语句在脚本执行期间包含并运行指定文件。此行为和 require() 语句类似,唯一区别是如果该文件中的代码已经被包含了,则不会再次包含。

require_once() 应该用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。

include_once() 语句在脚本执行期间包含并运行指定文件。此行为和 include() 语句类似,唯一区别是如果该文件中的代码已经被包含了,则不会再次包含。如同此语句名字暗示的那样,只会包含一次。

include_once() 应该用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。

注意: 要注意 include_once()require_once() 在大小写不敏感的操作系统中(例如 Windows)的行为可能不是所期望的。