PHP中include和require

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开始和结束标记来把这些语句包含进去。

require()和include()知识php中的一种语言特性,而不是函数。它们和函数有许多不同的地方。

比如:require()所包含的文件中不能包含控制结构,而且不能使用return这样的语句。在require()所包含的文件中使用return语句会产生处理错误。

require()语句不管语句是否执行,都会将包含文件的内容包含进来。所以如果你想按照不同的条件包含不同的文件,就必须使用include()语句。当然,如果require()所在位置的语句不被执行,require()所包含的文件中的语句也不会被执行。

require()不能在循环体中根据条件的不同而包含不同的文件。require()语句只会在第一次执行时调用它所包含的文件中的内容替换本身这条语句,当再次被执行时只能执行第一次所包含的语句。但是include()语句可以在循环体中来包含不同的文件。

require()语句中的变量继承require()语句所在位置的变量作用域。所有在require()语句的位置可以访问的变量,在 require()语句所包含的文件中都可以访问。如果require()语句位于一个函数内部,那么被包含文件内的语句都相当于定义在函数内部。

require()语句在PHP程序执行前就会将使用require引用的文件读入,因此require通常放到程序的开始处。因此要特别注意一点,require语句有一点强,不管程序是否真的需要引用的文件,只要你使用require语句,它都会把他们包含进来!即使你是在条件控制语句中使用这个函数进行包含,那怕是那个条件不为真,引用文件也会被包含进来!形成了僵尸,在运行过程中这些僵尸是不起任何可见作用的,但是很明显它会加重负担,所以这一点要特别注意!如果使用require语句发生了包含错误,那么程序将输出出错信息并停止运行!!

如果require()语句通过声明文件的URL来包含远程文件,而且远程服务器按照php代码来解释该文件的话,本地php文件中所包含的内容是在远程服务器上处理以后的结果。例如:

require("http://some_server/file.txt?varfirst=1&varsecond=2");

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;

}

?>

PHP中include和require相关推荐

  1. require与include+php,PHP中include与require有什么区别

    PHP中include与require有什么区别 发布时间:2021-01-13 15:24:31 来源:亿速云 阅读:81 作者:Leah PHP中include与require有什么区别?相信很多 ...

  2. php中include和require,在PHP中include和require到底有什么区别呢?

    在PHP中include和require到底有什么区别呢?看这里的例子就知道了 include.php3的运行结果是: 这是inc1.inc文件中的一个变量的值! 这是inc2.inc文件中的一个变量 ...

  3. PHP中include和require的区别详解

    PHP中include和require的区别详解 1.概要  require()语句的性能与include()相类似,都是包括并运行指定文件.不同之处在于:对include()语句来说,在执行文件时每 ...

  4. php中的require(),PHP中include()与require()的区别说明

    require的使用方法如 require("MyRequireFile.php"); .这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require ...

  5. PHP中include与require的用法区别

    在PHP变成中,include()与require()的功能相同,include(include_once) 与 require(require_once)都是把把包含的文件代码读入到指定位置来,但是 ...

  6. php require的用法,php7中include 和 require 语句用法和区别

    include (或 require)语句会获取指定文件中存在的所有文本/代码/标记,并复制到使用 include 语句的文件中. 包含文件很有用,如果您需要在网站的多张页面上引用相同的 PHP.HT ...

  7. php require的用法,PHP中include与require使用方法区别详解

    在PHP变成中,include()与require()的功能相同,include(include_once) 与 require(require_once)都是把把包含的文件代码读入到指定位置来,但是 ...

  8. PHP 中 include 和 require 的概要及区别介绍

    require() 语句的性能与 include() 相类似,都是包括并运行指定文件.不同之处在于:对 include() 语句来说,在执行文件时每次都要进行读取和评估:而对于 require() 来 ...

  9. PHP中include()与require()的区别说明

    require 的使用方法如 require("MyRequireFile.php"); .这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require ...

最新文章

  1. 2019.01.19-2018年6月NEYC集训counting
  2. RHEL4- WEB服务(十二)用户访问apache服务器认证
  3. Linux之交互式scripts
  4. Java描述设计模式(18):享元模式
  5. 形式化方法|形式化方法对软件开发的挑战:历史与发展
  6. linux如何停止死循环脚本,Linux Shell教程(一)
  7. CentOS中nginx负载均衡和反向代理的搭建
  8. input美化上传按钮美化
  9. [C/C++][经典探讨]类继承中,通过基类指针delete释放,是否会造成内存泄漏
  10. android 罗盘陀螺仪,电子罗盘有什么用,安卓智能手机的感应器的问题! 电子罗盘与陀螺仪有......
  11. 双屏怎么快速切换鼠标_Win7系统如何设置一键快速切换双屏显示(图文)
  12. android 腾讯云聊天,腾讯云视频通话
  13. 使用 dva 如何配置异步加载路由组件
  14. 文墨绘学呵护那一点点光
  15. 【UE】Slate编辑器动态添加Button
  16. 一篇文章搞懂数据仓库:数据应用--OLAP
  17. 文件管理android2.3,华为手机文件管理器(com.huawei.hidisk) - 10.11.11.301 - 应用 - 酷安...
  18. 游戏设计艺术 第2版 第30章 读书笔记
  19. IDEA中建包的时候如何才能把包分开
  20. Ubuntu22.04.1 LTS系统上实现KVM虚拟机显卡直通(AMD/NVIDIA+板载显卡)

热门文章

  1. Ubuntu下基于 Cilium CNI 的 Kubernetus集群环境搭建
  2. java刚工作搭建环境_Java开发环境的搭建
  3. java 内部类泛型,java – 使用泛型强制转换为内部类
  4. delete什么头文件C语言,C++中new和delete的介绍
  5. php中复选框删除数据_checkbox 删除,checkbox_PHP教程
  6. linux动态二进制翻译,仿真:解释和二进制翻译
  7. 故障模块名称kernelbase.dll_固定资产管理系统_资产分类名称(通讯导航有线电及测量仪器篇)...
  8. mysql having in_正确理解MySQL中的where和having的区别
  9. maven项目转成web项目
  10. Android字体占有内存,android随意创建字体对象引发的应用程序运行时占用内存过大...