Как мы можем проверить, запускаем ли мы PHP-скрипт на localhost?
есть ли способ проверить, запускаем ли мы PHP-скрипт на сервере localhost-development или на сервере live server-production? Есть ли какая-либо константа PHP, переменная, функция и т. д.,которые могут дать мне эту информацию.
Мне нужно это, чтобы поставить разные настройки для сервера производства и разработки. Теперь я анализирую URL, чтобы увидеть, какой из них, но мне было интересно, есть ли лучший способ сделать это. Меня беспокоит, что мы можем изменить URL-адрес скрипта, и это может разрушить мой проверять.
Я ищу несколько решений с одним конфигурационным файлом и если условие в нем в зависимости от того, какие я буду определять разные настройки. Единственная проблема заключается в том, что я не хочу изменять оператор IF, когда есть изменения в настройках сервера, таких как имя хоста, document_root или что-то еще, что я использую для идентификации локального/удаленного хоста.
и хотите обновить SVN из одного источника, ничего не меняя на мой рабочий сервер.
и я хотел бы в идеале, чтобы иметь возможность запускать и CRON задания с этими настройками.
10 ответов
Я использую SetEnv в моем определении хоста, чтобы найти, в какой среде я работаю (Dev, Stage, Production):
<VirtualHost *:80>
(all the host info)
SetEnv SERVER_CONTEXT "dev"
</VirtualHost>
и каждый файл конфигурации в качестве дополнительного слова в нем : config.разработка.Ини конфиг.ступень.Ини конфиг.подгонять.Ини и т. д... Это работает как шарм.
if($_SERVER["REMOTE_ADDR"]=="127.0.0.1"){
$local = True;
}else{
$local = False;
}
редактировать
вы также можете проверить первую часть адреса и посмотреть, находится ли сервер в локальной сети, снова предполагая, что ваш сервер не будет в локальной сети, когда в производстве
Я устанавливаю переменную среды в конфигурации Apache и проверяю это. Это имеет преимущество перед использованием файла конфигурации PHP, что весь код приложения остается точно таким же на PROD, TEST, DEV и т. д.; Нет необходимости идти и вносить изменения после проверки, так как код просто вытаскивает конфигурацию из Apache.
чтобы продемонстрировать, следующее Может быть установлено в вашей конфигурации VirtualHost
SetEnv ENVIRONMENT PROD
в вашем PHP-коде вы можете проверить среду с
$env = getenv('ENVIRONMENT');
если вы чувствуете необходимость сделать это доступным везде, вы можете использовать define
, но я не считаю это необходимым (я использую указанную среду для загрузки соответствующих файлов конфигурации и создания одноэлементной конфигурации только для чтения, которая затем используется для проверки любых параметров конфигурации; лучше, чем if ($env == 'PROD') {}
введите код, так как вся эта логика находится в конфигурации, а не в вашем коде).
используйте конфигурационный файл, который вы включаете с определением в нем
define("DEBUG",true); //set to false for live
и используйте это в своем коде, например:
if(DEBUG){}
сервер понятия не имеет, какая это среда, если вы не скажете ему. То, что я делаю, это использовать определение установить параметры среды. Мой код приложения одинаков в каждом экземпляре, но мои файлы конфигурации меняются. Таким образом, вы можете использовать .файл htaccess включает файлы конфигурации для каждого скрипта и проверяет, каковы их настройки.
Я знаю, что это слово может показаться странным разработчику PHP, но вы рассмотрели build ваш проект?
в PHP нечего компилировать, однако изменение скопированных файлов является одной из особенностей любого процесса сборки. Вы можете указать 2 цели:производства и dev. Не было бы необходимости в каких-либо условиях, которые должны работать или могут работать, но при некоторых обстоятельствах не.
вы можете попробовать и использовать global $_SERVER['SERVER_NAME']
Это должно сообщить вам имя хоста системы, в которой выполняется сценарий. Вы можете использовать это, чтобы определить, какие настройки использовать (в зависимости от системы).
Я не знаю, что это выведет "localhost", однако, и вам может потребоваться знать ваше фактическое имя хоста вашей машины разработки.
Я всегда делаю " config.php", который я включаю в другие файлы php...
Он содержит что-то вроде (домашний файл):
$CONFIG['server']="dev";
$CONFIG['db_user']="root";
и подобное... поэтому дома у меня есть этот, и на сервере, где работает сайт, у меня есть еще один, который я не обновляю, если не изменяет его...
Так вот на сервере у меня что-то вроде:
$CONFIG['server']="prod";
$CONFIG['db_user']="lwu9918_admin";
а затем в других файлах php:
include("config.php");
if($CONFIG['server']=="dev"){echo "Development";}
ничего подобного!
на dev-сервер
* * * * * php -r cronjob.php this_is_dev
на рабочем сервере
* * * * * php -r cronjob.php this_is_live
в свой скрипт
switch ($argv[1])
case 'this_is_dev':
// load your dev configuration
break;
case 'this_is_live':
// load your live configuration
break;
default:
die('invalid server');
break;
}
поскольку предназначен для cronjob, то $argv
существует
удачи с Windows :(
вам лучше поместить программу cli, работающую вне каталога www, например
c:\iis\www является общедоступным каталогом html
файл cli должен быть помещен под c:\iis вместо этого