a.php
test/
     b.php
     c.php
     test1/
          d.php这是我的文件目录,根目录下有a.php和test文件夹,
test文件夹下有b.php、c.php还有test1文件夹,
test1文件夹下有d.phpa.php<?
echo '(a)';
include('test/b.php');
?>
-----------------------------------
b.php<?
echo '(b)';
include('test/c.php');
include('test1/d.php');
?>-------------------------------------
c.php<?
echo '(c)';
?>
-------------------------------------
d.php<?
echo '(d)';
?>
访问a.php会正常输出(a)(b)(c)(d)。疑问:在b.php中
include('test/c.php'); ---------------->路径是相对a.php
include('test1/d.php');---------------->路径是相对b.php
这两种方法都可以正常包含,是为什么?我记得在ASP里面只能用相对自身文件的路径的,怎么在PHP里面都可以呢(既可以是相对自身文件的路径,也可以是相对主文件的路径)?

解决方案 »

  1.   

    同楼上。INCLUDE相当于宏替换。
      

  2.   


    但是按照这么说的话,a文件就相当于
    <?
    echo '(a)';
    echo '(b)';
    include('test/c.php');
    include('test1/d.php');
    ?>
    那这样子的话不是路径会出错吗? 因为d.php相对于a.php是在test/test1目录下的
      

  3.   

    有两种解决办法,都是通过绝对路径:
    第一种:include(realpath("../").'\class\mysql.class.php')//这是在我写的程序里直接复制出来的,你看懂了就会了
    第二种://在要被包含的文件里加上这一句,不过我建议$path的命名为 “$文件名_path”
    $path = dirname(__FILE__)
    应该还有其它方法,只是鉴于本人技术薄浅尚未知道
      

  4.   

    记住一个原则,所有的包含语句最后都转换为以包含文件路径为基准的包含路径建议使用一个基本路径来作为所有的路径参考,例如__FILE__或者 $_SERVER['DOCUMENT_ROOT']