有两个目录A,B
在A中有个文件叫test.php的文件包含B中的test2.php,test2.php包含A中的test3.php,那么这样会造成什么问题?也就是问大家这样一个问题:被包含的文件中的require(),是在被包含前执行,还是在被包含后执行?

解决方案 »

  1.   

    被包含的文件中的require(),是在被包含前执行,还是在被包含后执行?
    =================================================
    sorry,突然发现我没怎么看懂... :-(
      

  2.   

    因为两者处于同深的层次,所以看不出效果,大家再看下面这个:www目录下有一个文件 love.php ,以及目录A、目录B
    其中,A目录下有一个文件叫1.php
    B目录下有个文件叫2.php
    现在:
    love.php:  require('A/1.php');
    1.php:     require('../B/2.php');如果是包含后再执行,那么1.php中的require的路径将会跑到love.php中,也就是从love.php所在目录开始来寻找'../B/2.php',很显然,这样是找不到的。
    但是经我测试后发现,这样写包含竟然不会出错,那么PHP是怎么来处理的呢?
      

  3.   

    如果是包含后再执行,那么1.php中的require的路径将会跑到love.php中,也就是从love.php所在目录开始来寻找'../B/2.php',很显然,这样是找不到的。
    ================================================================
    为什么说找不到呢?
    PHP是先找1.php,找到后,再在1.php找2.php...
      

  4.   

    不会吧,这样会找不到2.php的......
      

  5.   

    先确定下面两个条件吧,呵呵
    -------------------------------
    1.查看php.ini是否屏蔽了错误信息.
    2.查看www同级目录是否存在a文件夹,而且里面好有个2.php.
      

  6.   

    2.查看www同级目录是否存在b文件夹,而且里面好有个2.php.
      

  7.   

    经再次测试后发现,会报错:
    Warning: require() [function.require]: open_basedir restriction in effect. File(../B/2.php) is not within the allowed path(s): (F:/LanLin/MyWorks/www/;F:/LanLin/ProgramFiles_2/APMServ5.2.0/PHP/uploadtemp/;F:/LanLin/ProgramFiles_2/APMServ5.2.0/PHP/sessiondata/) in F:\LanLin\MyWorks\www\A\1.PHP on line 2Warning: require(../B/2.php) [function.require]: failed to open stream: Operation not permitted in F:\LanLin\MyWorks\www\A\1.PHP on line 2Fatal error: require() [function.require]: Failed opening required '../B/2.php' (include_path='.;C:\php5\pear') in F:\LanLin\MyWorks\www\A\1.PHP on line 2
    以上只是对我现在做的项目的一个模拟,但是项目中竟然不报错(使用require('/***')从根目录包含会报错),我也不管了,反正能用就行,肚子也饿了,回家吃饭是也......
      

  8.   

    一般都有配置文件,就像 mynamesucks 说的,在里面有项目路径的配置,只要配置文件引用正确就行了,下面的其他文件都可以 require_once( "$dir[inc]db.inc.php" ); 用,其中$dir[inc]在配置文件里面定义
      

  9.   

    路径以最外层文件为基准点。
    /var/www/html/main.php
    /var/www/html/include/a.php
    /var/www/html/include/b.phpmain.php
    require("include/a.php");a.php
    require("include/b.php");