php - $_SERVER ['HTTP_HOST' ] 本地主机与部署登台服务器不同

标签 php localhost staging

从我们的本地主机开发环境部署到我们的暂存服务器后,我们在我们的站点中发现了错误。 我们将错误缩小到以下 PHP 代码片段:

     $_SERVER['HTTP_HOST']

我们用它来构建我们网站使用的各种文件的路径。

例如:

         // EXAMPLE #1 -- THIS WORKS ON OUR LOCAL MACHINE
      $theSelectedImage = "http://" . $_SERVER['HTTP_HOST'] . "/ourWebSite/egyptVase.png";

        // EXAMPLE #2 --BUT IT MUST BE THIS TO WORK ON THE STAGING SERVER
      $theSelectedImage = "http://" . $_SERVER['HTTP_HOST'] . "/egyptVase.png";

问题的关键在于:

  • 在我们的本地主机上,$_SERVER['HTTP_HOST'] 解析为“localhost”——注意我们需要附加我们的网站文件夹名称,例如我在上面的示例 #1 中展示。 IE。在我们的本地主机上,$_SERVER['HTTP_HOST'] 不知道涉及哪个网站文件夹——我们必须附加它。

  • 但在我们的暂存服务器上,$_SERVER['HTTP_HOST'] 解析为“www.ourWebSite.com”。 在这种情况下,我们不需要附加任何内容——暂存网络服务器返回我们的网站文件夹。

我们有没有想过一些笨拙的“snide-remarks-in-code-reviews”变通办法。是的。

但我认为有更好的方法 - 有什么想法吗?

最佳答案

一个选择是拥有一个配置文件,该文件将根据其所在的主机(通常基于 APPLICATION_ENV)正确提取。 Zend Framework 通过加载与 apache 配置中的 APPLICATION_ENV 相对应的 .ini 文件的正确部分来实现这一点。实际上,您可以使用带有数组或其他任何内容的 PHP 文件。您需要做的就是将 APPLICATION_ENV 设置为在暂存/生产中是一回事,但在开发服务器上是不同的。

一个简单的例子:

switch (APPLICATION_ENV) {
    case 'dev':
        define('APPLICATION_URL', $_SERVER['HTTP_HOST'] . '/ourWebSite');
        break;
    case 'production':
    case 'staging':
        define('APPLICATION_URL', $_SERVER['HTTP_HOST']);
        break;
}

关于php - $_SERVER ['HTTP_HOST' ] 本地主机与部署登台服务器不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9709835/

相关文章:

php/mysql 不计算表中的行

php - fatal error : Array callback has to contain indices 0 and 1

php - Laravel 4如何将表单数据提交到不同的表

android - 模拟器中主机文件中的 Url 映射被忽略

ubuntu - 如何在远程服务器上访问 Confluence

Git 根据推送的分支自动从中央存储库推送到开发和生产

azure - 在 Azure 暂存槽中使用 ACS

php - $this->"variable value"OOP PHP

Facebook 应用 : Firebase Simple Login URL error

git - 禁用 git 暂存区