Intereting Posts
Кэширование PHP Opcode / Zend Acceleration и include_once vs. require_once показать данные в лайтбокс Laravel 5.1: сочетания дескрипторов с одинаковыми именами столбцов Маршрутизация CakePHP в контроллерах страниц Как сделать Rest Remover Password и изменить поле электронной почты пользователя в поле имени пользователя с помощью Laravel 5.0? Протестируйте этот метод с некоторыми параметрами, среди прочих Получить имя класса верхнего уровня, когда используется наследование и псевдоним класса Как преобразовать документ docx в html с помощью php? Dmoz / Monster для вычисления подсчета каждой категории и подкатегории? Фильтровать многомерные массивы CodeIgniter 2.0.3 Начальная страница класса Pagination Class Ошибка при вызове хранимой процедуры через php. Литерал не соответствует строке формата Преобразователи файлов. Как они работают? Regex с div-классами Начальная страница сайта CakePHP с первого байта очень длинная

Ошибка Oracle instantclient DYLD_LIBRARY_PATH

Я использую Xamppp для macos на OSX 10.9 с Php 5.4.19 Я установил oacle instantclient, и я вижу, что oci8 включен в phpinfo (ниже):

Поддержка OCI8 Версия 1.4.9 Редакция $ Id: 44bfa713983a99b3e59477f6532e5fb51b6dee94 $ Активные постоянные соединения 0 Активные соединения 0

Я вижу, что DYLD_LIBRARY_PATH установлен в моей phpinfo.

DYLD_LIBRARY_PATH /usr/local/instantclient/11.2.0.3

Но когда я пытаюсь подключиться к php, я получил ту же ошибку в течение двух дней 🙁

Предупреждение: oci_connect (): ошибка OCIEnvNlsCreate (). Что-то не так с вашей системой – проверьте, что DYLD_LIBRARY_PATH включает каталог с библиотеками Oracle Instant Client в файле info.php в строке 6. Предупреждение: oci_connect (): ошибка при попытке получить текст для ошибки ORA-01804 в инфо.php on line 6

Любая помощь будет большой. Благодарю.

У меня была аналогичная проблема, когда я впервые установил Instant Client на Mac OS / X.

Я нашел следующий блог:

http://blog.caseylucas.com/2013/03/03/oracle-sqlplus-and-instant-client-on-mac-osx-without-dyld_library_path/

Надеюсь, это сработает и для вас.

Я тоже много времени пытался найти решение для "PHP Warning: oci_new_connect(): OCIEnvNlsCreate() failed. There is something wrong with your system - please check that DYLD_LIBRARY_PATH includes the directory with Oracle Instant Client libraries" на Mac OS X. Наконец, после долгих исследований, я нашел решение, которое устойчиво исправляет эту ошибку и желает поделиться ею здесь, чтобы помочь другим.

В качестве небольшого фона я использую установленную Apple установку PHP на OS X 10.8.4 (PHP 5.3.15 с Suhosin-Patch) и использовал репозиторий PECL для установки расширения OCI8 после того, как я загрузил Oracle Instant Client загрузка с Oracle.com.

Я также проверил все решения этой ошибки, которые я смог найти в Интернете, включая установку LD_LIBRARY_PATH системной среды DYLD_LIBRARY_PATH , ORACLE_HOME и LD_LIBRARY_PATH в файлах ~/.bash_profile и ~/.bashrc ; попытка настроить переменные среды через модуль mod_env Apache и SetEnv в httpd.conf ; установка переменных среды через putenv("DYLD_LIBRARY_PATH=/...") в PHP-коде; а также другие предложения, но все не удалось решить эту ошибку.

Единственное рабочее решение, которое я нашел в прошлом, которое я использовал в моей предыдущей установке OS X 10.7.8, включало копирование содержимого библиотек Oracle Instant Client в постоянно найденные, но скрытые системные папки: /usr/include , /usr/bin и /usr/lib . Тем не менее, я чувствовал, что это решение не является идеальным и потенциально может затруднить поддержание и обновление библиотек в долгосрочной перспективе, и я счел, что устойчивое решение этой проблемы должно существовать где-то.

