澳门新浦京8455com再讲php中require(),include(),require_once()和include_once()他们的区别

一、基本函数

引用文件的方法有两种:require 及 include。两种方式提供不同的使用弹性。

1、概要

   require()语句的性能与include()相类似,都是包括并运行指定文件。不同之处在于:对include()语句来说,在执行文件时每次都要进行读取和评估;而对于require()来说,文件只处理一次(实际上,文件内容替换require()语句)。这就意味着如果可能执行多次的代码,则使用require()效率比较高。另外一方面,如果每次执行代码时是读取不同的文件,或者有通过一组文件迭代的循环,就使用include()语句。

  require的使用方法如:require(“myfile.php”),这个语句通常放在PHP脚本程序的最前面。PHP程序在执行前,就会先读入require()语句所引入的文件,使它变成PHP脚本文件的一部分。include使用方法和require一样如:include(“myfile.php”),而这个语句一般是放在流程控制的处理区段中。PHP脚本文件在读到include()语句时,才将它包含的文件读取进来。这种方式,可以把程式执行时的流程简单化。

  • incluce在用到时加载 

  • 澳门新浦京8455com ,require在一开始就加载 

  • _once后缀表示已加载的不加载

  PHP系统在加载PHP程序时有一个伪编译过程,可使程序运行速度加快。但incluce的文档仍为解释执行。include的文件中出错了,主程序继续往下执行,require的文件出错了,主程序也停了,所以包含的文件出错对系统影响不大的话(如界面文件)就用include,否则用require。

  require()和include()语句是语言结构,不是真正的函数,可以像php中其他的语言结构一样,例如echo()可以使用echo(“ab”)形式,也可以使用echo
“abc”形式输出字符串abc。require()和include()语句也可以不加圆括号而直接加参数。

  include_once()和require_once()语句也是在脚本执行期间包括运行指定文件。此行为和include()语句及require()类似,使用方法也一样。唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。这两个语句应该用于在脚本执行期间,同一个文件有可能被包括超过一次的情况下,确保它只被包括一次,以避免函数重定义以及变量重新赋值等问题。

欢迎来到本教程的第三课,也是最后一课。如果您已经学过第一课和第二课,那么您已经掌握了MySQL和PHP的安装及编程的基本知识。下面我们要介绍PHP的一些其他函数,这些函数可能会对您有用,使您的开发过程更加简单。首先我们来看看头文件。

require 的使用方法如
require(“MyRequireFile.php”);
。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入
require 所指定引入的文件,使它变成 PHP
程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。

2、详情

大家应该知道头文件的一些基本概念吧?头文件是一个外部文件,它的内容被包含到主程序中。方法也十分简单:在程序文件中引用头文件名,这个头文件就会包含进来了。在PHP中使用头文件,会涉及两个函数:include()和require()。这两个函数差别很小,却很重要,所以我们要认真研究一下。require()函数工作方式与XSSI相类似;不管在程序的哪个部分使用了这个函数,只有程序一开始运行,头文件的内容就被作为程序本身的一部分来处理。因此,如果您在一个条件判定语句中使用了require()函数,那么即使这个条件即使不为真,头文件也会被包含进来。

include 使用方法如 include(“MyIncludeFile.php”);
。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include
的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。

2.1 报错

  include引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码。

  require引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码。

  用例子来说话,写两个php文件,名字为test-include.php和test-require.php,注意相同的目录中,不要存在一个名字是test-nothing.php的文件。

test-include.php

<?php

include ‘test-nothing.php’;

echo ‘abc’;

?>

 

test-require.php

<?php

require ‘test-nothing.php’;

echo ‘abc’;

?>

  浏览

Warning: include(test-nothing.php) [function.include]: failed to
open stream: No such file or directory in D:wwwtest-include.php on
line 2

Warning: include() [function.include]: Failed opening
‘test-nothing.php’ for inclusion (include_path=’.;C:php5pear’) in
D:wwwtest-include.php on line 2

