20

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

有谁知道这是否可以做到?

upload_tmp_dir = $SCRATCH_HOME/uploads

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

4

5 回答 5

27

正式记录:https ://www.php.net/manual/en/configuration.file.php#example-36

在开始之前,我只想指定我的配置:我使用的是 Windows 7-64 位、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"
于 2012-05-13T09:43:15.657 回答
18

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

带有 URL 的 php 文档的屏幕截图以及有关 PHP.ini 中允许使用 envvars 的注释

它没有说明使用什么语法,但它与使用 *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";
?>
于 2013-08-26T18:47:15.873 回答
4

您可以使用它,而且它现在有据可查:

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

于 2019-11-07T09:31:48.270 回答
1

尝试通过Apache 配置文件配置 PHP :

PHP_admin_value upload_tmp_dir $SCRATCH_HOME/uploads

对我来说很好。(psst,您不能upload_tmp_dir使用 .htaccess 进行更改)

于 2009-05-13T15:35:28.637 回答
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.

于 2020-08-17T14:02:06.553 回答