ЖЖ от 2007-08-15 17:04:00

Работа с модулем для PHP DB4 от Oracle (наверное, больше с самой DB4) — это хождение по минному полю. gdb говорит, что падает оно на мьютексах. После нескольких часов «так работает, а так нет», получилась более-менее стабильная версия. Удивительно, что некоторые константы в модуль не вытащены, хотя в документации по C++ API они есть и чудно работают, если их вытащить наружу из заголовочного файла в числовых значениях.

В частности не обнаружилась очень полезная константа DB_REGISTER и менее необходимые DB_BTREE и DB_HASH. Показательно так же и то, что у некоторых методов (например, open у класс DB4) параметры вызова отличаюся от того, что указано в документации к модулю. Лучше читать исходники.

Комментарии 17

indeyets № 1
у тебя не возникло желания написать его «по правильному»?

кстати… если там мьютексы, то не легче ли станет если php будет zts'ный? (мысль вслух, скорее всего не станет)
bolk автор № 3
Мне кажется, что проблема не в самом модуле, а в DB4 всё-таки. Про zts у меня мысли возникали, но если раньше это называлось «with-experimental-zts», то сейчас называется «enable-maintainer-zts».

Это точно работает?
indeyets № 4
это точно работает. у меня локально php работает именно в этом режиме (отлаживаю экстеншны)
оно чуть медленнее, зато корректно работает в многотредовой среде
bolk автор № 5
Ясно. Есть несовместимые extensions?
indeyets № 6
bolk, есть те которые ведут себя неадекватно в многотредовой среде (но включение/выключение zts на это не влияет)
списка таких расширений насколько я знаю не существует
bolk автор № 7
indeyets, Ясно.

а это чего, не знаешь:

configure: error: Cannot find libmysqlclient_r under /usr/local.

возникает после --enable-maintainer-zts
Комментарий удалён № 10
bolk автор № 11
Я тут только один, какие «господа»?

У вас два варианта:

1) Database (dbm-style) Abstraction Layer Functions
2) собственное расширение для PHP, которое идёт в комплекте с DB4 и требует thread safe PHP

возможно есть какие-то ещё extension, о которых я не знаю, используйте Google.
Комментарий удалён № 12
bolk автор № 13
Было бы неплохо, если бы вы обратились к документации http://ru2.php.net/manual/en/dba.setup.php

там всё написано.
Комментарий удалён № 14
bolk автор № 15
В двух словах, надо либо самому скомпилировать модуль, либо найти кого-то, кто это сделает или уже сделал. Этот кто-то не я.