PHP7 + Oracle — как настроить кодировку?

В наличии имеем ubuntu 16.04 server. Установлен instantclient 11.2.0.4.0 (basic, devel и sqlplus) из rpm-ок через alien (установка из zip дает аналогичный результат). Переменные окружения ORACLE_HOME, LD_LIBRARY_PATH и NLS_LANG прописаны и в /etc/environment и в /etc/profile, создан также файл /etc/profile.d/oracle.sh и импортирован в ~/.profile. Установлен PHP 7.0.8 из штатного репозитория. Расширения oci8 и pdo_oci успешно скомпилированы и подключены.
Код
try {
    $pdo = new PDO("oci:dbname=DEVELOP", "user", "passwd");
    echo "good connection with PDO";
} catch (Exception $e) {
    echo $e->getMessage();
}

спокойно отрабатывает, коннект проходит.
Но стоит лишь добавить в DSN кодировку, то есть "oci:dbname=DEVELOP;charset=AL32UTF8" как тут же ловим ошибку в виде "OCIEnvNlsCreate: Check the character set is valid and that PHP has access to Oracle libraries and NLS data". При этом тест подключения через функции oci_connect библиотеки oci8 работает на "ура" даже с указанием кодировок.

Что делалось и не помогло победить вышеуказанную ошибку:
  • прописывались переменные окружения в файл конфигурации php7.0-fpm
  • переменные окружения в файл запуска fpm-a, как советуют тут
  • владельца /usr/lib/oracle/ выставлял www-data:www-data
  • запуск php-fpm от root


P.S. Как показали тесты - виноват во всем именно php-fpm, потому как запуск тестового скрипта подключения в CLI через банальный "php -f ./index.php" дает положительный результат.

Нужна помощь.
  • Вопрос задан
  • 1080 просмотров
Пригласить эксперта
Ответы на вопрос 2
@pahanium
На старой версии я не припоминаю такой проблемы, на новой установки, в cli все ок, а в fpm нет.
Перепробовал все, вернул потом все взад, а помогло как написано тут
в файле /etc/php/5.6/fpm/pool.d/www.conf прописать (12.2 заменить на свою версию)
env[LD_LIBRARY_PATH] = /usr/lib/oracle/12.2/client64/lib                        
env[ORACLE_HOME] = /usr/lib/oracle/12.2/client64/lib
Ответ написан
@OracleDBA
По указанной линке содержиться скрипт для генерации текущих переменных окружения (environment) для базы данных.
Так же в нем имеется хороший пример файла среды для базы данных.

dbpilot.net/2018/01/30/generating-an-enviroment-fi...

...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы