是否可以在php.ini中使用环境变量?

时间:2009-05-13 14:48:32

标签: php configuration environment-variables

我不想在我的php.ini配置中硬连接某些路径,而是使用在其他地方共享的系统变量来配置它们,例如我的Apache配置。我做了一些搜索,找不到正确的关键字组合来发现是否有办法做到这一点。

有人知道是否可以这样做吗?

upload_tmp_dir = $SCRATCH_HOME/uploads

现在SCRATCH_HOME可以在环境中导出为/ tmp或/ var / scratch或者我想要的任何东西。

5 个答案:

答案 0 :(得分:18)

此功能未有详细记录。 在开始之前,我只想指定我的配置: 我使用的是Windows 7-64bit,PHP 5.4.3,Apache HTTP Server 2.2.x,我设置了我的环境变量PHP_HOME=C:\tools\php-5.4.3(PHP安装目录)。 我在httpd.confphp.ini文件

中使用该变量

注意:为简洁起见,我将省略一些文字。

httpd.conf档案

# For PHP 5 do something like this:
LoadModule php5_module "${PHP_HOME}/php5apache2_2.dll"
AddType application/x-httpd-php .php

# configure the path to php.ini
PHPIniDir "${PHP_HOME}"

php.ini档案

; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
; extension_dir = "./"
; On windows:
extension_dir = "${PHP_HOME}/ext"

答案 1 :(得分:14)

根据PHP docs,环境变量确实可以在配置文件中使用。

Screenshot of php docs with URL and note about envvars being allowed in PHP.ini

它没有说明使用什么语法,但它与使用* nix语法的Apache配置文件相同。例如,如果您希望PHP使用系统临时目录,您可以使用:

upload_tmp_dir = ${Temp}

您可以使用以下脚本确认它处于活动状态:

<?php
    echo "ini:  " . ini_get('upload_tmp_dir') . "\n";
    echo "env:  " . sys_get_temp_dir()        . "\n";
    echo "temp: " . getenv('temp')            . "\n";
    echo "tmp:  " . getenv('tmp')             . "\n";
?>

答案 2 :(得分:1)

尝试通过Apache config files配置PHP:

PHP_admin_value upload_tmp_dir $SCRATCH_HOME/uploads

对我来说很好。 (psst,你不能使用.htaccess改变upload_tmp_dir

答案 3 :(得分:1)

您可以使用它,并且现在对此进行了详细记录:

https://www.php.net/manual/en/configuration.file.php#example-36

答案 4 :(得分:0)

补充@Synetec答案,如果您的变量是自定义php.ini变量(由您创建,而不是正式的PHP ini指令),请使用get_cfg_var()。例如:

在php.ini中:custom_variable = "abcde"
在任何php脚本中:get_cfg_var('custom_variable')返回abcde

我在本地开发人员的一个小项目中使用它。当我通过php -S localhost:8000 -c php.ini运行本地服务器(而不是本地运行Apache服务器)时,调用一些配置常量是一个不错的选择。在生产中,这些常量在.htaccess中设置。