include与file_get_contents区别

参考:http://www.cnblogs.com/bgwan/archive/2013/03/13/2957215.html

一,先来说file_get_contents

这个函数就是把一个文件里面的东西 (字符)全部return出来。可以放一个变量里面,也就是字符串变量了,也可以字符串直接echo。相当于fopen,fread,fclose的组合。比较简单。

现在要注意几点:

1、任何文件都适用,无论扩展名是什么,都可以把里面的内容当字符串拿出,返回。

2、拿出来的字符串不会再在php中解释。尽管拿出的字符串包含php元素。这点很重要!

例如:

a.test_file(扩展名夸张点)

$a;

b.php

<?php
$a = 10;
echo file_get_contents(‘./a.test_file‘);
echo ‘<br>‘;
echo "$a";

输出:

$a

10

可以看到,哪怕我们看到的形式是 echo "$a";(这里不知道是单引还是双引)。但还是不会再执行。

补充一下,如果a.test_file有这样一段:<?php echo "aaa"; ?>是输出不了的。但var_dump可以看到完整return的东西,用php解释器也是可以解释到的,单击右键看源代码也可以看到,所以我想,应该是浏览器的问题,它看到<?就开始不执行,直到遇上>才完结,再执行后面的。也不能说执行,是输出吧。

从这里更可以说明一个问题:file_get_contents返回的字符串对php代码半点影响都没有,不会去执行它的。

要想执行字符串的代码,可以用eval($str)这个函数。

二,再说include(就是require,reqiuire_once,include_require这一类)

1、首先最重要一点,include是针对文档的代码结构的。也就是说,include进来,成了这个文件的其中一部分源代码。

2、include可以引进任何文件,任何内容(不单单是php文件),因为,也是以字符串形式引入的!

例如:

a.test_file(扩展名夸张点)

sdfksdghkdjglshdg 

b.php

<?php
include (‘./a.test_file‘);
echo ‘<br>kkk‘;

输出:

sdfksdghkdjglshdg

kkk

所以,验证了上面的,可以include任何文件任何内容成为文档源代码一部分。

我猜想:include进来后应该类似这样子的:

sdfksdghkdjglshdg
<?php
     echo ‘<br>kkk‘;
?>

应为在php文件的<php>标签外,可以放任何东西。

3、include的文件没经过编译。因为php本来就没有编译只一回事,都是边解释边执行。有些语言可以在编译前处理好include的东西,但php不是。

举个例子:

<?php
foo();

function foo() {
     echo "hi!";
}
?>

执行后会输出:hi!

也就是说,这个函数哪怕定义在调用之后,一样能执行。这是php的原生功能。

现在我们把foo函数抽出来,再include进来看看。

a.test_file(扩展名夸张点)

<?php
     function foo() {
     echo "hi!";
}

b.php

<?php
foo();
include "./a.test_file";

程序会报错,说找不到该函数。

现在我们就可以看清楚一点了:include不是预处理,而且引入的代码结构是局部的,跟引入顺序、引入位置有关!

这里还说一下,刚才的a.test_file文件,如果我们没有<?php ?>标签只有

function foo() {
     echo "hi!";
}

include进来会怎样?

没有<?php ?>,php会把他看做普通的字符串,不会执行。

三,总结

1、include与file_get_contents都是把任何文件内容以字符串形式导入。

2、include把导入的字符串当成当前文件的代码结构,而file_get_contents只是返回字符串。这是两个最大的不同。

3、关于字符串执行的问题,file_get_contents返回的字符串失去了被执行的能力,哪怕字符串里面有<?php ?>,一样能拿出来但不执行。而include导入的字符串,如果被导入的文件有<?php,那就成为php代码的一部分。如果没有<?php,只是把它当做源文件<?php ?>外的一部分。

4、include不是预处理,所以,include是有顺序,位置关系,而且是局部的。

时间: 2024-08-29 12:53:37

include与file_get_contents区别的相关文章

include指令和include动作的区别

include指令和include动作的区别 1.include指令 include可以在JSP页面转换成Servlet之前,将JSP代码插入其中.它的主要优点是功能强大,所包含的代码可以含有总体上影响主页面的JSP构造,比如属性.方法的定义和文档类型的设定.它的缺点是难于维护只要被包含的页面发生更改,就得更改主页面,这是因为主页面不会自动地查看被包含的页面是否发生更改. include指令的语法格式如下: <%@ include file="Relative Url"%>

