Модификация суперглобальных PHP, кроме $ _ENV - PullRequest
1 голос
/ 30 июля 2009

В PHP я хочу иметь возможность установить значение переменной "superglobally" - это определенное мной значение , которое доступно КАЖДОМУ сценарию, который выполняется на сервере в его ПЕРВОЙ строке кода ( т.е. без необходимости require_once () или чего-то в этом роде.

В настоящее время я использую $ _ ENV ['varname'] , установив переменную окружения в моей системе под названием varname . Но для изменения значения переменной в системе Windows требуется перезагрузка, что не очень хорошо.

Существуют ли другие решения, кроме изменения исходного кода php?

Ответы [ 3 ]

5 голосов
/ 30 июля 2009

Если вы используете Apache, вы можете взглянуть на mod_env

Это позволит вам использовать директиву SetEnv в конфигурации Apache (и в файлах .htaccess, если ваш сервер Apache настроен так, что вы можете использовать их) , например:

В файле моего Apache:

<VirtualHost *>
        ServerName      tests
        DocumentRoot /home/squale/developpement/tests

        ....

        SetEnv MY_TEST_VARIABLE "Hello, World!"

        ....

</VirtualHost>

(Необходимо учитывать перезапуск Apache)

Или в файле .htaccess:

SetEnv MY_OTHER_TEST_VARIABLE "This is looking nice !"

(сразу учтено)

И, затем, эти переменные доступны в $_SERVER:

var_dump($_SERVER);

дает мне:

array
  'MY_TEST_VARIABLE' => string 'Hello, World!' (length=13)
  'MY_OTHER_TEST_VARIABLE' => string 'This is looking nice !' (length=22)
  'HTTP_HOST' => string 'tests' (length=5)
  'HTTP_USER_AGENT' => string 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.1) Gecko/20090716 Ubuntu/9.04 (jaunty) Shiretoko/3.5.1' (length=105)
  'HTTP_ACCEPT' => string 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' (length=63)
  'HTTP_ACCEPT_LANGUAGE' => string 'en-us,en;q=0.5' (length=14)
  ....
  ....

Это не $_ENV, как вы просили ... Но почти ;-)
И идея действительно та же самая ^^

4 голосов
/ 30 июля 2009

Вы можете использовать настройку php.ini auto_prepend_file для этой задачи. Он позволяет вам указать скрипт PHP, который запускается непосредственно перед выполнением любого «обычного» скрипта PHP.

Цитировать инструкцию:

auto_prepend_file string

Указывает имя файла, который автоматически анализируется перед основным файлом. Файл включается так, как если бы он вызывался с помощью функции require (), поэтому используется include_path.

Специальное значение none отключает автоматическое добавление.

Чтобы сделать там переменную суперглобальной, просто расширьте одну из других суперглобальных, как вы сделали с $ _ENV, например,

<?php
$_ENV['mystuff'] = "Hello World!";
$_SERVER['FOO'] = "BAR";
?>
* +1019 * Приветствия
2 голосов
/ 31 июля 2009

Вы можете установить значение в php.ini, которое затем можно получить с помощью get_cfg_var.

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