参考: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是有顺序,位置关系,而且是局部的。
 

include与file_get_contents区别的更多相关文章

  1. JSP(include指令与<jsp:include>动作的区别)

    <%@ page language= "java" contentType="text/html;charset=UTF-8" %><html ...

  2. [C] include <filename> 和 include "filename" 的区别

    在 C 语言中包含语句 #include <filename> 和 #include "filename" 的区别在于编译器的偏好,一般来说,使用双引号表示优先搜索当前 ...

  3. JSP -- include指令与include动作的区别

    JSP -- include指令与include动作的区别 (1)格式的区别: include指令:<%@include file = "文件名"%> include动 ...

  4. <jsp:include>和<%@include file=""%>的区别(简单了解)

    简单了解 include指令是编译阶段的指令,即include所包含的文件的内容是编译的时候插入到JSP文件中,JSP引擎在判断JSP页面未被修改,否则视为已被修改.由于被包含的文件是在编译时才插入的 ...

  5. include指令和include标签的区别

    区别 类别 语法 发生作用时间 包含的内容 转化成Servlet 编译时间 运行时间 include指令 <%@ include file="" %> 页面交换 实际内 ...

  6. ruby include和exclude区别

    很久没玩ruby了,今天看源码的时候,看到extend硬是缓不过神了,Google下extend和include的区别,做个记录 在class中include module, 那么module中的方法 ...

  7. jsp 2种include标签的区别

    众所周知,jsp中有2种标签用于包含其他jsp或者文件 1.include指令,其实是java代码 <%@ include file="xxx.jsp"%> 2.jsp ...

  8. Android: Custom View和include标签的区别

    Custom View, 使用的时候是这样的: <com.example.home.alltest.view.MyCustomView android:id="@+id/customV ...

  9. VC2010中"Include Directories" 和 "Additional Include Directories"的区别

    右键一个Project,可以发现有两个地方设置Include的相关目录: 1. VC++ Directories -> Include Directories2. C/C++ -> Gen ...

随机推荐

  1. 2018年这些UI设计趋势正在流行,跟上必拿高薪!

    数字设计领域和时尚圈是一样的,总会有各种各样的趋势让人眼花缭乱.无论是用户界面的视觉元素,还是用户体验的细节,总有许多值得说道的新玩法和新方向.就目前来看,UI设计的大趋势是更加大胆新颖的视觉设计,通 ...

  2. OSGi 系列(三)之 bundle 详解

    OSGi 系列(三)之 bundle 详解 1. 什么是 bundle bundle 是以 jar 包形式存在的一个模块化物理单元,里面包含了代码,资源文件和元数据(metadata),并且 jar ...

  3. 设计模式之Adapter设计模式

    这个设计模式是我这两天刚学的,这儿算是我的读书笔记发布出来是供大家一起学习,后面有我自己的感悟,下面是我网上整理的 以下情况使用适配器模式 • 你想使用一个已经存在的类,而它的接口不符合你的需求. • ...

  4. 2018.09.30 bzoj3551:Peaks加强版(dfs序+主席树+倍增+kruskal重构树)

    传送门 一道考察比较全面的题. 这道题又用到了熟悉的kruskal+倍增来查找询问区间的方法. 查到询问的子树之后就可以用dfs序+主席树统计答案了. 代码: #include<bits/std ...

  5. 2018.09.12 poj2376Cleaning Shifts(线段树+简单dp)

    传送门 貌似贪心能过啊%%%. 本蒟蒻写的线段树优化dp. 式子很好推啊. f[i]表示覆盖1~i所需的最小代价. 那么显然对于一个区间[li,ri]" role="present ...

  6. 多块盘制作成一个lvm

    1.创建pv[root@autodeploy nfs]# pvcreate /dev/vdd1WARNING: xfs signature detected on /dev/vdd1 at offse ...

  7. nodejs express hi-cms

    今天看一下hi-cm是怎么写的,理解一下流程,看一些亮点 它使用express3.x写的 1.app.set, app.get app.set('port', 3000); app.get('port ...

  8. 日期函数、时间函数总结(MySQL 5.X)

    一.MySQL 获得当前日期时间 函数1.1 获得当前日期+时间(date + time)函数:now()mysql> select now(); +---------------------+ ...

  9. sqlserver 实现数据变动触发信息

    1.建立存储过程,功能是动态写入文件中信息,可以在触发器或存储过程调用. SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO create proc [d ...

  10. EasyUI 让dialog中的treegrid的列头固定

    先上效果: 最主要是在treegrid要加上"fit:true "如果不加那么就会用diglog的滚动条,导致treegrid的头就没办法固定. Code<div id=&q ...