2012-05-26 4 views
5

Есть несколько сценариев, которым нужны определенные пути для установки в среде для запуска. Я хочу изменить свой путь, чтобы включить эти местоположения. Это места, которые я хочу добавить в мой путь к exec.Как изменить путь, используемый exec в php

$JAVA_HOME = "/usr/java/jdk1.6.0_31"; 
$ANT_HOME = "/usr/apache-ant-1.8.3"; 
$ANT_BIN = "$ANT_HOME/bin"; 
$JAVA_BIN = "$JAVA_HOME/bin"; 
$ADDPATH=$JAVA_HOME . ":" . $ANT_HOME . ":" . $ANT_BIN .":" . $JAVA_BIN . ":" . $PATH; 

И я использовал PutEnv

putenv("JAVA_HOME=" . $JAVA_HOME); 
putenv("ANT_HOME=" . $ANT_HOME); 
putenv("ANT_BIN=" . $ANT_BIN); 
putenv("JAVA_BIN=" . $JAVA_BIN); 
putenv("PATH=".$_ENV["PATH"].":".$ADDPATH); 

Однако, когда я делаю

echo getenv("PATH"); 

я получить

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 

У меня есть два запроса: (а) Как Я установил переменную пути в t he values ​​Я хочу (b) Есть ли способ (или местоположение), чтобы добавить эти местоположения в составную часть серверной среды (в конфигурациях php.ini или apache), а не использовать сценарий для внесения этих изменений.

ответ

1

Попробуйте использовать apache_setenv() и apache_getenv().

+0

Спасибо, ответ на мой первый запрос. Однако я хотел бы использовать более элегантное решение для редактирования конфигураций серверов из файлов настроек, а не изменять его в каждом скрипте. –

1

Для установки переменных окружения в PHP, позвольте мне обратиться к официальной документации PutEnv:

Добавляет настройки в среде сервера. Переменная окружения существует только на время текущего запроса. В конце запросить восстановление окружающей среды в исходное состояние.

Установка определенных переменных среды может быть потенциальной защитой нарушение. Директива safe_mode_allowed_env_vars содержит список префиксов, разделенных запятыми . В безопасном режиме пользователь может только изменить переменные среды, имена которых начинаются с префиксов , предоставленных этой директивой. По умолчанию пользователи смогут устанавливать только переменных среды, которые начинаются с PHP_ (например, PHP_FOO = BAR). Примечание: , если эта директива пуста, PHP позволит пользователю изменить ANY переменную окружения!

директива safe_mode_protected_env_vars содержит разделенный запятыми список переменных окружения, что конечный пользователь не сможет изменения с помощью PutEnv(). Эти переменные будут защищены, даже если установлено значение safe_mode_allowed_env_vars, чтобы их можно было изменить.

Я думаю, что это определенно не путь, если не очень частные случаи; на других переменных окружения настройки вручную в конфигурации HTTPd очень легко, используя модуль mod_env «s SetEnv директиву:

SetEnv Директива

Description: Sets environment variables 
Syntax:  SetEnv env-variable value 
Context:  server config, virtual host, directory, .htaccess 
Override:  FileInfo 
Status:  Base 
Module:  mod_env 

Устанавливает внутреннюю переменную среды, которая затем доступна Apache HTTP Server и переданы на CGI-скрипты и страницы SSI.

Пример

SetEnv SPECIAL_PATH /foo/bin 

Внутренние переменные окружения, установленные этой директивой устанавливаются после того, как большинство директив обработки раннего запроса запускаемых, такие как контроль доступа и отображения URI-к-файла. Если заданная вами переменная среды предназначена для ввода в эту раннюю фазу обработки , такую ​​как директива RewriteRule, вы должны установить вместо переменной окружения SetEnvIf.

А они могут пойти почти везде, от главного httpd.conf, в virutal конфигурации хоста, или даже в HTAccess когда FileInfo переопределение предоставляются, они оказываются очень универсальны.

Refs:

+0

Мне удалось получить путь к сценарию для изменения с помощью ответа @bsdnoobz. Поэтому путь должен быть изменен с Apache2, поскольку я не работаю в безопасном режиме. Я пошел в apache2, но не смог найти файл mod_env. В документации показано, что я хочу делать. Но можете ли вы сказать мне, как это сделать. т.е. Добавить запись в файл настроек apache. Я относительно новичок в настройках apache2. –

+0

Это зависит от вашего дистрибутива os/httpd. В общем, первое, что нужно сделать, это проверить, находится ли _LoadModule module_env_ в главном файле конфигурации _httpd.conf_ apache. Если это так, модуль загружается и активируется. Затем, если вы хотите, чтобы переменная env была доступна во всей установке apache, поместите директиву в _httpd.conf_; если вы хотите, чтобы он был доступен только для сайта, поместите его в _VirtualHost_; или вы можете поместить его в файл .htaccess после предоставления _AllowOverride FileInfo_ соответствующего VirtualHost. Читайте о htaccess здесь: http://httpd.apache.org/docs/2.2/howto/htaccess.html –

+0

Я активировал phpinfo, и он показал мне, что mod_env загружен на моем сервере. Затем я пошел к Apache httpd.conf и редактируются ' Опции None AllowOverride None Order отрицаю, позволяют Запретить все ' в ' Options None SetEnv PATH /usr/java/jdk1.6.0_31 : /usr/apache-ant-1.8.3: /usr/apache-ant-1.8.3/bin: /usr/java/jdk1.6.0_31/bin AllowOverride None Order отрицаю, позволяют запретить все 'и перезапустили apache, но я не смог получить путь к отражению изменений. Я что-то пропустил –

Смежные вопросы