Nginx 動態修改 php 的配置項

我們一般修改 php 的配置項都是在 php.ini 中修改。在 php,ini 中的修改會影響到所有使用 php 的程序。假如我想讓修改只在某個域名下生效,該如何做呢?
使用 ini_set()
首先想到的可能是使用 ini_set() 方法在腳本中修改。但是這個只能修改作用域為 PHP_INI_USER 和 PHP_INI_ALL 的配置項。具體配置項作用域說明請查看 PHP 配置指令作用域說明
使用 php_value
當訪問 url 時,程序每次執行都自動加載一個 header.php 文件。但是,如果是通過 shell 腳本方式執行,就不要加載這個文件了。要實現這個需求,我們需要用到 auto_prepend_file 這個配置想。這個配置想的作用域是 PHP_INI_PERDIR 。也就是說不能通過 ini_set() 方法設置。那我們可以通過 php_value 進行設置。
如果是 apache+php 的組合,我們可以在 apache 的配置文件中加入如下指令即可。

php_value auto_prepend_file /header.php

如果是 nginx+php 組合,可以加入如下指令

fastcgi_param PHP_VALUE "auto_prepend_file = /header.php";
注意,nginx 中多次使用 PHP_VALUE 時,最後的一個會覆蓋之前的。如果想設置多個配置項,需要寫在一起,然後用換行分割。如:

fastcgi_param PHP_VALUE "auto_prepend_file = /header.php \ n auto_append_file = /footer.php";