Драйверы Informix для Online (ODS) 7.x, SE 7.x и Universal
Server (IUS) 9.x выполнены в "functions/ifx.ec" и "functions/php3_ifx.h".
В данный момент написание поддержки ODS 7.2 в
известной степени завершено, с полной
поддержкой BLOB. Поддержка IUS 9.1 завершена
частично: новые типы данных уже есть, но
поддержка SLOBS все еще в стадии разработки.
Замечания по конфигурации:
Перед тем, как вы запустите скрипт "configure",
убедитесь, что переменная "INFORMIXDIR"
установлена.
Конфигурационный скрипт
автоопределяет библиотеки и включаемые (include)
директории, если вы запустите "configure --with_informix=yes".
Вы можете переопределить эти директории,
специфицировав переменные окружения "IFX_LIBDIR",
"IFX_LIBS" и "IFX_INCDIR". Скрипт также
патается автоопределить версию сервера
Informix. Он установит переменную условного
завершения "HAVE_IFX_IUS", если у вас Informix
версии >= 9.00.
Несколько замечаний по использованию
BLOB:
Текущая версия (18 Сентября 1998) полностью
поддерживает select/insert/update для BLOB.
BLOBы в общем случае адрексуются
целочисленными идентификаторами BLOB.
Запрос Select возвращает "blob id" для
каждой колонки BYTE и TEXT. Вы можете получить
содержание путем "string_var = ifx_get_blob($blob_id);"
если была выбрана передача BLOBов в память
("ifx_blobinfile(0);"). Если вы предпочитаете
получать содержимое колонки BLOB в файл,
используйте "ifx_blobinfile(1);", и "ifx_get_blob($blob_id);"
возвратит вам имя файла. Для получения
содержания используйте стандартные
операции файлового ввода/вывода
Для запросов insert/update вам неоходимо
создать "blob id's" своими силами,
используя "ifx_create_blob(..);". Затем
включите идентификатор BLOB в массив и
замените колонку BLOB знаком вопроса (?) в
строке запроса. Для updates/inserts вы
определяете содержание BLOB, используя
ifx_update_blob(...).
Поведение колонок BLOB может быт изменено
конфигурационными переменными, которые
можно устанавлиавать и во время
выполнения:
конфигурационная переменная : ifx.textasvarchar
конфигурационная переменная : ifx.byteasvarchar
функция времени выполнения :
ifx_textasvarchar(0) : использовать
идентификатор BLOB для запросов select для
колонок TEXT.
ifx_byteasvarchar(0) : использовать
идентификатор BLOB для запросов select для
колонок BYTE.
ifx_textasvarchar(1) : возвращать колонку TEXT так,
как будто это VARCHAR, без использования
идентификатора BLOB для запросов select.
ifx_byteasvarchar(1) : возвращать колонку BYTE так,
как будто это VARCHAR, без использования
идентификатора BLOB для запросов select.
Конфигурационная переменная : ifx.blobinfile
функция времени выполнения :
ifx_blobinfile_mode(0) : возвращать колонку BYTE в
память, идентификатор BLOB позволяет
получить содержание.
ifx_blobinfile_mode(1) : возвращать колонку BBYTE в
файл, по идентификатору BLOB - имя файла
Если вы устанавливаете ifx_text/byteasvarchar в 1,
то можете использовать колонки TEXT и BYTE в
запросах select как обычные (но довольно
длинные) поля VARCHAR. С тех пор, как все
строки в PHP3 "счетные", это напоминает
"бинарную безопасность".
Возвращаемые данные могут содержать все,
что угодно, вы отвечаете за содержимое.
Если вы устанавливаете ifx_blobinfile в 1,
используйте имя файла, возвращаемое
ifx_get_blob(..) для получения бинарного
содержания. Заметим, что в этом случае ВЫ
ОТВЕТСТВЕННЫ ЗА УДАЛЕНИЕ ВРЕМЕННЫХ
ФАЙЛОВ, СОЗДАННЫХ INFORMIX при выборке ряда.
Каждый новый выбранный ряд создает новые
временные файлы для каждой колонки типа
BYTE.
Местоположение временных файлов
указывается в переменной окружения "blobdir",
по умолчанию - "." (текущая директория).
Что-то вроде putenv(blobdir="tmpblob"); облегчит
удаление случайно оставленных временных
файлов (имена всех таких файлов
начинаются с "blb").