我需要在ini文件中存储一些数据,但我遇到了问题。从ini文件中读取数据并不困难,因为php提供了内置函数:
<?php
ini_parse();
?>
问题是我需要将数据保存到INI文件,同时(最好)保存通知。我特别想在顶部保留这个评论:
;<?php die(); ?>
我相信你可以猜出这个的原因,但是如果你无法弄明白,我不希望直接请求这个文件。我只想用另一个php脚本读取它的INI值。
但是如果没有办法保留注释,我仍然需要将数据存储到INI文件中,所以我仍然需要一个类来将数据保存到INI文件中。
有没有人知道可能会这样做的课程?
答案 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
文件,您可以拒绝访问此文件。