【问题标题】:Save ini file with comments保存带有注释的ini文件
【发布时间】:2011-05-04 05:10:00
【问题描述】:

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

<?php
ini_parse();
?>

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

;<?php die(); ?>

我相信你可以猜到这个原因,但如果你想不通,我不希望直接请求这个文件。我只想使用另一个 php 脚本从中读取 INI 值。

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

有没有人知道可以这样做的类?

【问题讨论】:

  • 为什么不直接把INI文件放到外界无法访问的目录下呢?
  • 您是否为 .ini 文件启用 PHP 解释器,以便您可以使用 PHP 来阻止 .ini 文件被执行?
  • 这个脚本的条件使得使用上面的方法保护文件是最好的,即使它被保护了,我仍然需要将数据保存到文件中。

标签: php text


【解决方案1】:

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

【讨论】:

  • 非常感谢!正是我需要的!尽管它不维护 cmets,但我并没有真正预料到会发生这种情况。
  • 即使你将它用于非常简单的数组——它至少应该转义双引号。
【解决方案2】:

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

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

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

【讨论】:

  • 这真的对我没有帮助,因为您没有提供任何功能,甚至没有提供任何建议,让我知道应该如何将 INI 值写入文件。
【解决方案3】:

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

【讨论】:

  • 请用英文回答。
猜你喜欢
  • 2012-12-12
  • 2010-12-15
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
相关资源
最近更新 更多