出于安全原因,parse_ini_file()已被禁用 - 替代?

时间:2014-04-28 08:28:10

标签: php security parsing

是parse_ini_file()的替代方法吗?这真的很危险吗?是禁用它的一个很好的理由还是我能以某种方式说服管理员确保其安全?

parse_ini_file() has been disabled for security reasons

我已经找到了这个错误的含义

error description

我在这个代码中使用(有一些拼写错误的问题,但是它解决了并且在一个托管上工作正常但在另一个托管上没有用,卡斯特禁用该功能)
my code

3 个答案:

答案 0 :(得分:4)

老实说,我找不到合理的理由来禁用该功能但是,如果parse_ini_string()可用并且您还允许读取文件,那么您应该拥有相同的功能(只是以更复杂的方式)。如果这也不是一个选项,您可以:

  • 用普通PHP重写二进制函数
  • 寻找新的托管服务

对你来说更便宜; - )

答案 1 :(得分:0)

您可以使用更安全的功能:

function parse_ini_file_quotes_safe($f){
    $r=$null;
    $sec=$null;
    $f=@file($f);
    for($i=0;$i<@count($f);$i++){
        $newsec=0;
        $w=@trim($f[$i]);
        if($w){
         if((!$r) or ($sec)){
            if((@substr($w,0,1)=="[") and (@substr($w,-1,1))=="]") {$sec=@substr($w,1,@strlen($w)-2);$newsec=1;}
         }
         if(!$newsec){
            $w=@explode("=",$w);$k=@trim($w[0]);unset($w[0]); $v=@trim(@implode("=",$w));
            if((@substr($v,0,1)=="\"") and (@substr($v,-1,1)=="\"")) {$v=@substr($v,1,@strlen($v)-2);}
            if($sec) {$r[$sec][$k]=$v;} else {$r[$k]=$v;}
         }
        }
    }
    return $r;
}

答案 2 :(得分:0)

就像阿尔瓦罗·冈萨雷斯(ÁlvaroGonzález)所写的那样,有一个非常简单的解决方案(不确定是否承诺100%,但在我的某些情况下是可行的)。如果特定的共享托管服务提供商禁用了parse_ini_file函数,因为上帝只知道原因,则有file_get_contents()parse_ini_string()函数。

所以,代替这个:

$config_array = parse_ini_file ('/absolute/path/to/inifile.ini', true, INI_SCANNER_RAW);

您执行以下操作:

$config_array = parse_ini_string (file_get_contents('/absolute/path/to/inifile.ini'), true, INI_SCANNER_RAW);

Parse_ini_string在第一个(字符串)参数之后接受相同的参数,因此结果将相同。 :)