如何检查ini_set是否可以在服务器上运行?

时间:2011-12-17 10:58:59

标签: php administration

如何检查服务器配置是否允许我设置如下选项:

ini_set('upload_max_filesize', '8M');

在PHP脚本中?这是php.ini directives的列表,但我无法确定如何在更改该值之前进行检查。

3 个答案:

答案 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>);