如何在 Apache 里修改 PHP 配置

时间:2021-05-11 08:28:51

当使用 PHP 作为 Apache 模块时,也可以使用 Apache 配置文件(例如:httpd.conf) 和 .htaccess 文件中的指令来修改 PHP 的配置

设定,不过需要有 "AllowOverride Options" 或 "AllowOverride All" 权限才可以

哪些指令可以让用户在 Apache 配置文件内部修改 PHP 的配置?

属于 PHP_INI_ALL、PHP_INI_PERDIR、或 PHP_INI_SYSTEM 中的一个,可以参考看 php.ini 配置选项列表:http://php.net/manual/zh/ini.list.php

php.ini 配置选项列表里面的"可修改范围"决定了该配置在什么情况下可以被配置,可以参考:http://php.net/manual/zh/configuration.changes.modes.php

PHP_INI_* 模式定义了一个 PHP 指令在何时何地,是否能够被设定,手册中的每个指令都有其所属的模式。例如有些指令可以在 PHP 脚本中用 ini_set

() 来设定,而有些只能在 php.ini 或 httpd.conf 中,例如:output_buffering 指令是属于PHP_INI_PERDIR(可在 php.ini,.htaccess 或 httpd_conf 中设定),

因而就不能使用 ini_set() 来设定,但是像 display_errors 指令属于 PHP_INI_ALL 因而就可以在任何地方被设定,包括使用 ini_set()

php_admin_value name value

设定指定的指令的值,不能用于 .htaccess 文件,任何用 php_admin_value 设定的指令都不能被 .htaccess 或 virtualhost 中的指令覆盖

php_admin_flag name on | off

用来设定布尔值的配置指令 ,不能用于 .htaccess 文件,任何用 php_admin_flag 设定的指令都不能被 .htaccess 或 virtualhost 中的指令覆盖

参考常见 apache php_admin_flag、php_admin_value 设置:

https://hcldirgit.github.io/2017/10/13/Php/7.%20%E5%B8%B8%E8%A7%81apache%20php_admin_value%20php_admin_flag%20%E8%AE%BE%E7%BD%AE/

注意:php_admin_flag、php_admin_value 一般用于 httpd.conf

php_value name value

设置指定的值,只能用于 PHP_INI_ALL 或 PHP_INI_PERDIR 类型的指令

php_flag name on | off

用来设定布尔值的配置指令,只能用于 PHP_INI_ALL 或 PHP_INI_PERDIR 类型的指令

php_value、php_flag 主要用于 .htaccess 中,但如果是 PHP_INI_ALL 类型的指令可以在任何地方被设定

而 value 和 flag 的区别在于:value 用于设置值,flag 用于只能是 on | off

--------------------------------------------------------2019/03/16 更新---------------------------------------------------------

关于 .htaccess 文件

参考文章:

https://blog.csdn.net/u013927110/article/details/41414091

https://www.centos.bz/2017/11/apache-htaccess%E6%96%87%E4%BB%B6%E8%AF%A6%E8%A7%A3%E5%92%8C%E9%85%8D%E7%BD%AE%E6%8A%80%E5%B7%A7%E6%80%BB%E7%BB%93/

    .htaccess 文件是一个纯文本文件,它里面存放着 apache 服务器配置的相关指令,。htaccess 主要的作用有:URL 重写、自定义错误页面等。主要体现在

伪静态的应用、图片防盗链、自定义404错误页面、禁止访问指定文件类型等等,.htaccess 的作用范围针对当前目录以及该目录的子目录

有时候我们需要修改 apache 的一些默认配置,但是又不想对 apache 的httpd.conf 修改太多,我们就可以使用

.htaccess(分布式配置文件) 来达到目的,.htaccess 提供了针对每个目录改变配置的方法,即在一个特定目录中放

置一个包含指令的文件,其中的指令作用于此目录以及其所有的子目录

我们需要让 apache 来读取它,这就需要修改 httpd.conf 文件

apache 都有自己默认的项目根目录,在 DocumentRoot "D:/www" 下面,有一个<Directory>的东西,它里面有这样一段代码 AllowOverride None ,如果

我们把 None 改成 All,那么在 www 目录下的所有项目都能读取到 .htaccess

虽然仅仅只是改动一个单词,但是这里面的弊端也是挺多的,比如说:每次访问项目的时候,apache 都会对所有的 .htaccess 文件进行读取,处理速度大

大降低;每一个项目都能修改 apache 配置,安全性大大降低

一般情况下都避免使用 .htaccess 原因主要有:

1. 性能:如果 AllowOverride 启用了 .htaccess ,那么 apache 需要在每个目录中查找 .htaccess 文件,所以,无论是否真正用到,启用 .htaccess 都会导致

性能下降,另外,对每一个请求,都需要读取一次 .htaccess 文件

2. 安全性:允许用户修改 apache 配置,可能会导致一些意想不到的问题,所以需要认证考虑是否给与用户这样的权限。但是,如果给与用户比较少的权限

可能又无法满足用户的需求,会带来额外的技术支持,所以,需要明确告诉用户已经给与他们的权限,说明AllowOverride设置的值,引导用户使用