您的位置:澳门402永利com > 澳门402永利com网络 > require_once用法与相对目录要小心谨慎,函数相对

require_once用法与相对目录要小心谨慎,函数相对

发布时间:2019-10-03 06:14编辑:澳门402永利com网络浏览(99)

    即便有如下多少个文件, c.php a.php b.php 对应的寄存目录为:localhost/ localhost/ localhost/demo

    wwwroot   //网站根目录 相对路线为: F:/wwwroot

     代码如下

    -- folder_a // 文件夹A

    c.php
    require_once("a.php");
    require_once("demo/b.php");
    B::demo();a.php
    class A
    {
    }

       file_a_a.php

    b.php的源委相比风趣,因为它自身要三番八次 CLASS A 所以自个儿把a.php也引进进来了

       file_a_b.php

     代码如下

       file_a_c.php

    require_once("../a.php");
    class B extends A
    {
        public static function demo()
        {
        echo "xx";
        }
    }

    -- folder_b // 文件夹B

    举办localhost/c.php 系统报错,报错消息如下
    Warning: require_once(../a.php) [function.require-once]: failed to open stream: No such file or directory in F:wwwdemob.php on line 2
    Fatal error: require_once() [function.require]: Failed opening required '../a.php' (include_path='.;C:php5pear') in F:wwwdemob.php on line 2但是,高兴的觉察,纵然去掉b.php里面包车型客车require_once语句,试行平常,那么料定是require_once语句定义多了吗?原因正是Class A重定义了一次?然则不会啊。借使自己只在c.php里面加require_once(‘a.php’);那条语句,哪怕小编写四次也是没错的,那到底是咋回事呢?
    由来正是,b.php定义的目录和c.php实施文书的目录层级分化,导致在c.php里面require_once语句有两条。使其一定于

       file_b_a.php

     代码如下

       file_b_b.php

    require_once("a.php");
    require_once("../a.php");
    class B extends A
    {
        public static function demo()
        {
        echo "xx";
        }
    }
    B::demo();

       file_b_c.php

    案由找到了,因为在c.php里面,其相对目录 “..”正是c.php的上一层了,导致文件找不到报错。
    由此,我们的结论是,在 PHP 里面,使用require_once的时候,存在不相同层级关系,且有绝对目录的施用那么应当要留心,小心。

    -- index.php

    *************************************************************

    本条目款项录等级次序已经很精晓了:

    wwwroot为根目录,上面有index.php文件和folder_a,folder_b五个文件夹

    那八个公文夹分别有3个php文件

    先来看index.php文件的开始和结果:

     代码如下

    <?php

         require_once("folder_a/file_a_a.php");

         echo "文件folder_a_a.php被含有成功";

    ?>

    再来看folder_a/folder_a_a.php文件的剧情:

     代码如下

    <?php

         require_once("../folder_b/file_b_a.php");

         $x = new X();

         $x.printInfo();

    ?>

    最后再来看看folder_b/folder_b_a.php文件的内容:

     代码如下

    <?php

         class X{

              function printInfo(){

                   echo 'success;

              }

         }

    ?>

    ok 假如本人今日径直运转 floder_a/file_a_a.php

    那正是说会输出: success

    一经小编运维 wwwroot下的index.php

    那正是说会报错,原因是找不到含有文件:file_b_a.php

    但是要是本人在具备的require_once()中加入 dirname(__FILE__).'/'

    那么不论运营 file_a_a.php 依然 index.php 都能够健康输出

    *********************************************************

    问题:

    自己先是次使用的是相对路线,所以再一次满含的时候就出错了

    而自个儿第4回采取的是相对路线,所以不出错.不过自己依旧有一点困惑:

    自身先深入分析了以下使用相对路线会出错的开始和结果:

    自家运维index.php,它能找到 folder_a目录,也能找到该目录下的file_a_a.php,于是它就把 folder_a/file_a_a.php 里的剧情复制到了index.php 的率先行(包涵语句的这行),然后再持续运维(也便是运营包罗过来的内容),由此此时等于是在index.php中运维file_a_a.php 中的require_once('../folder_b/file_b_a.php'); 它依照当前index.php的岗位去找那个路子文件(file_b_a.php),当然找不到啦,所以它出错了.

    可是作者使用相对路线的时候不是完全一样的道理呢?可为什么它就不出错?大概那句话大家不怎么雾里看花了,我来详细表达(遵照程序的运维顺序来注明).

    次第先运维 index.php(注意此时自个儿加上了 dirname(__FILE__),所以当前是相对路径),

    index.php先运转第一句代码:require_once(dirname(__FILE__).'/'.'folder_a/file_a_a.php');

    dirname(__FILE__) 正是 f:/wwwroot/ 所以那句代码满含的路子也便是:

    f:/wwwroot/folder_a/file_a_a.php

    以此路子是未可厚非的,由此没难题是吗

    ok 第一步正确完结

    接下来它就把 file_a_a.php 中的代码复制到的 index.php 的那个地方:

    下一场仍然持续运维: 那是也正是在index.php 中运作file_a_a.php 中的全体代码,那么大家来走访它运转那多少个代码?

     代码如下

    <?php

         require_once(dirname(__FILE__).'/'."../folder_b/file_b_a.php");

         $x = new X();

         $x.printInfo();

    ?>

    对正是这几个,供给小心的是,那么些代码已经被复制到了index.php,也正是说,以往index.php的从头到尾的经过实在就成为了:

     代码如下

    <?php

         require_once(dirname(__FILE__).'/'."../folder_b/file_b_a.php");

         $x = new X();

         $x.printInfo();

         echo "文件folder_a_a.php被含有成功";

    ?>

    小编们来看个注意事项

    借使有如下四个文件, c.php a.php b.php 对应的存放目录为:localhost/ localhost/ localhost/demo

     代码如下

    c.php

    require_once("a.php");
    require_once("demo/b.php");
    B::demo();a.php
    class A
    {
    }

    b.php的源委相比风趣,因为它和煦要延续 CLASS A 所以本身把a.php也引进进来了

     代码如下

    require_once("../a.php");
    class B extends A
    {
        public static function demo()
        {
        echo "xx";
        }
    }

    实行localhost/c.php 系统报错,报错音信如下
    Warning: require_once(../a.php) [function.require-once]: failed to open stream: No such file or directory in F:wwwdemob.php on line 2
    Fatal error: require_once() [function.require]: Failed opening required '../a.php' (include_path='.;C:php5pear') in F:wwwdemob.php on line 2不过,欣喜的意识,如若去掉b.php里面的require_once语句,施行例行,那么势必是require_once语句定义多了吧?原因正是Class A重定义了三次?不过不会啊。假使作者只在c.php里面加require_once(‘a.php’);那条语句,哪怕作者写一遍也是没有错的,那究竟是咋回事呢?
    案由就算,b.php定义的目录和c.php实行文书的目录层级分化样,导致在c.php里面require_once语句有两条。使其一定于

     代码如下

    require_once("a.php");
    require_once("../a.php");
    class B extends A
    {
        public static function demo()
        {
        echo "xx";
        }
    }
    B::demo();

    原因找到了,因为在c.php里面,其绝对目录 “..”正是c.php的上一层了,导致文件找不到报错。
    为此,大家的下结论是,在 PHP 里面,使用require_once的时候,存在不相同层级关系,且有相对目录的应用那么明确要小心,小心。

    require_once相当的粗略用但在动用时大家尽量选取相对路线了。

    本文由澳门402永利com发布于澳门402永利com网络,转载请注明出处:require_once用法与相对目录要小心谨慎,函数相对

    关键词:

上一篇:实例教程

下一篇:没有了