将String插入INI样式文件中的特定位置

时间:2014-09-02 10:04:41

标签: php

我有一个看起来像这样的文件:

[TestKey1]
Test1
Test2

[TestKey2]
Item1
Item2

现在,我想添加另一个密钥(例如Test3)。这是我的代码。

$ModulCat = "TestKey1";
$ModulName = "Test-Update";

$ModulList = '../cake.inc';
$ModulListAsFile = file('../cake.inc');

$line_number = false;   
$fHandler = fopen($ModulList, 'r+');

if($fHandler)
{
    while (list($key, $line) = each($ModulListAsFile) and !$line_number) 
    {
        $line_number = (strpos($line, $ModulCat) !== FALSE) ? $key + 1 : $line_number;
    }

    if($line_number)
        echo "$line_number\n";
    else
        echo "Not found";

    GoToLine($fHandler, $line_number + 1);

    fwrite($fHandler, "\x8\n$ModulName");
    fclose($fHandler);
}
else
{
    echo 'Can not open file.';
}

function GoToLine($handle,$line)
{
  fseek($handle,0);
  $i = 0;
  $bufcarac = 0;                    

  for($i = 1;$i<$line;$i++)
  {
    $ligne = fgets($handle);
    $bufcarac += strlen($ligne);
  }  

  fseek($handle,$bufcarac);
}

但这会将我的文件更改为:

Test1
Test2
Test-Update

[TestKey2]
Item1
Item2

所以我的第一行被彻底删除了,我做错了什么?

修改

我现在有了这个代码:

$file = new SplFileObject($ModulList, "r+");

while(!$file->eof())
{
    $line = $file->fgets();
    if (strpos($line, "[$ModulCat]") !== false)
    {
        echo "Category found.";
        $file->fwrite("$ModulName\n");
    }
    else
    {
        echo "Category not found.";
    }
}

这改变了这个:

[Stammdaten]
Test-KIA

[System]
Updates
UpdateItem

到此:

[Stammdaten]
Test-Update
ystem]
Updates
UpdateItem

为什么在下一行中删除一个项目和一个字符?

0 个答案:

没有答案