.user.ini
文件用于控制特定文件夹的PHP设置,它是否会影响子文件夹呢?
我看了一些网站,他们认为它可以影响子文件夹(尽管没有很多相关信息),但是我发现如果我从子文件夹运行一个脚本,它并不使用.user.ini
文件中的设置。
我是不是漏了什么,或者它只能用于执行脚本的同一文件夹?如果是这样,有没有办法让php脚本从父文件夹等地方查找.user.ini
文件呢?
是的,它应该可以工作。然而,我遇到了与 .user.ini 文件不递归设置 php_value 的相同问题。根据 php.net 上的官方(并且简短)文档,它们应该递归工作(就像 .htaccess 一样):
PHP 在每个目录中扫描 INI 文件,从请求的 PHP 文件所在的目录开始, 并向上工作直到当前文档根目录(如 $_SERVER['DOCUMENT_ROOT'] 中设置)。 如果 PHP 文件在文档根目录之外,则只扫描其目录。
我发现 Apache 配置有一个多余的尾部斜杠导致 .user.ini 文件不能递归工作。
查看你的 phpinfo(),具体来说是 SCRIPT_FILENAME 变量。注意两个斜杠 - 应该只有一个:
$_SERVER['SCRIPT_FILENAME'] = //home/site/public_html/phpnfo.php
这个问题的原因是来自于 Apache 的配置文件中有一个多余的斜杠。
<IfModule !mod_php5.c>
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/lib/php/php-fpm.sockets/site.sock|fcgi://localhost/"
</FilesMatch>
DirectoryIndex index.php index.html index.htm
</IfModule>
Apache配置在目录路径后面不包含斜杠,因此应该将fcgi://localhost/修改为fcgi://localhost,如下所示:
<IfModule !mod_php5.c>
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/lib/php/php-fpm.sockets/site.sock|fcgi://localhost"
</FilesMatch>
DirectoryIndex index.php index.html index.htm
</IfModule>
更改后,请重新启动Apache / php-fpm,然后您就完成了。
更新:事实证明,在Apache配置中,尾随斜杠错误仍然很常见,可能会导致不同的错误和糟糕的php实践(例如设置在DocumentRoot /var/www/web/
中)。
我建议不要只看“少数网站”,而是阅读PHP手册:
自从PHP 5.3.0版本以来,PHP支持按目录基础的.htaccess风格的INI文件。 这些文件仅由CGI / FastCGI SAPI处理。此功能使PECL htscanner扩展过时。如果您使用Apache,请使用.htaccess文件实现相同的效果。
除了主php.ini文件外,PHP还会在每个目录中扫描INI文件,从请求的PHP文件所在的目录开始,并向上工作,直到当前文档根目录(如$_SERVER ['DOCUMENT_ROOT']中设置)。如果PHP文件在文档根目录之外,则仅扫描其目录。
.user.ini
文件时,它才会被捕获。这是使用IIS虚拟目录的情况。如果安装在Apache上可能会有所不同? - Lockphp.ini
文件,并使用[PATH=xxx]
来设置配置,这样就可以传播到子目录中。 - Lock