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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DBF & Date 
V
    Опции темы
MoLeX
Дата 21.12.2009, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

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



Привет.
Формат Date не правильно заноситься
Код

$structure = array(array("NLS",   "C",    20),
                   array("FM",    "C",    20),
                   array("IM",    "C",    15),
                   array("OT",    "C",    15),
                   array("DTR",   "D"),
                   array("PSR",   "C",    10),
                   array("PNM",   "C",    10));
  
$file = date('Y-m-d').'-test.dbf';

if( file_exists($file) )
   unlink($file);

if( ! dbase_create($file, $structure) ) 
{
   echo "Error";
}
else
{
   
   $data = array('1234567',
                 iconv("UTF-8", "866", "Петров"),
                 iconv("UTF-8", "866", "Иван"),
                 iconv("UTF-8", "866", "Иванович"),
                 date('Ymd'),
                 iconv("UTF-8", "866", "999"),
                 iconv("UTF-8", "866", "1232312"));
   $db = dbase_open($file, 2);
   dbase_add_record($db, $data);
   dbase_pack($db);
   dbase_close($db);
}


открываем полученный файл в FoxPro и на месте даты видим пустое значение, а саму дату в поле PSR

Добавлено через 5 минут и 14 секунд
Цитата

Creating a dBase file with a DATE-field type, will corrupt the database.
Work-around as for now is to use a CHAR-type and convert it later
manually.


получается что это баг РНР. а как эт можно обойти?!


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
sTa1kEr
Дата 21.12.2009, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

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



Цитата(MoLeX @  21.12.2009,  17:54 Найти цитируемый пост)
получается что это баг РНР. а как эт можно обойти?!

Либо обновить PHP до версии, где баг исправлен. 
Либо, если проблема именно в хидерах таблицы, создать ее где-либо заранее, а в PHP просто копировать.

Добавлено через 1 минуту и 45 секунд
Ну или найти спецификацию структуры базы и, как написано в workaround'е, заменять char на date ручками.
PM MAIL   Вверх
MoLeX
Дата 21.12.2009, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

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



Цитата(sTa1kEr @  21.12.2009,  18:28 Найти цитируемый пост)
Либо, если проблема именно в хидерах таблицы, создать ее где-либо заранее, а в PHP просто копировать.

к сожелению не получается. файл созданный фохпро через РНР открыть не удается(


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
sTa1kEr
Дата 21.12.2009, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

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



Цитата(MoLeX @  21.12.2009,  19:36 Найти цитируемый пост)
к сожелению не получается. файл созданный фохпро через РНР открыть не удается( 

Ну наверняка есть программы которые работают в том-же формате, что и PHP. Мб, к примеру, эта?

Добавлено @ 18:47
Ну или опять же создать в PHP и ручками поправить...

Код

function char2date($dbf, $column) {
    $fp = fopen($dbf, 'r+');
    fseek($fp, 0x20, SEEK_SET);

    while ( ($block = fread($fp, 32)) !== false && ord($block[0]) != 0x0d) {
        $i = unpack('a11name/atype/laddress/clen/h*other', $block);

        if ($i['name'] == $column) {
            if ($i['type'] != 'C') {
                throw new Exception('Column must have char type');
            }

            if ($i['len'] != 8) {
                throw new Exception('Column must have length of 8');
            }

            $data = pack('a11alch*', $i['name'], 'D', $i['address'], $i['len'], $i['other']);
            fseek($fp, -32, SEEK_CUR);
            fwrite($fp, $data);
            fclose($fp);
            return true;
        }
    }

    fclose($fp);
    return false;
}

if (char2date('2009-12-21-test.dbf', 'DTR')) {
    echo "Fixed!\n";
}


Это сообщение отредактировал(а) sTa1kEr - 21.12.2009, 20:31
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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