Наконец, после много дополнительных исследований, я наткнулся на сообщение на форумах OpenSUSE, в котором рассказывается, как группа пользователей там разрешила одну и ту же ошибку OCI в Apache / PHP на OpenSUSE. Сообщение форума также было расширено на комментариях, которые я видел в других сообщениях на форуме, в которых говорилось о наличии нескольких типов «переменной среды» в типичной настройке Apache / PHP:

  • Существуют переменные среды Apache, которые обычно настраиваются через mod_env – они появляются в разделе Apache Environment на php_info() .
  • Существуют переменные среды PHP, обычно устанавливаемые через php.ini или putenv() , и становятся доступными в ваших скриптах с помощью getenv() и аналогичных методов.
  • Наконец, здесь я имею в виду здесь «переменные среды процесса» – это переменные среды, которые необходимо настроить до запуска процесса Apache и как часть самого процесса запуска Apache. Недостаточно указать эти переменные среды в ~/.bash_profile например. Эти специальные переменные среды наследуются процессом Apache, когда он запускает и , самое главное, всеми его дочерними процессами, включая другие порождения процесса Apache и самим PHP, и именно эти «переменные среды для конкретных процессов» нам нужно настроить в целях постоянного и устойчивого решения нашей проблемы с библиотекой OCI8. При правильной настройке эти переменные среды появятся в разделе « Environment Variables » на php_info() .

Ключ, который привел меня к решению в Mac OS X, был опубликован на форуме OpenSUSE, в котором был добавлен комментарий члена форума key_nap , который заметил, что при запуске процесса Apache на OpenSUSE был загружен специальный файл конфигурации , Этот файл, /usr/share/apache2/load_configuration оказался скриптом bash, и им пришло в голову, что они могут включать соответствующие export DYLD_LIBRARY_PATH=... выражения export DYLD_LIBRARY_PATH=... в этом сценарии bash, а также путем настройки переменных среды , что они будут унаследованы процессом Apache и его дочерними элементами при запуске.

Это заставило меня задаться вопросом, где в Mac OS X мы сможем правильно настроить те же «переменные среды для конкретных процессов». Поскольку для работы с загрузкой системных процессов почти исключительно на OS X используется launchd , я задавался вопросом, можем ли мы настроить необходимые переменные среды в файле конфигурации launchd ? В OS X 10.8 вы должны найти файл конфигурации .plist для launchd .plist в /System/Library/LaunchDaemons/org.apache.httpd.plist . Когда я открыл файл в своей системе, я сразу заметил раздел для указания переменных среды!

Поэтому наше решение (протестированное для работы в Mac OS X 10.8.4) должно было изменить файл org.apache.httpd.plist как показано ниже (обратите внимание на включение ORACLE_HOME , DYLD_LIBRARY_PATH и LD_LIBRARY_PATH в раздел EnvironmentVariables файла) , а затем перезапустить Apache, выполнив sudo apachectl restart с терминала.

 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Disabled</key> <true/> <key>Label</key> <string>org.apache.httpd</string> <key>EnvironmentVariables</key> <dict> <key>XPC_SERVICES_UNAVAILABLE</key> <string>1</string> <key>ORACLE_HOME</key> <string>/Users/workstation/Oracle</string> <key>DYLD_LIBRARY_PATH</key> <string>/Users/workstation/Oracle/lib</string> <key>LD_LIBRARY_PATH</key> <string>/Users/workstation/Oracle/lib</string> </dict> <key>ProgramArguments</key> <array> <string>/usr/sbin/httpd-wrapper</string> <string>-D</string> <string>FOREGROUND</string> </array> <key>OnDemand</key> <false/> <key>SHAuthorizationRight</key> <string>system.preferences</string> </dict> </plist> 

Добавив эти определения переменной «специфическая для процесса» в конфигурационный файл Apache, мы гарантируем, что эти переменные среды правильно унаследованы Apache и всеми его дочерними процессами, включая PHP и любые модули PHP, такие как OCI8! Очевидно, вы должны заменить путь /Users/workstation/Oracle/... показанный в приведенном выше примере, с правильными путями к вашей собственной установке библиотек клиентов Oracle – используйте те же значения, что и при указании этих переменных среды в ~/.bash_profile .

Также убедитесь, что у вас установлена ​​правильная версия библиотек мгновенных мгновенных данных Oracle для вашей системы – то есть либо 32-разрядные, либо 64-разрядные варианты в зависимости от того, какая версия OS X вы используете, и работает ли Apache и PHP в 32- или 64-разрядный режим. В OS X 10.8 и выше Apache / PHP должен работать как 64-битные процессы. Если вы не уверены, вы можете сделать то, что я сделал на своем предыдущем Mac, и объединить 32- и 64-разрядные версии бинарных файлов библиотеки Oracle Instant Client в единые многоадресные жировые двоичные файлы, используя инструмент lipo из XCode, который будет создавать двоичные файлы которые загружаются на любой платформе.

Наконец, решение, подробно описанное выше, чтобы настроить переменные среды в файле конфигурации запуска запуска Apache, также должно работать для решения подобных ошибок в других PHP-модулях, запущенных через Apache, которые полагаются на переменные среды для поиска связанных библиотек. Если вы используете PHP из командной строки, вы должны указать все переменные среды, которые вам нужны в файлах ~/.bash_profile и / или ~/.bashrc .