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

Pol*_*ino 9 php administration

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

ini_set('upload_max_filesize', '8M');
Run Code Online (Sandbox Code Playgroud)

在PHP脚本中?这是一个php.ini指令的列表,但我无法弄清楚如何在更改该值之前进行检查.

Fil*_*efp 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'!";
Run Code Online (Sandbox Code Playgroud)

(*):注意PHP 5.3.0中的返回值从''(空字符串)更改为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!";
Run Code Online (Sandbox Code Playgroud)

我想禁用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()覆盖.


示例(取自文档)

<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>
Run Code Online (Sandbox Code Playgroud)

  • 你是对的,这看起来像php.net上的文档错误:常量实际上被称为`INI_USER`(http://www.php.net/manual/en/reserved.constants.php),而不是`PHP_INI_USER`( http://www.php.net/manual/en/configuration.changes.modes.php) (2认同)