Я работаю над веб-приложением PHP, которое ТАКЖЕ имеет некоторые инструменты командной строки. Мне нужны инструменты командной строки для обнаружения среды так, чтобы они соединились с корректными учетными данными DB и т.д. Веб-приложение делает это легко путем проверки $_SERVER['SERVER_NAME']
но это не работает на сценарий оболочки.
Я хотел бы создать свое собственное $_SERVER
переменная, которую может проверить сценарий оболочки. Исключая: $_SERVER['MYAPP_ENVIRONMENT']
. Как я делаю это?
Я нашел это решение, но я не вижу те же файлы в /etc/apache2/
. Я также нашел это, но они используют .htaccess, и я не уверен, имею ли я mod_env
и также мое приложение использует свой собственный .htaccess файл, таким образом, это должно было бы быть отредактировано каждый раз, когда я развертываюсь.
Я нахожусь на Dreamhost VPS, который запускает Ubuntu 12.04 LTS
Как насчет использования функции php_sapi_name ()
( http://php.net/manual/en/function.php-sapi-name.php ) для определения используемого серверного API?
Вы можете использовать аргументы командной строки, чтобы различать и использовать массив $ argv
для доступа к ним:
<?php
if (PHP_SAPI == "cli") {
var_dump($argv);
}else{
echo 'WebServer';
}
?>
И его вывод:
C:\Users\user>E:\xampp\php\php.exe -f E:\Apache\test\s.php 1st 2nd
array(3) {
[0]=>
string(20) "E:\Apache\test\s.php"
[1]=>
string(3) "1st"
[2]=>
string(3) "2nd"
}
Немного о $ argv :
$ argv
будет NULL. Как вам повезло, Apache разрешает такую функцию, как запись SetEnv
в конфигурации vhost - это действительно работает!
<VirtualHost *:80>
...
SetEnv APPLICATION_ENV "production"
...
</VirtualHost>
Таким образом, в PHP у вас будет $_SERVER['APPLICATION_ENV']
со значением production
Подходящей переменной для проверки переменных окружения является $ENV
. Это работает как в CLI, так и в сценариях, запускаемых Apache.
$_ENV['HOSTNAME']
Или вы устанавливаете любую переменную среды, которую хотите, в своей системе.