Asp.net动态页面静态化之include和parse区别

Asp.net动态页面静态化之include和parse区别    #include就是在模版中在将其他模版包括进来,就好比网站的头部,尾部,广告模版等等,这些内容都是相同的时候,就可以做成一个单独的模版供各处引用. #parse的用法跟#include相类似,如果将上面的代码改成#parse之后,效果是一样的,#parse的特殊功能在于,它可以解析Nvelocity元素,比如,body.html 模版使用Nvelocity变量 $body ,如果使用#parse引用head.html和foot

图解sendRedirect,include,forward的区别

原文:http://blog.csdn.net/java2000_net/article/details/3002763 一.sendRedirect 使用方式: servlet和jsp里面一样 response.sendRedirect(); 说明: 服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求指定的地址,一般来说,你会把需要的参数放在转发的地址里面. 注意:使用request.setAttribute的内容,不能读取了,你可以用session代替,或者用include,forward

[JSP]JSP中include指令和include动作的区别

include指令是编译阶段的指令,即include所包含的文件的内容是编译的时候插入到JSP文件中,JSP引擎在判断JSP页面未被修改,否则视为已被修改.由于被包含的文件是在编译时才插入的,因此如果只修改了include文件内容,而没有对JSP修改,得到的结构将不会改变,所以直接执行已经存在的字节码文件,而没有重新编译.因此对不经常变化的内容,用include指令是合适的,如果需要的内容是经常变化的,则需要动作元素<jsp:include>.下面将详细区分他们之间的不同 1.include指

头文件---#include&lt;***.h&gt;和#include&quot;***.h&quot;的区别

采用"< >"方式进行包含的头文件表示让编译器在编译器的预设标准路径下去搜索相应的头文件,如果找不到则报错. 例如:VS的安装目录\Microsoft Visual Studio 9.0\VC\include下面就包含了标准库的头文件. 第二种方式表示先在工程所在路径下搜索,如果失败,再到系统标准路径下搜索. 所以,特别要注意的是,如果是标准库头文件,那么既可以采用<>的方式,又可以采用" "的方式,而用户自定义的头文件只能采用"

&lt;jsp:include page&gt;和&lt;%@ include file%&gt;的区别

<%@include...> 与<jsp:include....>指令的区别 include指令: 在翻译阶段(将JSP页面转换成servlet的阶段),include会读入指定的页面中的内容,并将这些内容和原来的页面融合在一起 <%@ include file="header.html"%> 引入的页面可以只包含静态内容(例如HTML),也可以是一个普通的JSP页面.主页面和引入的页面融和在一起(引入的页面只是最为普通的文本进行融合,并不对动态内容

JSP---include指令和include动作的区别

1.include指令是编译阶段(即jsp页面被转化为servlet之前)的指令,即include所包含文件的内容在编译时被插入主页面中.(静态包含) 2.include动作是主页面被请求时,将次级页面的输出包含进来.(动态包含) 例子://subpage.jsp<%! int num=0; %> //mainpage.jsp<html> <body>  <%@ include file="subpage.jsp" %>  <%=

&lt;jsp:include&gt;和&lt;%@include file=&quot;&quot;%&gt;的区别(简单了解)

简单了解 include指令是编译阶段的指令,即include所包含的文件的内容是编译的时候插入到JSP文件中,JSP引擎在判断JSP页面未被修改,否则视为已被修改.由于被包含的文件是在编译时才插入的,因此如果只修改了include文件内容,而没有对JSP修改,得到的结构将不会改变,所以直接执行已经存在的字节码文件,而没有重新编译.因此对不经常变化的内容,用include指令是合适的,如果需要的内容是经常变化的,则需要动作元素<jsp:include>. include指令 include可以

include require的区别

require include的区别载入: require 在程序执行器引入文件变成程序的一部分 如同 C语言的include include 放在流程控制处理部分.程序到这里时才读入进来 require 直接把文本内容替换进来 不管这些语句是否执行 include 可以按照不同条件包含不同的文件 if(true) include '??'; 还可以在循环体中包含不同的文件 错误处理: require 若发生错误 程序报错中断 include 若发生错误 报警告 继续执行返回值 require