Как мы можем проверить, выполняем ли мы скрипт PHP на localhost? - PullRequest
14 голосов
/ 24 января 2011

Есть ли способ проверить, выполняем ли мы скрипт PHP на локальном сервере разработки или на реальном сервере производства?Есть ли какая-либо константа PHP, переменная, функция и т. Д., Которые могут дать мне эту информацию.

Мне нужно это, чтобы установить различные настройки для сервера производства и разработки.Теперь я анализирую URL, чтобы увидеть, какой это, но мне было интересно, есть ли лучший способ сделать это.Я обеспокоен тем, что мы можем изменить URL-адрес сценария, и это может испортить мой чек.

Я ищу несколько решений с одним файлом конфигурации и условием IF в зависимости от того, какие параметры я буду определять.Единственная проблема заключается в том, что я не хочу изменять оператор IF, если есть изменения в настройках сервера, таких как имя хоста, document_root или что-то еще, что я использую для идентификации локального / удаленного хоста.

И хочу SVNобновление из одного источника без каких-либо изменений на моем производственном сервере.

И в идеале я хотел бы иметь возможность запускать и выполнять задания CRON с этими настройками.

Ответы [ 10 ]

21 голосов
/ 26 января 2011

Я использую SetEnv в своем определении хоста, чтобы определить, в какой среде я работаю (Dev, Stage, Production):

<VirtualHost *:80>
(all the host info)
SetEnv SERVER_CONTEXT "dev"
</VirtualHost>

И каждый файл конфигурации в виде дополнительного слова в нем: config.dev.ini, config.stage.ini, config.prod.ini и т. Д., ... Это работает как шарм.

12 голосов
/ 28 января 2011
if($_SERVER["REMOTE_ADDR"]=="127.0.0.1"){
$local = True;
}else{

    $local = False;
}

РЕДАКТИРОВАТЬ

Вы также можете проверить первую часть адреса и посмотреть, находится ли сервер в локальной сети, и снова, если ваш сервер не будет влокальная сеть при производстве

5 голосов
/ 27 января 2011

Я установил переменную окружения в конфигурации Apache и проверил это. Это имеет преимущество перед использованием файла конфигурации PHP, так как весь код вашего приложения остается одинаковым для PROD, TEST, DEV и т. Д .; не нужно идти и вносить изменения после проверки, так как код просто извлекает конфигурацию из Apache.

Чтобы продемонстрировать, в вашей конфигурации VirtualHost можно установить следующее

SetEnv ENVIRONMENT PROD

В своем PHP-коде вы можете проверить среду с помощью

$env = getenv('ENVIRONMENT');

Если вы чувствуете необходимость сделать это доступным везде, вы можете использовать define, но я не нахожу это необходимым (я использую указанную среду для загрузки соответствующих файлов конфигурации и создания конфигурации Singleton только для чтения) , который затем используется для проверки любых параметров конфигурации; лучше, чем код типа if ($env == 'PROD') {}, поскольку вся эта логика находится в конфигурации, а не в вашем коде).

5 голосов
/ 24 января 2011

Используйте файл конфигурации, который вы включили с определением в нем

define("DEBUG",true); //set to false for live

и используйте его в своем коде, например:

if(DEBUG){}
2 голосов
/ 28 января 2011

Я знаю, что это слово может показаться странным для разработчика PHP, но вы рассматривали build вашего проекта?

В PHP компилировать нечего, однако изменение скопированных файлов является одной из особенностей любого процесса сборки. Вы можете указать 2 цели: production и dev . Не было бы необходимости в каких-либо условностях, которые должны работать или работать, но при некоторых обстоятельствах не будет .

2 голосов
/ 24 января 2011

Вы можете попробовать использовать глобальный $_SERVER['SERVER_NAME']. Это должно сказать вам имя хоста системы, на которой выполняется скрипт.Вы можете использовать это, чтобы определить, какие настройки использовать (в зависимости от системы).

Я не знаю, что это выведет 'localhost', однако вам может понадобиться узнать фактическое имя хоста вашей машины для разработки.

2 голосов
/ 24 января 2011

Сервер не знает, в какой среде он находится, если вы не сообщите об этом. Я использую DEFINE для установки окружения. Код моего приложения одинаков для каждого экземпляра, но мои файлы конфигурации меняются. Таким образом, вы можете использовать .htaccess файл, включив файлы конфигурации в каждый скрипт и проверить, какие у них настройки.

1 голос
/ 26 января 2011

я всегда делаю "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";}

такая вещь!

0 голосов
/ 16 августа 2016

лучше разместить работающую программу cli вне каталога www, например,

c: \ iis \ www является общедоступным html-каталогом

файл cli следует поместить в папку c: \ iisвместо

0 голосов
/ 28 января 2011

на сервере разработки

* * * * * 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: (

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