保存带注释的ini文件

时间:2010-11-02 22:23:12

标签: php text

我需要在ini文件中存储一些数据,但我遇到了问题。从ini文件中读取数据并不困难,因为php提供了内置函数:

<?php
ini_parse();
?>

问题是我需要将数据保存到INI文件,同时(最好)保存通知。我特别想在顶部保留这个评论:

;<?php die(); ?>

我相信你可以猜出这个的原因,但是如果你无法弄明白,我不希望直接请求这个文件。我只想用另一个php脚本读取它的INI值。

但是如果没有办法保留注释,我仍然需要将数据存储到INI文件中,所以我仍然需要一个类来将数据保存到INI文件中。

有没有人知道可能会这样做的课程?

3 个答案:

答案 0 :(得分:3)

除非您将服务器配置为将ini文件解析为php源,否则此注释不会帮助您保护文件不被Web浏览器读取。更好的想法是将此文件放在webroot之外,在受密码保护的目录中,或者将一个目录配置为不提供ini文件。

至于写入数据,此函数将用于简单数组:

function write_ini_file($file, array $options){
    $tmp = '';
    foreach($options as $section => $values){
        $tmp .= "[$section]\n";
        foreach($values as $key => $val){
            if(is_array($val)){
                foreach($val as $k =>$v){
                    $tmp .= "{$key}[$k] = \"$v\"\n";
                }
            }
            else
                $tmp .= "$key = \"$val\"\n";
        }
        $tmp .= "\n";
    }
    file_put_contents($file, $tmp);
    unset($tmp);
}

像这样的数组:

$options = array(
    'ftp_cfg' => array(
        'username' => 'user',
        'password' => 'pass',
        'hostname' => 'localhost',
        'port'     => 21
    ),
    'other_cfg' => array(
        'banned_emails' => array(
            'example@example.com',
            'spam@spam.gov'
        ),
        'ini_version' => 1.1
    )
);

将转向:

[ftp_cfg]
username = "user"
password = "pass"
hostname = "localhost"
port = "21"

[other_cfg]
banned_emails[0] = "example@example.com"
banned_emails[1] = "spam@spam.gov"
ini_version = "1.1"

答案 1 :(得分:0)

如果您的目标是保留die(),我知道的唯一方法是将其置于引用值中。

fake_value = "<?php die(); ?>";

我认为使用parse_ini_file()保留评论是不可能的。你必须为此构建自己的解析器。 manual page上的用户贡献说明可能会有所帮助。

答案 2 :(得分:0)

使用.htaccess文件,您可以拒绝访问此文件。