从PHP中的完整服务器路径剥离文档根

时间:2010-07-29 20:44:07

标签: php string

好的,我已经定义了一个PHP常量,指向服务器上的文件,如下所示:

define('SOME_FILE', str_replace('//', '/', str_replace('\\', '/', dirname(__FILE__) . '/foo-bar.txt')));

SOME_FILE将包含完整路径+文件名,可用于includefopen等PHP函数。现在,如果我想将此路径用作我的URL( X)HTML输出,我搞砸了。为此,我需要剥离文档根目录。

通常,$_SERVER['DOCUMENT_ROOT']在99%的PHP环境中设置,但它可能发生在配置不当,被用户覆盖甚至丢失的地方。

现在我要做的是define()基于SOME_FILE的另一个PHP常量,它将指向文件的实际URL(文档根路径被剥离)。

我知道我可以使用__FILE__$_SERVER['SCRIPT_NAME']的3-4行代码执行此操作(根据CGI 1.1规范而不是DOCUMENT_ROOT需要SCRIPT_NAME),strrpos和{ {1}},但我正在寻找一个用于定义声明的“一行”解决方案...

我使用的是PHP 5.1.0+。艾米建议欢迎!

2 个答案:

答案 0 :(得分:1)

最简单的解决方案可能是为远程URL提供第二组Consts。

define('ROOT_PATH', $_SERVER['DOCUMENT_ROOT']);
define('ROOT_URL', 'http://domain.com');
define('BLAH_PATH', ROOT_PATH . PATH_SEPARATOR . 'blah.php');
define('BLAH_URL', ROOT_URL . PATH_SEPERATOR . 'blah.php');

答案 1 :(得分:1)

    $docRoot = str_ireplace('/', '\\', $_SERVER['DOCUMENT_ROOT']); $f = str_ireplace($docRoot, '', $f);

行。所以我有点作弊。这是一行但有两个陈述。我可以做一个陈述,但它更难理解。只需在第二个语句中替换$ docRoot的第一个str_ireplace。