Сбросить переменную среды Apache PATH в Windows

Недавно я обновил Apache и PHP из соображений безопасности, а также использую PHP для связи с базами данных Oracle. В новой версии PHP есть только модуль php_oci8_12c.dll, поэтому я также установил клиент Oracle 12c.

После включения модуля oci8 я заметил, что модуль не отображается в Apache, когда я запускаю phpinfo (), но если я запускаю php -m, я нахожу там модуль oci8. Дальнейшая проверка показала, что переменная среды PATH не обновлялась с момента обновления и что новый путь добавляется только в конце переменной PATH.

Я вставляю ниже (урезанные) данные PATH из Apache:

C:\oracle\client11gR2_32\bin;C:\www\Apache24\bin;C:\www\php548;C:\database\mysql5528\bin;C:\oracle12c\client12c_32\bin;C:\www\php562;C:\www\php562\ext

По сравнению с системной переменной PATH:

C:\oracle12c\client12c_32\bin;C:\oracle\client11gR2_32\bin;C:\www\Apache24\bin;C:\www\php562;C:\www\php562\ext;C:\database\mysql5528\bin

Я попытался перезапустить службу Apache, а также удалить / переустановить, но ничего не работает. Кажется, что данные каким-то образом «кешируются» в отдельном месте, но я не могу сказать где. Если я переименовал папку HOME клиента Oracle 11g, то модуль oci8 будет обнаружен и загружен в Apache.

Я искал по всему Интернету «сброс» переменной Apache PATH, но безрезультатно, поэтому размещаю его здесь. Пожалуйста помоги.


person gpm1982    schedule 14.11.2014    source источник


Ответы (1)


Я могу вспомнить две возможные причины:

  1. Путь к клиенту 12c - это пользовательская переменная, а не системная переменная (но тогда я бы ожидал, что она будет в конце списка путей)
  2. Установщик клиента 12c напрямую изменил реестр, чтобы добавить путь, поэтому системная среда еще не распознала изменение. (Если вы используете Apache как службу, то только то, что ваша учетная запись может видеть изменение пути, не означает, что учетная запись SYSTEM может видеть это изменение.)

Предполагая, что последний случай, перезагрузка сервера решит проблему. Если вы не можете перезагрузить сервер, вы можете попробовать остановить Apache, открыть диалоговое окно «Переменные среды» и просто нажать OK (в этом и во всех родительских диалоговых окнах), чтобы «повторно инициализировать» системную среду. Снова запустите Apache, и он должен выбрать новую настройку.


Относительно примечания: вам действительно следует заменить поставляемый в комплекте драйвер OCI (1.4.10) на самую последнюю сборку из PECL (сейчас 2.0.8). Как указано в описании PECL:

Используйте старую версию PHP OCI8 1.4.10 при использовании от PHP 4.3.9 до PHP 5.1.x или когда доступны только клиентские библиотеки Oracle Database 9.2.

Загружаемый файл Windows содержит php_oci8.dll, php_oci8_11g.dll и php_oci8_12c.dll. Таким образом, вам не нужно было бы пытаться изменить установку клиента Oracle.

person timclutton    schedule 16.11.2014
comment
Спасибо за ответ. Я попробовал остановить службу Apache, а затем повторно инициализировать Env. Варс. а затем вызвать службу Apache, но, к сожалению, это не сработало. Я запланирую перезапуск этого сервера в течение 2-3 дней и сообщу вам о результатах. - person gpm1982; 18.11.2014
comment
В конце концов, перезагрузка наконец-то сделает свою работу. Наконец-то я вижу, что переменные среды PATH в Apache точно совпадают с системным PATH. Спасибо за предложения. - person gpm1982; 01.12.2014
comment
У меня такая же проблема с Apache и PHP, которые не перезагружают путь к Windows. Я изменил версию PHP, которая находится в другой папке, но Apache и PHP все еще ищут старый путь, поэтому PHP не может работать (соединение было сброшено). Мне нужно переименовать старую папку PHP в другую, и она снова работает. - person vee; 16.01.2017
comment
@vee И, предположительно, вы следовали предложению в моем ответе, которое сработало для OP, т.е. перезагрузка после правильной настройки путей? - person timclutton; 16.01.2017