abc

浏览

Warning: require(test-nothing.php) [function.require]: failed to
open stream: No such file or directory in D:wwwtest-require.php on
line 2

Fatal error: require() [function.require]: Failed opening required
‘test-nothing’ (include_path=’.;C:php5pear’) in
D:wwwtest-require.php on line 2 

而include()函数只是在执行到这一条语句时才会把头文件内容包含进来。如果程序没运行到这里,那PHP是不会管它的。这就意味着,您在条件判定部分使用include时,它会完全按照您希望的那样工作。

_once 后缀表示已加载的不加载

2.2 条件引用

  include()与require()的功能相同,用法上却有一些不同,include()是有条件包含函数,而require()则是无条件包含函数。

  例如下面例子,如果变量$somg为真,则将包含文件somefile.php: 

if($some){

  include ‘somefile.php’;

}

  但无论$some取何值,下面的代码将把文件somefile.php包含进文件里:

if($something){

  require ‘somefile.php’;

}

  下面的例子充分说明了这两个函数之间的不同:

$i = 1;

while ($i < 3) {

  require “somefile.$i.php”;

  $i++;

}

  可以从以上这段代码中看出,每一次循环的时候,程序都将把同一个文件包含进去,很显然这不是我们想要的,可以看出这段代码希望在每次循环时,将不同的文件包含进来,如果要完成这个功能,只能使用函数include():

$i = 1;

while ($i < 3) {

  include “somefile.$i.php”;

  $i++;

}

还有,如果您用了require()函数,而您指定的头文件并不存在,那么程序将会停止运行并产生错误。如果您用了include(),程序会产生一个警告信息,但是会继续运行。您可以亲自试一下,运行下面的程序,然后把include()换成require(),再比较两个程序运行的结果。

1.报错

2.3 文件引用方式

  include()执行时需要引用的文件每次都要进行读取和评估,require()执行时需要引用的文件只处理一次(实际上执行时需要引用的文件内容替换了require()语句)可以看出若有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高,若每次执行代码时相读取不同的文件或者有通过一组文件叠代的循环,就使用include(),可以给想要包括的文件名设置变量,当参数为
include()时使用这个变量。

htmlbody?phpinclude(emptyfile.inc);echo Hello World;?/body/html

include引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码
require引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码

我喜欢把头文件的后缀名起成.inc,这样就可以把头文件和一般的程序区分开来。如果您也这么做,那么请您修改Web服务器软件的配置文件,使它能够把.inc文件也当作PHP文件来处理。否则,黑客们也许会猜到您的头文件名,然后用浏览器把头文件内容以纯文本格式显示出来。此时如果您的头文件中有些机密信息那就糟糕了。

注:在 PHP 4.3.5
之前,包含文件中的语法错误不会导致程序停止,但从此版本之后会。

那么,您用头文件来做什么呢?很简单!把对所有程序都通用的那些内容放到头文件里。象HTML文件头啦,脚注啦,数据库连接代码啦,还有您自己定义的一些函数什么的。把下面的文字拷贝到一个文件中,保存为header.inc。

2.条件引用

?php$db = mysql_connect(localhost, root);mysql_select_db(mydb,$db);?htmlheadtitle?php echo $title ?/title/headbodycenterh2?php echo $title ?/h2/center

include()与require()的功能相同,用法上却有一些不同,include()是有条件包含函数,而require()则是无条件包含函数,
例如下面例子,如果变量$somg为真,则将包含文件somefile.php:

然后再创建另外一个文件,名字是footer.txt,该文件可以包含一些程序结束时用到的一些文字和标记。

 

现在,我们再来创建一个文件,这个文件里面是真正的PHP程序代码。试一下下面的代码,当然,您要确认MySQL数据库服务器正在运行。

 代码如下

