PHP的路径问题折(魔)过(或正在...)几乎所有的程序员,包括在下,现在将有关该问题在这里总结一下,若能给你予帮助,不甚荣幸.
先了解几个常识:
(1)dirname(__FILE__),它是返回当前脚本的决对路径,例:/opt/lampp/htdocs/dir 。并且最重要的是不会因为该脚本被require或include而改变。即:a.php中有这样的语句
$basedir = dirname(__FILE__);
echo $basedir;
若b.php(和a.php不在一个文件夹下)中 require_once '../a.php';也是输出a.php的文件路径,而不是b.php的。
(2) require_once 'a.php' 和 require_once './a.php' 不同,第二个明确的指出了是当前文件夹下的a.php。不用前找后找。
再说我们的问题:在某一个文件夹下,我们建生了两个文件,a.php 和 b.php ,在该文件夹的父文件夹我们建立一个文件,c.php 。其中a.php需要包含b.php:require_once './b.php'; 然后c.php要包含a.php :
require_once './somedir/a.php';问题就出来了,肯定会出错,说什么找不到什么什么的......
问题的原因就是在于参照点上,想一下,c.php引用了a.php这没有错,错是出在了a.php上面,它引用了b.php,但是c.php执行的时候也是用了a.php脚本文件中的require_once'./b.php',它哪里找的到?对吧,对于c.php来说,当前文件夹下可不存在b.php。的确,把脚本中的./去掉,可以成功运行。可是当我在与c.php同一个文件夹中再建立一个b.php,它还是会出错的。所以,这个方法不可取。所以,要引用路径的时候,一定要加上./来表是是引用的当前文件夹的某某文件。
之所以上面说这么多,有一个有关脚本质量的问题,我们要真正的避开上面的错误,可以修改a.php里面的脚本,改成require_once'./somedir/b.php' 肯定不会出错。可是兼容性的问题很容易的就暴露出来了,要是我不在c.php上引用a.php,而是在别的文件夹中引用,那可真是没法改喽!
解决方法:
require_once dirname(__FILE__).'/b.php';
前面说过dirname(__FILE__)会返回当然脚本的绝对路径,不管被谁包含。
先了解几个常识:
(1)dirname(__FILE__),它是返回当前脚本的决对路径,例:/opt/lampp/htdocs/dir 。并且最重要的是不会因为该脚本被require或include而改变。即:a.php中有这样的语句
$basedir = dirname(__FILE__);
echo $basedir;
若b.php(和a.php不在一个文件夹下)中 require_once '../a.php';也是输出a.php的文件路径,而不是b.php的。
(2) require_once 'a.php' 和 require_once './a.php' 不同,第二个明确的指出了是当前文件夹下的a.php。不用前找后找。
再说我们的问题:在某一个文件夹下,我们建生了两个文件,a.php 和 b.php ,在该文件夹的父文件夹我们建立一个文件,c.php 。其中a.php需要包含b.php:require_once './b.php'; 然后c.php要包含a.php :
require_once './somedir/a.php';问题就出来了,肯定会出错,说什么找不到什么什么的......
问题的原因就是在于参照点上,想一下,c.php引用了a.php这没有错,错是出在了a.php上面,它引用了b.php,但是c.php执行的时候也是用了a.php脚本文件中的require_once'./b.php',它哪里找的到?对吧,对于c.php来说,当前文件夹下可不存在b.php。的确,把脚本中的./去掉,可以成功运行。可是当我在与c.php同一个文件夹中再建立一个b.php,它还是会出错的。所以,这个方法不可取。所以,要引用路径的时候,一定要加上./来表是是引用的当前文件夹的某某文件。
之所以上面说这么多,有一个有关脚本质量的问题,我们要真正的避开上面的错误,可以修改a.php里面的脚本,改成require_once'./somedir/b.php' 肯定不会出错。可是兼容性的问题很容易的就暴露出来了,要是我不在c.php上引用a.php,而是在别的文件夹中引用,那可真是没法改喽!
解决方法:
require_once dirname(__FILE__).'/b.php';
前面说过dirname(__FILE__)会返回当然脚本的绝对路径,不管被谁包含。