【发布时间】:2011-11-07 13:42:46
【问题描述】:
我有一个类包含在不同目录中的一堆其他脚本中。有时,此类需要发出重定向到位于同一目录中的另一个文件。我无法让它以一致的方式工作。
例如:
// file.php
require('../class/include.php');
// include.php
if(/* some condition */) {
$mydir = '...'; // should be '../class' in this example
header("Location: $mydir/setup.php");
die();
}
我已经完成了以下工作并取得了可喜的结果,但它似乎并不总是有效,我不确定我是否使用了错误的服务器变量,或者配置对于不起作用的实例是否不正确.
$len = strlen($_SERVER['DOCUMENT_ROOT']);
$mydir = str_replace('\\', '/', __FILE__); // switch slashes for Windows systems
$mydir = substr($mydir, $len, strrpos($mydir, '/') - $len + 1);
注意我想要 URL,路径没有帮助,因为我无法重定向到 /var/wwwroot/some/directory 或 C:\domains\mydomain\some\directory
这可能更像是$_SERVER['DOCUMENT_ROOT'] 的问题。请注意,我从__FILE__ 中剥离了$_SERVER['DOCUMENT_ROOT'] 的长度以获取Web 可访问部分。
编辑
为了简单一点,有没有办法为包含的文件而不是父文件获取 $_SERVER['REQUEST_URI'] 或 $_SERVER['PHP_SELF'] 的等价物?
【问题讨论】:
-
使用
DIRECTORY_SEPARATORPHP 常量代替在 Windows 中切换斜线。 php.net/manual/en/dir.constants.php -
不知道这个常数。谢谢。
-
关于如何不规划文件布局以及为什么对象封装是个好主意的对象课程。