Драйвер Informix для Informix (IDS) 7.x, SE 7.x, Universal
Server (IUS) 9.x и IDS 2000 реализован в "ifx.ec" и
"php3_ifx.h" в директории расширения informix. Поддержка IDS 7.x весьма
основательна, с полной поддержкой столбцов BYTE и TEXT. Поддержка IUS 9.x
частично завершена: введены новые типы данных, но поддержка SLOB и CLOB всё ещё в стадии разработки.
Замечания по конфигурации:
вам необходима версия ESQL/C для компиляции драйвера Informix для РНР.
ESQL/C версии с 7.2x должны работать нормально. ESQL/C является теперь частью Informix Client SDK.
Убедитесь, что переменная "INFORMIXDIR" установлена и что
$INFORMIXDIR/bin имеется в вашей переменной окружения PATH, прежде чем запускать скрипт "configure".
Примечание:
скрипт configure будет автоматически определять директории библиотек и include, если вы запустите configure
--with_informix=yes. Вы можете переопределить это автоопределение, специфицировав "IFX_LIBDIR", "IFX_LIBS"
и "IFX_INCDIR" в окружении. Скрипт configure также попытается определить
версию вашего сервера Informix. Он установит переменную условной компиляции
"HAVE_IFX_IUS", если ваша версия Informix >= 9.00.
Примечание:
убедитесь, что переменные окружения Informix INFORMIXDIR и INFORMIXSERVER доступны для PHP ifx-драйвера и что директория
INFORMIX bin находится в PATH. Проверьте это, запустив скрипт, содержащий
вызов phpinfo(), прежде чем начать тестирование. На выводе
phpinfo() эти переменные должны быть перечислены. Это TRUE как для CGI php, так и для Apache mod_php. Вам может понадобиться установить
эти переменные окружения в стартовом скрипте вашего Apache.
Совместно используемые библиотеки Informix также должны быть доступны
загрузчику (проверьте LD_LINBRARY_PATH или ld.so.conf/ldconfig).
Некоторые замечания об использовании BLOB’ов (столбцы TEXT и BYTE):
BLOB’ы нормально адресуются BLOB-идентификаторами.
Запросы выборки возвращают "blob id" для каждого столбца BYTE и TEXT. Вы
можете получить содержимое с помощью "string_var = ifx_get_blob($blob_id);",
если вы выбрали получение BLOB’ов в памяти (с
помощью: "ifx_blobinfile(0);"). Если вы предпочитаете получать содержимое
BLOB-столбцов в файле, используйте "ifx_blobinfile(1);", а
"ifx_get_blob($blob_id);" даст вам filename. Используйте нормальный I/O файлов для получения содержимого blob.
Для запросов insert/update вы обязаны создать эти "blob id’ы" самостоятельно с помощью "
ifx_create_blob();". Затем подключите blob id’ы в массив и заместите blob-столбцы знаком вопроса (?)
в строке запроса. Для update/insert вы ответственны за установку blob-содержимого
с помощью ifx_update_blob().
Поведение BLOB-столбцов может быть изменено переменными конфигурации, что
также можно сделать на этапе прогона программы:
переменная конфигурации : ifx.textasvarchar
переменная конфигурации : ifx.byteasvarchar
runtime-функции :
ifx_textasvarchar(0) : использовать blob id’ы для select-запросов со
столбцами TEXT
ifx_byteasvarchar(0) : использовать blob id’ы для select-запросов со столбцами BYTE
ifx_textasvarchar(1) : возвращать столбцы TEXT, как если бы они были столбцами
VARCHAR, чтобы вам не нужно было использовать blob id’ы дляselect-запросов
ifx_byteasvarchar(1) : возвращать столбцы BYTE, как если бы они были столбцами
VARCHAR, чтобы вам не нужно было использовать blob id’ы для select-запросов
переменная конфигурации : ifx.blobinfile
runtime-функция :
ifx_blobinfile_mode(0) : возвращать столбцы BYTE в памяти, blob id позволяет получать содержимое
ifx_blobinfile_mode(1) : возвращать столбцы BYTE в файле, blob id позволяет получать имя файла
Если вы устанавливаете для ifx_text/byteasvarchar значение 1, вы можете использовать столбцы TEXT и BYTE
в select-запросах, как нормальные (но всё же long)
поля VARCHAR. Поскольку все строки "подсчитаны" в PHP, он остаётся "binary safe".
Вы обязаны обработать это корректно. Возвращаемые данные могут содержать всё
что угодно, вы отвечаете за содержимое.
Если вы устанавливаете для ifx_blobinfile значение 1, используйте имя файла, возвращаемое
ifx_get_blob(..), для получения blob-содержимого. Заметьте, что в этом
случае ВЫ ОТВЕЧАЕТЕ ЗА УДАЛЕНИЕ ВРЕМЕННЫХ ФАЙЛОВ, СОЗДАННЫХ INFORMIX, когда
извлекаете ряды. Каждый новый извлечённый ряд создаст новый временный файл для каждого столбца BYTE.
Размещение временных файлов может быть настроено переменной окружения "blobdir",
по умолчанию "." (текущая директория). Что-то вроде putenv(blobdir=tmpblob");
облегчит зачистку временных файлов, случайно пропущенных (имена их всех начинаются с "blb").
Автоматическая доводка "char"-данных (SQLCHAR и SQLNCHAR): это можно
установить переменной окружения
ifx.charasvarchar : если установлено 1, ведомые пробелы автоматически
удаляются, давая вам некоторое подобие "отсечения/chopping".
NULL-значения:
переменная конфигурации ifx.nullformat (и функция времени выполнения ifx_nullformat()), если установлена в TRUE, возвратит NULL
-столбцы как строку "NULL", если установлена FALSE, они возвратят пустую строку. Это позволяет вам выбирать между
NULL -столбцами и пустыми столбцами.