【问题标题】:Absolute path issues in PHP on localhost in OS XOS X 本地主机上 PHP 中的绝对路径问题
【发布时间】:2010-10-06 06:21:41
【问题描述】:

我在 PHP 中定义的绝对路径有一些问题。 我定义了 SITE_ROOT APP_PATH 像这样:

defined('SITE_ROOT') ? null : 
define('SITE_ROOT', str_replace('//','/',dirname(__FILE__)) );

defined('APP_PATH') ? null : define('APP_PATH', SITE_ROOT.DS.'application');

在这样的应用程序中使用 APP_PATH 时:

echo APP_PATH;

...这是我得到的

/Users/user/Sites/MyWebsite/application

我想要的是输出:

localhost/application

有什么不笨拙的方法吗?

我的用例是使用与 HTML 相呼应的 APP_PATH(已经用于完成我所有的 require()'s)以避免在href's 的 URL 中出现相对路径问题。

【问题讨论】:

    标签: php osx-snow-leopard root absolute-path


    【解决方案1】:

    __FILE__ 常量包含文件路径,仅此而已。查看$_SERVER['REQUEST_URI'] and $_SERVER['HTTP_HOST'] 以找出用于调用脚本的 URL。这是环境信息,必须由启动 PHP 脚本的 Web 服务器(例如 Apache)提供,它不是 PHP 本身就知道的。

    【讨论】:

    • 太好了,谢谢!由于我的计划是让这段代码轻松地从我的本地开发环境移植到我的生产环境,你会建议建立两个单独的路径吗?一种是使用$_SERVER['HTTP_HOST'],另一种是上面提到的。或者这种方法有什么问题吗?如果您部署在多台服务器上,是否有任何潜在的问题?
    • @Josh 首先,您不应该在链接中包含主机,而是使用没有主机的绝对路径(即/application/page/foo)。这解决了相对 URL 问题,而不会使事情变得过于复杂。其次,这真的取决于你的应用程序如何优雅地做到这一点。如果您使用的是 Dispatcher 模型(始终调用一个特定的 .php 文件,它将请求分派到其他文件),那么确定“您在哪里”相对简单,因此您不必进行任何系统特定配置.查看任何流行的 PHP 框架作为示例。
    • 我有一个 initialize.php 文件,它可以按照我的想法执行。我很确定$_SERVER['HTTP_HOST'] 只是在做我应该在初始化文件中手动输入的内容。然后我可以使用VIEW_URL 路径来访问视图。现在试试看。
    • 是的,基本上我真正需要的是这个:defined('VIEW_URL') ? null : define('VIEW_URL', '/application/views'); 这样我就可以在应用程序的任何位置调用VIEW_URL,而无需不断找出绝对 URL。
    【解决方案2】:

    我认为你可以使用是不是错了:

    $path = str_replace("/Users/user/Sites/MyWebsite", "localhost",$appPath);
    echo($path);
    //returns: localhost/application
    

    欢迎批评。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      • 2011-04-04
      • 1970-01-01
      • 2016-04-11
      • 2014-07-31
      • 2017-10-23
      相关资源
      最近更新 更多