我如何检查服务器配置是否允许我设置类似以下选项:
ini_set('upload_max_filesize', '8M');
如何在PHP脚本中检查一个配置项是否可更改?这里有一份php.ini指令列表,但我不太清楚如何在修改配置项值之前进行检查。
我如何检查服务器配置是否允许我设置类似以下选项:
ini_set('upload_max_filesize', '8M');
如何在PHP脚本中检查一个配置项是否可更改?这里有一份php.ini指令列表,但我不太清楚如何在修改配置项值之前进行检查。
ini_set
来设置某些选项
?当成功时,ini_set
将返回旧值,失败时返回false
*。有了这个知识,您可以编写一个语句来检查您的调用是否成功,如下所示。
$result = ini_set ("some_option", "some_value");
$failure = (version_compare(PHP_VERSION, '5.3.0') >= 0) ? false : '';
if ($result === $failure)
echo "Unable to use ini_set to change 'some_option'!";
''
更改为false
。因此,您还需要检查您当前的PHP版本。
ini_get_all
,它将为您提供有关每个可用选项及其访问级别的详细信息。$all_option_details = ini_get_all ();
/* see the comments in this post regarding PHP_INI_USER vs INI_USER
* seems like someone writing the relevant PHP documentation fcuked up
*
* props to @soulmerge */
if ($all_option_details['upload_max_filesize']['access'] & INI_USER)
echo "we are allowed to change upload_max_filesize from with ini_set!";
ini_set
使用,怎么办?有几种方法可以在运行时使选项不可更改(以禁用ini_set
),其中包括以下两种方法,您可以在提供的链接中了解更多信息。
php_admin_value name value
设置指定指令的值。这不能在 .htaccess 文件中使用。使用 php_admin_value 设置的任何指令类型都无法被 .htaccess 或 ini_set() 覆盖。要清除先前设置的值,请将值设置为 none。
php_admin_flag name on|off 用于设置布尔配置指令。这不能在 .htaccess 文件中使用。使用 php_admin_flag 设置的任何指令类型都无法被 .htaccess 或 ini_set() 覆盖。
示例(摘自this文档)
<IfModule mod_php5.c>
php_value include_path ".:/usr/local/lib/php"
php_admin_flag engine on
</IfModule>
<IfModule mod_php4.c>
php_value include_path ".:/usr/local/lib/php"
php_admin_flag engine on
</IfModule>
PHP_INI_USER
的值为 1
,因此我们应该使用这个值而不是常量。 - Filip Roséen - refpini_get_all()
的文档,$details参数是在PHP 5.3中引入的。看起来Polmonino正在使用较早版本的PHP。 - soulmergeINI_USER
(http://www.php.net/manual/en/reserved.constants.php),而不是`PHP_INI_USER`(http://www.php.net/manual/en/configuration.changes.modes.php)。 - soulmerge除非您尝试设置所需的值,否则不可能知道您的真实限制。例如,可能已安装了suhosin补丁,这可能会完全阻止您更改该值。
因此,您唯一的检查选项是尝试并检查返回值(在任何情况下都应该这样做):
$oldValue = ini_get('upload_max_filesize');
if (ini_set('upload_max_filesize', '8M') === false) {
die("Couldn't update upload file size.");
}
if (ini_set('upload_max_filesize', $oldValue) === false) {
die("Error resetting upload file size.");
}
// you can safely assume that it is possible to set
// upload_max_filesize to 8M from this line onward.
ini_set
来查看是否可以更改值。此外,您应该编写ini_set (...) === false
,上述代码可能会由于隐式转换规则而产生误导。 - Filip Roséen - refpecho ini_get (<BLA>);
ini_set (<BLA>);
echo ini_get (<BLA>);