Как мы можем проверить, запускаем ли мы 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 вместо этого