zoukankan      html  css  js  c++  java
  • 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是有顺序,位置关系,而且是局部的。
     
  • 相关阅读:
    Python网络爬虫——bs4基本用法
    Python网络爬虫——requests模块(1)
    yii gii配置ip限制使用gii
    openfire连接数据库mysql
    js 提示条
    jquery滚动条平滑滑动
    yii2.0 添加组件baidu ueditor
    yii添加验证码 和重复密码
    css图标库 font-awesome.min.css
    yii配置访问路由权限配置
  • 原文地址:https://www.cnblogs.com/usa007lhy/p/5868638.html
Copyright © 2011-2022 走看看