?php$title = Hello World;include(header.inc);$result = mysql_query(SELECT * FROM employees,$db);echo table border=1n;echo trtd名字/tdtd职位/trn;while ($myrow = mysql_fetch_row($result)) {printf(trtd%s %s/tdtd%s/trn, $myrow[1], $myrow[2], $myrow[3]);}echo /tablen;include(footer.inc);?

if($some){ include ‘somefile.php’; }

看到发生了什么事了吗?头文件里的内容被合并到程序中,PHP把所有的代码都执行了一遍。注意在包含header.inc头文件之前$title是如何定义的。在header.inc中的代码可以访问到它的值。这样,网页的标题就被改掉了。现在,您可以在任何程序中使用header.inc头文件了,您所要做的不过是在每个主程序中为$title变量取一个合适的值。

但无论$some取何值,下面的代码将把文件somefile.php包含进文件里:

头文件、HTML、条件判定语句,还有循环语句,这些东西加在一些,您就可以用最简练的代码,写出功能各异的各种复杂程序来。在与函数同时使用时,头文件更能发挥它的效力,我们后面就会看到。

 代码如下

if($something){   require ‘somefile.php’; }

下面的例子充分说明了这两个函数之间的不同

 代码如下

$i = 1;
while ($i < 3) {   require “somefile.$i.php”;   $i++; }

可以从以上这段代码中看出,每一次循环的时候,程序都将把同一个文件包含进去,很显然这不我们想要的,可以看出这段代码希望在每次循环时,
将不同的文件包含进来,如果要完成这个功能,只能使用函数include()

 代码如下

$i = 1;
while ($i < 3) {  
include “somefile.$i.php”;   $i++;
}

3.require用相对路径的时候

当A引用B,而B又引用了其他文件C时,C的路径如果是相对路径,则是相对于A的路径,而不是相对于B的’

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

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

5..文件引用方式

include有返回值,而require没有

 代码如下

$login = include(’test.php’);
if(!empty($login))
{   echo “文件包含成功”;
 }
else
{   echo “文件包含失败”;
 }

include()执行时需要引用的文件每次都要进行读取和评估,
require()执行时需要引用的文件只处理一次(实际上执行时需要引用的文件内容替换了require()语句)
可以看出若有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高,
若每次执行代码时相读取不同的文件或者有通过一组文件叠代的循环,就使用include(),
可以给想要包括的文件名设置变量,当参数为 include()时使用这个变量

 代码如下

<?
conn.php
$dbh=mysql_connect(‘localhost’,’root’,’123456′);
mysql_select_db(‘DB’,’$dbh’);
?>
在实际应用中,我们调用文件如:
require(“conn.php”)或者include(“conn.php”);
但是如果这样:
filename.php
require(“conn.php”);
function myfun($par1,$par2)
{包含对数据库处理的语句}
…..
myfun($par1,$par2);
…..
myfun($p1,$p2);
?>

 

总结

incluce在用到时加载
require在一开始就加载
_once后缀表示已加载的不加载
php系统在加载php程序时有一个伪编译过程,可使程序运行速度加快。但incluce的文档仍为解释执行
include的文件中出错了,主程序继续往下执行
require的文件出错了,主程序也停了
所以包含的文件出错对系统影响不大的话(如界面文件)就用include,否则用require
以下文档也适用于
require()。这两种结构除了在如何处理失败之外完全一样。include()
产生一个警告而 require()
则导致一个致命错误。换句话说,如果你想在遇到丢失文件时停止处理页面就用
require()。include()
就不是这样,脚本会继续运行。同时也要确认设置了合适的 include_path。
require()函数用给定文件的内容取代它本身,这一代替过程发生在PHP引擎编译代码期间,而不是在执行期间进行,它不象include()那样会首先进行计算。require()函数更多地用在静态元素中,而include()更多地用于动态元素中。与include_once()类似的是,require_once()将首先检查是否已经插入给定的代码,如果代码已经存在,就不再插入了。

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图