如何在PHP中正确使用“.user.ini”文件?

17
在我的工作目录中,有两个文件: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文件,我期望"Setting for 'display_errors': "具有on1的值,但它是空的。
如何使用.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文件可行:

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

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

3个回答

24

文档中写道:

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

以及

如果你使用Apache,请使用.htaccess文件实现相同的效果。

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

要查找您的服务器API,只需生成一个具有以下内容的PHP脚本,并在Web浏览器中调用它:

<? phpinfo();

有没有一个 PHP 函数可以返回 Server-API? - Edward
1
@Edward 你可以使用 php_sapi_name() - R_User
2
@CMCDragonkai 是的,但只有在您的本地服务器配置为FastCGI模块时才可以。您可以通过检查phpinfo()中的“Server API”行来识别它。 - Arxeiss
@Arxeiss 我的测试表明它不适用于 php -S - CMCDragonkai
在尝试使用 php -S.user.ini 时,我不知何故多次忽略了文档中的内容。感谢您让我明白了这一点。此外,我还发现它也不使用 /etc/php-cli.ini。在检查了 php_sapi_name() 后,我成功地使用了 /etc/php-cli-server.ini - Pete

4

这就是 index.php 已经执行的操作。输出结果为:Setting for 'user_ini.filename': .user.iniSetting for 'user_ini.cache_ttl': 300。因此,至少在五分钟后,index.php 应该返回正确的设置 - 但它们并没有... - Edward

2

使用.user.ini文件代替.htaccess进行PHP配置,您可以在该文件中添加设置(不需要缩进或空格)。例如,我的.user.ini配置如下:

max_execution_time =600
upload_max_filesize=200M
post_max_size=200M
memory_limit=256M 

3
你确定空格不起作用吗?还请注意,.user.ini 文件中有一个空格(请参见第一行 max_execution_time =600)。 - bg17aw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接