Драйверы 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").