require(),include(),require_once()和include_once()的异同
2010-08-12 05:15
453 查看
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;
mso-font-charset:1;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:0 0 0 0 0 0;}
@font-face
{font-family:Verdana;
panose-1:2 11 6 4 3 5 4 4 2 4;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-pitch:variable;
mso-font-signature:536871559 0 0 0 415 0;}
@font-face
{font-family:"/@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:10.0pt;
font-family:"Times New Roman","serif";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-size:10.0pt;
mso-ansi-font-size:10.0pt;
mso-bidi-font-size:10.0pt;
mso-ascii-font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-hansi-font-family:"Times New Roman";
mso-font-kerning:0pt;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:595.3pt 841.9pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:42.55pt;
mso-footer-margin:49.6pt;
mso-paper-source:0;
layout-grid:15.6pt;}
div.Section1
{page:Section1;}
-->
require(),include(),require_once()
和
include_once()
的异同
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;
mso-font-charset:1;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:0 0 0 0 0 0;}
@font-face
{font-family:Verdana;
panose-1:2 11 6 4 3 5 4 4 2 4;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-pitch:variable;
mso-font-signature:536871559 0 0 0 415 0;}
@font-face
{font-family:"/@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:10.0pt;
font-family:"Times New Roman","serif";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-size:10.0pt;
mso-ansi-font-size:10.0pt;
mso-bidi-font-size:10.0pt;
mso-ascii-font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-hansi-font-family:"Times New Roman";
mso-font-kerning:0pt;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:595.3pt 841.9pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:42.55pt;
mso-footer-margin:49.6pt;
mso-paper-source:0;
layout-grid:15.6pt;}
div.Section1
{page:Section1;}
-->
require(),include(),require_once()
和
include_once()
的异同
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"); /* 正确的语句 */ 本来在 php3.0 中, require() 所包含的文件可以使用 return 语句,但条件是 return 语句不能出现在 {} 内部,而必须出现在被包含文件的全局范围内。在 php4.0 中已经取消了 require() 的这个功能,但是仍然可以使用 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]; } ?> 在 php3.0 和 php4.0 中 include() 语句所包含的文件中都可以使用 return 语句来返回一个值,并停止执行被包含文件下面的内容。但 php3.0 和 php4.0 在处理这样的情况时有所不同。在 php3.0 中 return 语句不能包含在 {} 内,除非它在一个函数中,因为这时它表示函数的返回值而不是文件的返回值。而在 php4.0 中就没有了这样的限制,用户甚至可以在文件中返回一个数字,就象函数的返回值一样。这样的语句在 php3.0 中通常会报告错误。以下举例说明: 假设被包含的文件为 test.inc 和主文件 main.php 位于一个目录中。 test.inc 的内容如下: test.inc <?php echo "Before the return<br>/n"; if(1) { return 27; } echo "After the return<br>/n"; ?> 假设在 main.php 文件中包含下面的语句: <?php $retval=include('test.inc'); echo "File returned:'$retval'<br>/n"; ?> php3.0 解释器会在第二行报告错误,而不能得到 include() 语句的返回值。但在 php4.0 中会得到下面的结果: Before the return File returned: '27' 下边假设 main.php 改为: <?php include('test.inc'); echo "Back in main.html<br>/n"; ?> 在 php4.0 中的输出结果是 : Before the return Back in main.html 在 php5.0 中的输出结果也是 : Before the return Back in main.html 在 php3.0 中的输出结果是 : Before the return 27Back in main.html Parse error:parse error in /apache/htdocs/phptest/main.html on line 5 出现上面的错误是因为 return 语句位于 {} 内部而且不是一个函数内部。如果把 {} 去掉,使它位于 test.inc 的最外层,输出结果是: Before the return 27Back in main.html 之所以出现 27 ,是因为在 php3.0 中不支持 include() 返回。 3.require_once() 和 include_once() 语句 require_once() 和 include_once() 语句分别对应于 require() 和 include() 语句。 require_once() 和 include_once() 语句主要用于需要包含多个文件时,可以有效地避免把同一段代码包含进去而出现函数或变量重复定义的错误。例如:如果创建两个文件 util.inc 和 fool.inc ,程序代码分别为: util.inc: <?php define(PHPVERSION,floor(phpversion())); echo "GLOBALS ARE NICE<br>/n"; 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>/n"; echo "required in fool.inc/n"; echo "Running goodTea:".goodTea()."<br>/n"; echo "Printing foo:<br>/n"; showVar($foo); ?> 当运行 error_require.php 时,输出结果如下: GLOBALS ARE NICE GLOBALS ARE NICE Fatal error:Cannot redeclare goodTea() in util.inc on line 4 如果使用 require_once() 语句来代替 require() 语句 , 就不会出现上面的错误。我们把 error_require.php 和 fool.inc 中的 require() 语句改为 require_once() 语句并重命名为 error_require_once.php, 这是显示结果如下: GLOBALS ARE NICE this is requiring util.inc again which is also required in fool.inc Running goodTea:Olong tea tastes good! Printing foo: Array([0] => 1 [1] => Array ([0] => complex [1] = quaternion)) include_once() 语句的语法和 include() 语句类似,主要区别也是避免多次包含一个文件而引起函数或变量的重复定义。 require_once 语句有一个引用链,它可以保证文件加入你的程序仅仅只有一次,而且会避开变量值和函数名之间的冲突。 和 require_once 语句一样, include_once 语句把 include 的功能扩展了。在程序执行期间,将指定的文件包含进来,如果从文件引用进来的程序先前已经包含过的时候, include_once() 就不会把它再包含进来。也就是仅仅可以引用同一个文件一次! include_once() 语句在脚本执行期间包含并运行指定文件。此行为和 include() 语句类似,唯一区别是如果该文件中的代码已经被包含了,则不会再次包含。如同此语句名字暗示的那样,只会包含一次。 include_once() 应该用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。 使用 require_once() 和 include_once() 的更多例子见最新的 PHP 源程序发行包中的 PEAR 代码。 返回值和 include() 相同。如果文件已被包含,本函数返回 TRUE 。 注 : include_once() 是 PHP 4.0.1pl2 中新加入的。 注 : 要注意 include_once() 和 require_once() 在大小写不敏感的操作系统中(例如 Windows )的行为 可能不是所期望的。 例子: include_once() 在 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 提示致命错误并且退出。 win32 平台下它们都是先包含后执行,所以被包含文件里最好不要再有 include 或 require 语句,这样会造成目录混乱。或许 Linux 下情况不同,暂时还没测试。 如果一个文件不想被包含多次可以使用 include_once 或 require_once## 读取,可以写入文档数据。 <?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; } ?> |
相关文章推荐
- require(),include(),require_once()和include_once()的异同
- php中include、include_once、require、require_once等函数的异同
- require(),include(),require_once()和include_once()的异同
- require(),include(),require_once()和include_once()的异同
- require(),include(),require_once()和include_once()的异同
- require(),include(),require_once()和include_once()的异同---转
- [转]require(),include(),require_once()和include_once()的异同
- require(),include(),require_once()和include_once()的异同
- require(),include(),require_once()和include_once()的异同
- php——学习笔记,include,require,include_once,require_once引用文件时的异同
- require(),include(),require_once()和include_once()的异同
- Ti.include和require的异同
- 强烈建议不要使用include_once/require_once
- Include,require,include_once,require_once的区别
- PHP包含文件函数include、include_once、require、require_once区别总结
- 深入理解require与require_once与include以及include_once的区别
- 【荐】如何正确理解PHP之include,include_once,require,require_once等包含作用域
- PHP包含文件函数include、include_once、require、require_once区别总结
- require_once/include_once 与 require/include
- include,include_once,require,require_once的区别