1

我需要使用 php 更新文件

示例文件:

#Start#

No. of records: 2

Name: My name,
Age: 18,
Date: 2013-07-11||

Name: 2nd name,
Age: 28,
Date: 2013-07-11||

#End#

我需要编辑'不。每次我在文件中添加另一条记录时,记录的数量。另一条记录需要在“#End#”之前

我在用着

$Handle = fopen($File, 'a');
$data = .......
fwrite($Handle, $Data); 

添加记录

我怎样才能编辑'不。记录数”并在“#End#”之前添加数据?

4

2 回答 2

0

如果文件相对较小(很容易放入内存),您可以使用file()函数。它将返回数组,您可以对其进行迭代等。

如果文件较大,您需要使用fgets()在循环中读取它,将数据写入新的临时文件并在完成后用它替换原始文件

于 2013-07-11T15:37:04.030 回答
0

我不会修改文件,而是解析它,而是更改 PHP 中的数据,然后重写文件。

为此,我将首先创建一个将输入解析为 php 数组的函数:

function parse($file) {
    $records = array();
    foreach(file($file) as $line) {
        if(preg_match('~^Name: (.*),~', $line, $matches)) {
            $record = array('name' => $matches[1]);
        }
        if(preg_match('~^Age: (.*),~', $line, $matches)) {
            $record ['age'] = $matches[1];
        }   
        if(preg_match('~^Date: (.*)\|\|~', $line, $matches)) {
            $record ['date'] = $matches[1];
            $records [] = $record;
        }   
    }   
    return $records;
}

其次,我将创建一个函数,将数组再次展平为相同的文件格式:

function flatten($records, $file) {
    $str  = '#Start#';
    $str .= "\n\n";
    $str .= 'No. of records: ' . count($records) . "\n\n";
    foreach($records as $record) {
        $str .= 'Name: ' . $record['name'] . ",\n";
        $str .= 'Age: ' . $record['name'] . ",\n";
        $str .= 'Date: ' . $record['name'] . "||\n\n";
    }
    file_put_contents($file, $str . '#End#');
}

然后像这样使用它:

$records = parse('your.file');
var_dump($records);
$records []= array(
    'name' => 'hek2mgl',
    'age' => '36',
    'date' => '07/11/2013'
);

flatten($records, 'your.file');
于 2013-07-11T15:51:11.640 回答