2013-07-11 4 views
1

мне нужно обновить файл с помощью PHPобновление файла в определенной части только в 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 # '?

+0

написать парсер и сериалайзер для этого файла формы в. Затем используйте синтаксический анализатор для анализа файла в php-структурах (например, массивы), затем добавьте запись и сгладьте файл и перезапишите его. – hek2mgl

+0

Подсказка: попробуйте получить все строки в массиве с '$ file_lines = file ($ file_name, FILE_IGNORE_NEW_LINES) '. Удалите # End #, поместите новую запись, поместите # End # и отредактируйте количество записей с помощью 'preg_replace'. Наконец, взорвите массив и верните его в файл. – Pieter

+0

Стандартная рекомендация: вместо этого вы должны использовать базу данных. –

ответ

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'); 
0

В случае, если файл относительно невелик (легко помещается в память), вы можете использовать функцию file(). Он будет возвращать массив, который вы можете повторить и т. Д.

Если файл больше, вам нужно будет прочитать его в цикле, используя fgets(), записывая данные в новый временный файл и заменяя исходный файл им после вас Сделано

Смежные вопросы