我在许多其他php文件中都包含一个web应用程序根目录中的config.php文件.所以他们中的大多数都有这样一条线:
require_once("config.php");
或者有时候
require_once("../config.php");
甚至
require_once("../../config.php");
但是我第一次做对了.在读取其中一个文件时,我无法弄清楚php将会考虑当前的工作目录.它显然不是包含require_once()调用的文件的目录,因为我可以在同一目录中有两个文件,它们具有config.php的不同路径.
我有一种情况,其中一个路径是正确的刷新页面,但ajax可以更新页面的一部分需要一个不同的路径到require_once()语句中的config.php;
秘密是什么?从哪条路径评估?
拍摄,我担心这不会是一个常见的问题 - 这是在Windows 2.2上运行的apache 2.2.8和PHP 5.2.6下发生的.
PHP的当前工作目录是被调用脚本文件所在的目录.如果您的文件看起来像这样:
/A foo.php tar.php B/ bar.php
如果你调用foo.php(例如:http://example.com/foo.php),工作目录将是/ A /.如果你调用bar.php(例如:http://example.com/B/bar.php),工作目录将是/ A/B /.
它有些棘手.让我们说foo.php是这样的:
而bar.php是:
如果我们调用foo.php,那么bar.php将成功调用tar.php,因为tar.php和foo.php在同一个目录中,恰好是工作目录.如果您改为调用bar.php,它将失败.
通常,您将在所有文件中看到:
require_once( realpath( dirname( __FILE__ ) ).'/../../path/to/file.php' );
或配置文件:
// config file define( "APP_ROOT", realpath( dirname( __FILE__ ) ).'/' );
使用其余文件:
require_once( APP_ROOT.'../../path/to/file.php' );
我喜欢这样做:
require_once(dirname(__FILE__)."/../_include/header.inc");
这样,您的路径始终可以相对于当前文件位置.