Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [php] найти номер измененной строки в файле 
:(
    Опции темы
AttentiONlll
Дата 1.7.2010, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 17.12.2008

Репутация: нет
Всего: нет



Добрый день! Помогите мне кто чем сможет, пожалуйста! smile
Имеется php-скрипт, который выводит содержимое всех каталогов на ftp, а также дату последней модификации файлов и каталогов.

Нужно отследить в какой строчке файла произошло изменение (вывести номер строки в файле). Подскажите, пожалуйста, как это можно реализовать? Желательно, на примере.

Вот мой код:
Код

//рекурсивный обход каталогов
function my_upload($new_dir)
{
  $files = glob("*");
  foreach ($files as $file)
  {
    if ($file == "." || $file == "..") continue;
  $text = file ("$file"); 
//содержимое файла с нумерацией строк
foreach($text as $i => $a) 
{ 
  echo "$i"; 
  print "'".htmlspecialchars($a)."'"; 
  print "<br>";
}

     //дата изменения
      $stat=stat($file);
      $data_mod=date("F d y H:i:s.", $stat[9]);
      $buff = ftp_mdtm($conn_id, $file);
      print "'".realpath($file)."'<i> was last modified on: ".date("d-m-Y H:i:s", filemtime($file))."</i><br>"; 
     
     } 
    if (is_dir ($file))
    { 
      chdir ($file);
      my_upload ($file);
      chdir ("..");
    }
  }
}
chdir ("ftp://tra-ta-ta.ru");
@my_upload();



PM MAIL   Вверх
skyboy
Дата 1.7.2010, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



есть такая утилита - diff.
а есть расширение xdiff.
в любом случае, надо сохранять предыдущую версию файла для сравнения.
PM MAIL   Вверх
AttentiONlll
Дата 1.7.2010, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 17.12.2008

Репутация: нет
Всего: нет



skyboy, спасибо! smile

содержимое файла, дату последней модификации, путь к файлу или каталогу решила хранить в БД (MySQL)

Код

//добавится только в случае наличия нового пути, т.к. path уникален
$query = "insert into files (path, ch_date, file, type) VALUES ('".realpath($file)."','".date("Y-m-d H:i:s", filemtime($file))."','".$text."','F')";
$result = mysql_query($query);

     
Код

//обновление таблицы после изменения
$query = "UPDATE files SET ch_date = '".date("Y-m-d H:i:s", filemtime($file))."', file = '".$text."' WHERE ch_date <'".date("Y-m-d H:i:s", filemtime($file))."' and path = '".realpath($file)."'";
$result = mysql_query($query);


Не совсем понимаю, как с помощью этой утилиты сравнить эти файлы именно построчно. Я совсем недавно столкнулась с php, помогите, пожалуйста, если сможете!

PM MAIL   Вверх
skyboy
Дата 1.7.2010, 23:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



Цитата(AttentiONlll @  1.7.2010,  20:13 Найти цитируемый пост)
сравнить эти файлы именно построчно

а вот тут тебе лучше уточнить.
к примеру, файл 1:
Цитата

1
2
3

и файл 2:
Цитата


1
2
3

нормальный режим diff - определить, что в файле 2 просто добавлена одна новая строка.
но если сравнивать файлы последовательно по строкам, то выходит, что файлы полностью различаются(в каждой позиции строка разная). 
тебе какой алгоритм сравнения нужен?
 diff/xdiff реализует первый вариант(ищется "возможность" превратить первый файл во второй минимумом действий). для реализации построчного сравнения двух файлов не нужен никакой xdiff - операция чтения из файла и цикл по считанным строкам.
так что тебе лучше уточнить, пока мы не ушли "не туда"
PM MAIL   Вверх
AttentiONlll
Дата 2.7.2010, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 17.12.2008

Репутация: нет
Всего: нет



skyboy, 
Нужно определить, что просто добавили строку (или изменили ее содержимое)
Например:
Код

Файл1:
1
2
3

Код

Файл2:
0
1
2
3

Результат: изменена первая строка.

PM MAIL   Вверх
bars80080
Дата 2.7.2010, 23:34 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



а где-то хранится полная копия файла, чтобы определить, что произошло изменение именно там-то?
PM MAIL WWW   Вверх
AttentiONlll
Дата 3.7.2010, 04:44 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 17.12.2008

Репутация: нет
Всего: нет



bars80080, Да, храню в БД, в третьем сообщении темы есть smile
Код

//добавится только в случае наличия нового пути, т.к. path уникален
$query = "insert into files (path, ch_date, file, type) VALUES ('".realpath($file)."','".date("Y-m-d H:i:s", filemtime($file))."','".$text."','F')";
$result = mysql_query($query);

PM MAIL   Вверх
AttentiONlll
  Дата 12.7.2010, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 17.12.2008

Репутация: нет
Всего: нет



Вопрос еще актуален. Помогите разобраться, пожалуйста!
PM MAIL   Вверх
skyboy
Дата 12.7.2010, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



AttentiONlll, что у тебя не получается?
ты читал описание? ты пробовал? в чем именно "разобраться"?
или же надо разобраться за тебя, написать тебе описание, привести примеры именно здесь на форуме, потому что не получается перейти по ссылке и почитать?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.1706 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.