$ _SERVER ['HTTP_HOST'] на локальном хосте отличается от промежуточного сервера развертывания - PullRequest
1 голос
/ 15 марта 2012

Мы обнаружили ошибки на нашем сайте после развертывания из нашей среды разработки localhost на нашем промежуточном сервере.Мы сузили ошибки до следующего фрагмента кода 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-обзоры обходных путей.Да.

Но я думаю, что есть лучший способ - есть идеи?

Ответы [ 4 ]

4 голосов
/ 15 марта 2012

Один из вариантов - иметь файл конфигурации, который будет корректно работать в зависимости от того, на каком хосте он работает (обычно на основе APPLICATION_ENV).Zend Framework делает это путем загрузки правильного раздела файла .ini, соответствующего APPLICATION_ENV в конфигурации apache.Вы можете использовать PHP-файл с массивом или что-то еще, правда.Все, что вам нужно сделать, это установить APPLICATION_ENV как одну вещь для подготовки / производства, но что-то другое для серверов dev.

3 голосов
/ 15 марта 2012

Файл конфигурации является правильным ответом. Я использую настройки по умолчанию и переопределения.В config.php

$config = array('url' => 'http://production.url'); // 'conf1'=> 'var1', etc
$dev_config = array();
@include_once('dev-config.php');
$config = array_merge($config, $dev_config);

В dev-config.php вы добавляете любые переопределения в $ dev_config

$dev_config['url'] = 'http://localhost/ourWebSite';

Затем в работе я просто удаляю файл dev-config.Супер просто, работает без нареканий.

Если вы хотите оставить все как есть, это также можно решить с помощью настройки http.conf на вашем устройстве разработчика.Вам нужно установить для вашего documentRoot то, чем оно является сейчас, плюс / ourWebSite таким образом, что http://localhost/ будет указывать на ту же папку в вашем коде, что и http://production.url/

3 голосов
/ 15 марта 2012

Обычно люди устанавливают различные параметры среды в зависимости от того, является ли она средой разработки или производственной средой. Причина этого, как вы выяснили, заключается в том, что код легко перемещается из разработки в производство.

Вместо того, чтобы вставлять переменную $ _SERVER непосредственно в URL, установите условие, которое будет проверять $ _SERVER ['HTTP_HOST'], выяснить, в какой среде мы находимся, и ввести другую переменную, содержащую реальный путь для ваших сценариев.

3 голосов
/ 15 марта 2012

как насчет

function get_homepath(){

   $host = $_SERVER['HTTP_HOST'];
   if ( $host == 'localhost' ){ return $host . '/ourWebSite/'; }

   return $host . '/';

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...