问题 如何在PHP中正确使用`.user.ini`文件?


在我的工作目录中,我有两个文件: index.php 和 .user.ini

.user.ini

display_errors=on

; http://be2.php.net/manual/en/filter.configuration.php#ini.filter.default
;filter.default = "full_special_chars"

index.php

<?php
//ini_set("display_errors", "on");

// Use `.user.ini` file:
// http://php.net/manual/en/configuration.file.per-user.php
echo "Setting for 'user_ini.filename': " . ini_get("user_ini.filename");
echo "\n\n";


// It takes up to five minutes, until `.user.ini` is re-read:
echo "Setting for 'user_ini.cache_ttl': " . ini_get("user_ini.cache_ttl");
echo "\n\n";

// http://php.net/manual/en/function.ini-get.php
echo "Setting for 'display_errors': " . ini_get("display_errors");
echo "\n\n";
echo "Setting for 'filter.default': " . ini_get("filter.default");
echo "\n\n";

// php -S localhost:8000
// http://localhost:8000/

使用上面的 .user.ini-file(在我的工作目录中)我期待的 "Setting for 'display_errors': " 价值为 on 要么 1,但它是空的。

如何使用正确更改设置 .user.ini-文件?

赛跑 php --ini 结果是

Configuration File (php.ini) Path: /etc/php5/cli
Loaded Configuration File:         /etc/php5/cli/php.ini
Scan for additional .ini files in: /etc/php5/cli/conf.d
Additional .ini files parsed:      /etc/php5/cli/conf.d/05-opcache.ini,
/etc/php5/cli/conf.d/10-pdo.ini,
/etc/php5/cli/conf.d/20-json.ini,
/etc/php5/cli/conf.d/20-readline.ini

哪个不包含我的 .user.ini-文件。

明确添加 .user.ini-file工作原理:

php --php-ini .user.ini index.php

但我希望在从给定文件夹运行脚本时自动读取它。


11057
2017-08-24 09:45


起源



答案:


在里面 文件 它说:

这些文件仅由CGI / FastCGI SAPI处理

如果您使用的是Apache,请使用 .htaccess 文件的效果相同。

因此,如果您将PHP作为Apache模块,从命令行或使用内置服务器运行,那么 .user.ini - 未处理文件。

要查找您的Server API,只需生成包含以下内容的PHP脚本,并在您的webbrowser中调用它:

<? phpinfo();

10
2017-08-24 23:05



是否有返回Server-API的PHP函数? - Edward
@Edward你可以使用 php_sapi_name()。 - R_User
这适用于PHP的本地Web服务器吗? - CMCDragonkai
@CMCDragonkai是的,但仅当您的本地服务器配置为FastCGI模块时。您可以通过检查phpinfo()来识别它;在排队 Server API。 - Arxeiss
@Arxeiss我的测试表明它不起作用 php -S。 - CMCDragonkai


答案:


在里面 文件 它说:

这些文件仅由CGI / FastCGI SAPI处理

如果您使用的是Apache,请使用 .htaccess 文件的效果相同。

因此,如果您将PHP作为Apache模块,从命令行或使用内置服务器运行,那么 .user.ini - 未处理文件。

要查找您的Server API,只需生成包含以下内容的PHP脚本,并在您的webbrowser中调用它:

<? phpinfo();

10
2017-08-24 23:05



是否有返回Server-API的PHP函数? - Edward
@Edward你可以使用 php_sapi_name()。 - R_User
这适用于PHP的本地Web服务器吗? - CMCDragonkai
@CMCDragonkai是的,但仅当您的本地服务器配置为FastCGI模块时。您可以通过检查phpinfo()来识别它;在排队 Server API。 - Arxeiss
@Arxeiss我的测试表明它不起作用 php -S。 - CMCDragonkai


根据 http://php.net/manual/en/configuration.file.per-user.php 

检查 user_ini.filename 在你的主要 php.ini 确保它不是空白,它确实被解析了。如果它的值为空,则PHP根本不扫描。

另见价值 user_ini.cache_ttl 

请看一下

php.net手册

还要检查这个问题 使用PHP 5.4内部服务器加载.user.ini PHP conf文件?


2
2017-08-24 09:55



那是什么的 index.php 已经做到了。输出是: Setting for 'user_ini.filename': .user.ini 和 Setting for 'user_ini.cache_ttl': 300。因此,至少五分钟后,应该返回正确的设置 index.php  - 但他们不是,...... - Edward