В наличии имеем 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" дает положительный результат.
Нужна помощь.