好的,我已经定义了一个PHP常量,指向服务器上的文件,如下所示:
define('SOME_FILE', str_replace('//', '/', str_replace('\\', '/', dirname(__FILE__) . '/foo-bar.txt')));
SOME_FILE
将包含完整路径+文件名,可用于include
,fopen
等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+。艾米建议欢迎!
答案 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。