Php 如何检查ini_集是否在服务器上工作?

Php 如何检查ini_集是否在服务器上工作?,php,administration,Php,Administration,如何检查服务器配置是否允许我设置以下选项: ini_set('upload_max_filesize', '8M'); 在PHP脚本中?这是一个列表,但我真的不知道如何在尝试更改该值之前进行检查。检查是否允许我对某些选项使用ini\u set,如何? 成功时返回旧值,失败时返回false*值。有了这些知识,你可以写一份声明来检查你的电话是否接通,如下所示 $result = ini_set ("some_option", "some_value"); $failure = (version_c

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

ini_set('upload_max_filesize', '8M');
在PHP脚本中?这是一个列表,但我真的不知道如何在尝试更改该值之前进行检查。

检查是否允许我对某些
选项使用
ini\u 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'!";
(*):注意PHP5.3.0中的返回值从
'
(空字符串)更改为
false
。因此,您还需要检查当前的PHP版本


另一种方法是使用它,它将为您提供有关每个可用选项的详细信息,并且它是可用的


我想禁用某些选项的
ini\u set
,如何禁用? 有几种方法可以在运行时使选项不可更改(在某种程度上禁用
ini\u set
),其中有以下两种方法,您可以在提供的链接中了解更多

php\u管理值名称值

设置指定指令的值。这不能在.htaccess文件中使用。任何带有php_admin_值的指令类型集都不能被.htaccess或ini_集覆盖。若要清除以前设置的值,请使用“无”作为值

php_admin_标志name开|关

用于设置布尔配置指令。这不能在.htaccess文件中使用。任何带有php_admin_标志的指令类型集都不能被.htaccess或ini_集覆盖


示例(取自文档)


php_值包括路径“:/usr/local/lib/php”
php_admin_标志引擎打开
php_值包括路径“:/usr/local/lib/php”
php_admin_标志引擎打开
echo ini_get();
ini_集();
echo ini_get();

除非您尝试设置所需的值,否则不可能知道您的实际限制是多少。例如,可能安装了修补程序,这可能会阻止您更改该值

因此,检查是否可行的唯一选项是尝试并检查返回值(在任何情况下,您都应该这样做):


舞台调度?谁将更改您服务器上的ini设置?我认为您无法阻止它们。允许您在运行时设置设置。请阅读此注释:这需要更多详细信息。你的问题到底是什么,你想“阻止”哪个选项,你想改成什么?@Polmonino你的更新完全改变了你原来的问题;为什么你问如何阻止ini_set()的使用?那么请查看我的帖子中的替代方法,你不必调用
ini_set
来查看是否可以更改该值。另外,您应该编写
ini_set(…)===false
,由于隐式转换规则,上述内容可能存在。我正在尝试您的方法,但在我的系统上(本地开发)回显
PHP_INI_USER
给了我未定义常量PHP_INI_USER的未定义用法…根据文档
PHP_INI_USER
的值为
1
,因此我们应该使用该值(即不要使用常量),使用幻数代替常量从来都不是一个好主意,如果常量丢失,这肯定是有原因的。根据
ini\u get\u all()
的文档,PHP5.3中引入了$details参数。看起来Polmonino使用的是早期版本的PHP。@soulmerge是的,我同意你的看法。虽然(在文档中)没有说PHP_INI_USER实际上被定义为一个常量,但这是我的假设,结果证明是错误的。有了一个恰当的注释(你可以不用使用“神奇的数字”,或者只是定义你自己的常数——用一个注释描述发生了什么)你是对的,这看起来像是php.net上的一个文档错误:该常数实际上被称为
INI_USER
(),而不是
php_INI_USER
()
$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!";
<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>
echo ini_get (<BLA>);
ini_set (<BLA>);
echo ini_get (<BLA>);
$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.