Страница 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 писал(а):но всё таки не приятно когда выходишь за стандарты.
интересно за какие?

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
имхо