如何检查服务器配置是否允许我设置如下选项:
ini_set('upload_max_filesize', '8M');
在PHP脚本中?这是php.ini directives的列表,但我无法确定如何在更改该值之前进行检查。
答案 0 :(得分:11)
ini_set
使用option
,怎么做? 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'!";
(*):注意PHP 5.3.0中的返回值从''
(空字符串)更改为false
。因此,您还需要检查当前的PHP版本。
另一种方法是使用ini_get_all
,它会为您提供有关每个可用选项的详细信息,并且access level。
$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 名称值
设置指定指令的值。这不能用于.htaccess文件。使用php_admin_value 设置的任何指令类型都不能被.htaccess或 ini_set ()覆盖。要清除先前设置的值,请使用none作为值。
php_admin_flag 名称开|关
用于设置布尔配置指令。这不能用于.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>
答案 1 :(得分:4)
除非您尝试设置所需的值,否则无法知道您的实际限制是什么。例如,可能安装了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.
答案 2 :(得分:-3)
echo ini_get (<BLA>);
ini_set (<BLA>);
echo ini_get (<BLA>);