【问题标题】:Relative path not working as expected in PHP?相对路径在 PHP 中没有按预期工作?
【发布时间】:2013-10-15 19:04:05
【问题描述】:

我正在使用我在 Code Canyon 上获得的名为 XCRUD 的脚本。顾名思义,它创建 CRUD 表单。但是当服务器发生变化(即本地开发到生产)时,我无法让它工作。

它的配置包括在一个配置类中设置一堆属性。其中一个特别是文件路径:

public static $scripts_url = 'xcrud'; 
// URL to the xCRUD folder, not real path, without a trailing slash, can be relative, 
e.g. 'some_folder/xcrud' or absolute, e.g. 'http://www.your_site.com/some_folder/xcrud'

我遇到的问题是我似乎无法找到一种方法来输入在多个服务器位置实际工作的相对路径。

例如,假设我要处理以下 3 个环境:

  1. 本地开发:http://localhost:8888/site/

  2. 生产测试:http://urltest.com/dept/site/

  3. 生产现场:http://url.com/dept/site/

如果我将 xcrud 路径设置为 site/xcrud,它适用于 1,但不适用于 2 或 3。所以它的行为方式与我认为的相对路径不同。

我当前的“解决方案”是一个 switch 语句,它基于$_SERVER['SERVER_NAME'] 定义一个具有绝对路径的常量,并且我知道该路径将在这 3 个环境中,然后使用该常量作为配置中的路径。但这并不完全灵活,而且似乎是错误的做法:

    switch ($_SERVER['SERVER_NAME']) {
        case "localhost":
           define('MY_SERVER_PATH', 'http://localhost:8888/site/xcrud');
           break;
        case "urltest.com":
           define('MY_SERVER_PATH', 'http://urltest.com/dept/site/xcrud');
           break;
        case "url.com":
           define('MY_SERVER_PATH', 'http://url.com/dept/site/xcrud');
           break;
    }

    public static $scripts_url = MY_SERVER_PATH; 

一定有更好的方法,对吧?

【问题讨论】:

  • 你是如何使用scripts_url的?
  • 问题:为什么您的开发服务器没有按照应有的方式镜像测试和生产?如果你在 http://localhost:8888/dept/site 开发,你可能会在所有 3 个中使用 /dept/site/xcrud

标签: php path


【解决方案1】:

您可以使用一些配置文件,因为您使用的是多个环境。这样就可以为每个环境加载不同的值(例如数据库凭据或您的 crud url)。

使用配置结构,您只需在应用开始时检查环境一次。

switch ($_SERVER['SERVER_NAME']) {
    case "localhost":
        // Load localhost config file
       break;
    case "urltest.com":
       // Load urltest config file
       break;
}

【讨论】:

    【解决方案2】:

    尝试 v1.6。它具有url路径自动检测,只需将$scripts_url留空:)

    【讨论】:

      猜你喜欢
      • 2019-08-08
      • 2021-05-06
      • 2016-08-29
      • 1970-01-01
      • 2019-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      相关资源
      最近更新 更多