Php 用注释保存ini文件

Php 用注释保存ini文件,php,text,Php,Text,我需要在ini文件中存储一些数据,我遇到了一个问题。从ini文件中读取dat并不困难,因为php为此提供了一个内置函数: <?php ini_parse(); ?> 问题是我需要将数据保存到INI文件中,同时(最好)保留逗号。我特别想在顶部保留这一评论: ;<?php die(); ?> ; 我相信你能猜出原因,但如果你不明白,我不想直接请求这个文件。我只想使用另一个php脚本从中读取INI值 但是,如果没有办法保留注释,我仍然需要将数据存储到INI文件中,因此

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

<?php
ini_parse();
?>

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

;<?php die(); ?>
我相信你能猜出原因,但如果你不明白,我不想直接请求这个文件。我只想使用另一个php脚本从中读取INI值

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


有人知道有一个类可以这样做吗?

如果您的目标是保留
die()
,我知道的唯一方法就是将它放入一个带引号的值中

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

我认为使用
parse\u ini\u file()
保存注释是不可能的。您必须为此构建自己的解析器。用户在上提供的注释可能会有所帮助。

除非您将服务器配置为将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"

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

为什么不将INI文件放在外部世界无法访问的目录中?是否启用了.INI文件的PHP解释器,以便可以使用PHP阻止执行.INI文件?此脚本的条件使使用上述方法保护该文件的性能不稳定,即使它受到了保护,我仍然需要将数据保存到文件中。这对我真的没有帮助,因为您没有提供函数,甚至没有提供建议,让我知道如何将INI值写入文件。非常感谢!正是我需要的!即使它不保留注释,我也没料到会发生这种情况。即使你将它用于非常简单的数组——它至少应该避免双引号。请用英语回答。