从我们的本地主机开发环境部署到我们的暂存服务器后,我们在我们的站点中发现了错误。 我们将错误缩小到以下 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/