PHP Conference Japan 2024

如何更改配置设置

运行 PHP 作为 Apache 模块

当使用 PHP 作为 Apache 模块时,您还可以使用 Apache 配置文件(例如 httpd.conf)和 .htaccess 文件中的指令更改配置设置。您需要“AllowOverride Options”或“AllowOverride All”权限才能执行此操作。

有几个 Apache 指令允许您从 Apache 配置文件中更改 PHP 配置。有关哪些指令是 INI_ALLINI_PERDIRINI_SYSTEM 的列表,请查看 php.ini 指令列表 附录。

php_value name value

设置指定指令的值。只能与 INI_ALLINI_PERDIR 类型指令一起使用。要清除先前设置的值,请使用 none 作为值。

注意: 不要使用 php_value 设置布尔值。应改用 php_flag(见下文)。

php_flag name on|off

用于设置布尔配置指令。只能与 INI_ALLINI_PERDIR 类型指令一起使用。

php_admin_value name value

设置指定指令的值。这不能在 .htaccess 文件中使用。使用 php_admin_value 设置的任何指令类型都不能被 .htaccessini_set() 覆盖。要清除先前设置的值,请使用 none 作为值。

php_admin_flag name on|off

用于设置布尔配置指令。这不能在 .htaccess 文件中使用。使用 php_admin_flag 设置的任何指令类型都不能被 .htaccessini_set() 覆盖。

示例 #1 Apache 配置示例

<IfModule mod_php5.c>
  php_value include_path ".:/usr/local/lib/php"
  php_admin_flag engine on
</IfModule>
<IfModule mod_php4.c>
  php_value include_path ".:/usr/local/lib/php"
  php_admin_flag engine on
</IfModule>

注意

PHP 常量在 PHP 外部不存在。例如,在 httpd.conf 中,您不能使用 PHP 常量,例如 E_ALLE_NOTICE 来设置 error_reporting 指令,因为它们没有任何意义,并且将计算为0。请改用关联的位掩码值。这些常量可以在 php.ini 中使用

通过 Windows 注册表更改 PHP 配置

在 Windows 上运行 PHP 时,可以使用 Windows 注册表在每个目录的基础上修改配置值。配置值存储在注册表项 HKLM\SOFTWARE\PHP\Per Directory Values 中,在对应于路径名的子项中。例如,目录 c:\inetpub\wwwroot 的配置值将存储在密钥 HKLM\SOFTWARE\PHP\Per Directory Values\c\inetpub\wwwroot 中。该目录的设置将对从该目录或其任何子目录运行的任何脚本处于活动状态。密钥下的值应具有 PHP 配置指令的名称和字符串值。不会解析值中的 PHP 常量。但是,只能以这种方式设置 INI_USER 中可更改的配置值,INI_PERDIR 值不能,因为这些配置值会为每个请求重新读取。

其他 PHP 接口

无论您如何运行 PHP,您都可以通过 ini_set() 在脚本的运行时更改某些值。有关更多信息,请参阅 ini_set() 页面上的文档。

如果您有兴趣了解系统上所有配置设置及其当前值的完整列表,您可以执行 phpinfo() 函数,并查看结果页面。您还可以使用 ini_get()get_cfg_var() 在运行时访问各个配置指令的值。

添加注释

用户贡献的注释 2 条注释

8
contrees.du.reve at gmail dot com
16 年前
能够在 httpd.conf 中放置 php 指令并在每个目录或每个虚拟主机基础上使其工作真是太棒了。现在还有另一个方面可能值得注意

放入 apache conf 文件中的 php.ini 指令适用于 php 作为 apache 模块运行时(即在网页中),但不适用于它作为 CLI(命令行界面)运行时。

这样的功能可能会受到少数不满人士的抵制,但我猜大多数人会发现它很有用。就我而言,我真的很高兴我可以在我的 httpd.conf 文件中使用 open_basedir,它限制了我的域的 Web 用户和子管理员的访问权限,但它没有限制我自己的命令行 php 脚本……
0
ohcc at 163 dot com
9 天前
如果某个指令在不同位置设置了很多次,则优先级按以下降序排列
php-fpm php_*[foo] = bar
命令行参数 -d foo=bar
环境变量 foo=bar 并在 php.ini 中引用为 ${foo}
php.ini foo=bar
To Top