Вызов неопределенной функции ocilogon () - IIS 7.5 - Windows 2008 R2 x64 - PHP 7.2.7 - PullRequest
0 голосов
/ 21 сентября 2018

Я перевожу веб-сайт из среды разработки (Angular 4 - WAMP Server - PHP 5.6.35) в производственную среду.В процессе разработки приложение Angular 4 успешно смогло подключиться к PHP-скрипту и запустить хранимую процедуру Oracle, поэтому никаких проблем с кодом не возникает.

В процессе производства мне пришлось устанавливать PHP с помощью Интернета.Установщик платформы для успешного запуска сайта PHP с phpinfo (), показывающим «Версия PHP 7.2.7».Я запускаю приложение, и когда оно пытается запустить скрипт PHP, я получаю 500 внутренних ошибок сервера при запуске скрипта.Журналы ошибок PHP показывают:

<b>Fatal error</b>:  Call to undefined function ocilogon() in <b>C:\inetpub\wwwroot\app\assets\scripts\php\pullData.php</b> on line <b>154</b><br />

Исследования показали, что проблема может быть:

  1. Возможная проблема конфигурации IIS
  2. Проблема Oracle Instant Client
  3. Библиотека PHP OCI8 не включена

Мне кажется, я исключил конфигурацию IIS, так как интерфейс подключается к PHP и запускает сценарии без проблем.

Oracle Instant Client12.1 и другие приложения могут подключаться к Oracle.Переменная среды PATH отображается правильно установленной.Я не знаю, является ли это 32-битной или 64-битной версией - или это имеет значение.

Я думаю, что это проблема - библиотека OCI8 не включена правильно.На сервере dev я смог изменить файл php.ini, чтобы раскомментировать (и включить) библиотеку dll, и phpinfo () показал библиотеку OCI8 в списке:

extension=php_oci8_12c.dll  ; Use with Oracle Database 12c Instant Client

На производстве яМне пришлось вручную добавить строку 'extension = php_oci8_12c.dll' (она не была закомментирована), и я проверил папку EXT PHP и там есть dll.Phpinfo () по-прежнему не показывает, включена ли библиотека OCI8.

1 Ответ

0 голосов
/ 24 сентября 2018

Проблема устранена, и я предпринял следующие шаги для ее устранения:

  1. Деинсталлирован PHP (удалены все ссылки и папки PATH).
  2. Деинсталлирован Oracle Instant Client с использованием Oracle UniversalУстановщик.
  3. Установленный PHP для IIS Express (и все зависимости) с использованием установщика веб-платформы IIS.
  4. Установленный Oracle Instant Client 12c с использованием автоматического установщика (winx64_12102_client.zip), а не ZIP-файл.Таким образом, мне не нужно было вручную добавлять переменные PATH и т. Д.
  5. Проверенная версия PHP (и была ли она поточно-ориентированной) с использованием phpinfo ().Безопасность потока была отключена.Загрузил не-поточно-безопасную (nts) версию php_oci8_12c.dll с windows.php.net (https://windows.php.net/downloads/pecl/releases/oci8/2.1.8/)) и скопировал содержимое в папку EXT в каталоге установки PHP (который находился в родительской папке IIS Express).
  6. Отредактировал файлы PHP.ini (php.ini-production и php.ini-development и php.ini), добавив в них «extension = php_oci8_12c.dll» или раскомментируйте «extension = oci8_12c».
  7. Перезапустил сервер (вероятно, не нужно).
  8. Открыл CMD и запустил код 'php --ri oci8', чтобы проверить, включена ли поддержка OCI8 и используется ли я только что установившую версию Oracle Instant Client. Провереноэто также с помощью phpinfo ().
  9. Готово. Функции OCI теперь работают.

Это был изнурительный процесс, поскольку на этом веб-сервере было несколько установок Oracle Instant Client и веб-платформыУстановщик для IIS глючил при установке PHP 5.6 и его зависимостей. Мне повезло, что на этот раз установщик не допустил ошибок в PHP 7.2, как это было изначально при установке.нг PHP 5.6.

...