Страница 1 из 1

[PHP] изменение dbf файла

Добавлено: 2010-02-08 18:31:56
avalon
Здравствуйте. Столкнулся с такой проблемой: в винде создаётся dbf-файл, по фтп файл успешно перемещается на unix-машину. Там с помощью php он успешно правиться, результаты с помощью того же php отображаются корректно и успешно. Совершается обратный трансфер в винду. А вот с помощью разных просмотрщиков файл не открывается выдавая ошибку "Неверный размер записи или смещение". Эксель открывает как дбф, но результаты не корректные. Просмотр дбф-файла с помощью php скрипта на виндовой машине успешен и корректен. Вот код скрипта на изменение дбф:

Код: Выделить всё

$db_path = 'w:/home/localhost/www/base/file.DBF';
$db = dbase_open($db_path, 2);
$j = 1;
   if($db)
   {
      $row = dbase_get_record_with_names($db, $j);
      unset($row['deleted']);
      $row['DATA']  = date('Ymd');
      $row['CLOCK'] = date('His');
      $row = array_values($row);
      dbase_replace_record($db, $row, $j);
      dbase_close($db);
   }

Re: [PHP] изменение dbf файла

Добавлено: 2010-02-08 19:38:32
zg
avalon писал(а):результаты с помощью того же php отображаются корректно и успешно.
и? в чём трабла?

Re: [PHP] изменение dbf файла

Добавлено: 2010-02-09 9:12:02
avalon
Дело в том, что дбф-файл под виндой будет читаться не php-скриптом, а делфийской прогой. Я покоцаный дбф-ник ей ещё не подставлял, но всё таки не приятно когда выходишь за стандарты.

Re: [PHP] изменение dbf файла

Добавлено: 2010-02-09 16:23:39
zg
avalon писал(а):но всё таки не приятно когда выходишь за стандарты.
интересно за какие? :smile:

Re: [PHP] изменение dbf файла

Добавлено: 2010-02-09 16:46:07
avalon
У меня версия php такая - PHP 5.2.6 with Suhosin-Patch 0.9.6.2 (cli) , собирал из портов. Сравнение файлов, один изменён в винде, другой во вряхе показало, что траблы в заголовке юниксового файла. Связанные с полями с типом дата, просмотрщик dbf собранный из портов, тоже отображает некорректно данные. Какие конкретно отличия?
В корректном файле открываемом что виндовым, что юниксовым просмотрищиком после объявления поля типа D идёт объявление длинны 08 00 00 00 00 00 00 00, а в юниксовом 00 00 00 00 00 00 00 00. Если в бинарном редакторе в юниксовом файле тоже поставить 08, то файл становиться корректным. Это проблема с версией или кривыми руками? Но насчёт кода изменения в дбф, брал за основу пример в доках. Если кто поможет, буду признателен.

Re: [PHP] изменение dbf файла

Добавлено: 2010-02-09 17:34:40
zg
avalon писал(а):Это проблема с версией или кривыми руками?
нет единого стандарта dbf. Его писали все кому не лень.
avalon писал(а):Если в бинарном редакторе в юниксовом файле тоже поставить 08, то файл становиться корректным.
лучше перейти на SQLite

Re: [PHP] изменение dbf файла (РЕШЕНО)

Добавлено: 2010-02-10 16:22:02
avalon
Всё решилось само собой. Обновил порты, снёс php, поставил свежую версию и всё заработало. Сейчас у меня:

Код: Выделить всё

#php -v
PHP 5.2.12 with Suhosin-Patch 0.9.7 (cli) (built: Feb 10 2010 11:18:12) (DEBUG)

Re: [PHP] изменение dbf файла

Добавлено: 2010-02-10 17:55:51
zg
zg писал(а):лучше перейти на SQLite
имхо