【问题标题】:Public URL of a PHP pagePHP 页面的公共 URL
【发布时间】:2015-06-25 18:06:29
【问题描述】:

访问时

www.example.com/test1/test2/index.php

(服务器上的文件是/var/www/website1/test1/test2/index.php

我们得到:

<base href="<?php echo __DIR__; ?>">  
// bad:  <base href="/var/www/website1/test1/test2/">

<base href="<?php echo dirname($_SERVER['REQUEST_URI']); ?>">
// bad: <base href="/test1/test2">
//      a <base href> dir must end with a / (or \ on Windows)

<base href="<?php echo rtrim(dirname(parse_url($_SERVER['PHP_SELF'], PHP_URL_PATH)), '/') . '/'; ?>">  
// good:  <base href="/test1/test2/">

最后一个解决方案有效 (*),但我觉得它有点脏/ hack。有没有更简洁的解决方案来设置 &lt;base href="..."&gt; 当前 PHP 文件的目录?

(*) 事实上,最后一个解决方案不适用于 Windows 服务器,因为添加 '/' 会破坏 &lt;base href&gt;(应该是 '\')。

【问题讨论】:

  • 您需要什么价值?不清楚你的问题。
  • @PedroLobito 我想将&lt;base href="..."&gt;设置为当前PHP文件的目录(此目录必须以/\ 结尾,具体取决于平台)
  • 检查我的答案,这三个选项中的任何一个都适合您吗?
  • 您可以使用DIRECTORY_SEPARATOR PHP 常量,它会根据您的平台动态加载,而不是斜杠/反斜杠,这只是您的问题。
  • @LukasHajdu 似乎这是问题所在:stackoverflow.com/questions/29731957/…

标签: php href dir


【解决方案1】:
dirname($_SERVER['SCRIPT_NAME']);

应该可以。否则这样做:

在 PHP

substr(dirname(__FILE__), strlen($_SERVER['DOCUMENT_ROOT']));

或 PHP >= 5.3:

substr(__DIR__, strlen($_SERVER['DOCUMENT_ROOT']));

根据您的 cmets 进行更新:

如果脚本在 Windows 上运行,请使用适用于 linux 的解决方案,相应地修改路径。

检测服务器操作系统:

if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
    echo 'This is a server using Windows!';
} else {
    echo 'This is a server not using Windows!';
}

if (DIRECTORY_SEPARATOR == '/') {
    // linux
}

if (DIRECTORY_SEPARATOR == '\\') {
    // windows
}

【讨论】:

  • 问题是,为了成为&lt;base href=""&gt;,我们需要一个斜杠或反斜杠
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多