Как установить пользовательский $ _SERVER переменная для PHP

Я работаю над веб-приложением PHP, которое ТАКЖЕ имеет некоторые инструменты командной строки. Мне нужны инструменты командной строки для обнаружения среды так, чтобы они соединились с корректными учетными данными DB и т.д. Веб-приложение делает это легко путем проверки $_SERVER['SERVER_NAME'] но это не работает на сценарий оболочки.

Я хотел бы создать свое собственное $_SERVER переменная, которую может проверить сценарий оболочки. Исключая: $_SERVER['MYAPP_ENVIRONMENT']. Как я делаю это?

Я нашел это решение, но я не вижу те же файлы в /etc/apache2/. Я также нашел это, но они используют .htaccess, и я не уверен, имею ли я mod_env и также мое приложение использует свой собственный .htaccess файл, таким образом, это должно было бы быть отредактировано каждый раз, когда я развертываюсь.

Я нахожусь на Dreamhost VPS, который запускает Ubuntu 12.04 LTS

-1
задан 22 January 2015 в 18:15
4 ответа

Как насчет использования функции php_sapi_name () ( http://php.net/manual/en/function.php-sapi-name.php ) для определения используемого серверного API?

0
ответ дан 5 December 2019 в 20:39

Вы можете использовать аргументы командной строки, чтобы различать и использовать массив $ 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 :

  1. Это суперглобальный массив.
  2. Первый элемент - это имя сценария (или полный путь, если вы указали полный путь).
  3. Есть еще одна суперглобальная переменная $ argc , который содержит количество элементов $ argv.
  4. register_argc_argv должен быть включен, в противном случае $ argv будет NULL.
  5. Эта переменная не определяется, когда вы открываете скрипт из браузера ( только для CL).
0
ответ дан 5 December 2019 в 20:39

Как вам повезло, Apache разрешает такую ​​функцию, как запись SetEnv в конфигурации vhost - это действительно работает!

<VirtualHost *:80>
    ...
    SetEnv APPLICATION_ENV "production"
    ...
</VirtualHost>

Таким образом, в PHP у вас будет $_SERVER['APPLICATION_ENV'] со значением production

0
ответ дан 24 April 2020 в 09:45

Подходящей переменной для проверки переменных окружения является $ENV. Это работает как в CLI, так и в сценариях, запускаемых Apache.

$_ENV['HOSTNAME']

Или вы устанавливаете любую переменную среды, которую хотите, в своей системе.

0
ответ дан 2 October 2020 в 05:33

Теги

Похожие вопросы