Изменить каталог модулей php

8

Я компилирую php и устанавливаю каталог моих модулей в / usr / lib64 / 20090626-zts

Я хотел бы изменить это на / usr / lib64 / php / modules, но я не могу найти вариант конфигурации для этого.

Я могу изменить его в своем php.ini и переместить каталог, но когда я запускаю phpize и создаю новый модуль, он все равно помещает его в / usr / lib64 / 20090626-zts

первоклассный
источник
У вас нет времени, чтобы проверить это EXTENSION_DIR=/usr/lib64/php/modules phpize.
Марк Вагнер

Ответы:

4

Я бы предложил сделать / usr / lib64 / php / modules символической ссылкой на папку с идентификатором. Это предотвращает смешивание расширений из разных версий PHP в долгосрочной перспективе.

Кроме того: вы должны иметь возможность установить его, установив в EXTENSION_DIRкачестве переменной среды перед запуском PHP configure. что-то вроде

 $ EXTENSION_DIR=/my/location ./configure --with-some-extension
Johannes
источник
Да, это имеет смысл, я не хочу, чтобы мои модули конфликтовали в будущем. Я думаю, что я просто оставлю имя папки в покое.
copacetic
8

Проверьте текущий каталог расширений с помощью:

php-config --extension-dir

и вы можете изменить его, установив extension_dirв php.ini:

extension_dir="/usr/lib64/php/modules"

Не забудьте перезапустить Apache.

кванты
источник
0

Моя проблема не была идентичной, но так как этот вопрос был первым, на котором появились ответы, которые в конечном итоге были очень полезны, я добавлю свои комментарии.

У меня были проблемы с получением PHP (под Centos7, работающим в док-контейнере) для использования MySQL из-за конфигурации каталога - хотя я использовал предварительно собранные двоичные файлы и ничего не компилировал. Хотя различные модули pdo и mysqlnd.so и файлы .ini были установлены в моем контейнере (только с использованием стандартных yum install php72и других компонентов, указанных в мастере установки PHP ), они не были в местах по умолчанию, которые их искал в PHP. Понятия не имею почему. Может это какая-то докерская штука?

В любом случае, чтобы решить эту проблему, мне нужно было передать extension_dirдирективу моему PHP.iniи ТАКЖЕ установить PHP_INI_SCAN_DIRпеременную env. Это соответствующие команды из моего Dockerfile

ENV PHP_INI_SCAN_DIR=/etc/php.d/
RUN echo 'extension_dir = "/usr/lib64/php/modules"' >> /etc/opt/remi/php72/php.ini

Я надеюсь, что это не приведет к конфликтам модулей в будущем, как предупреждает @johanes.

charlesdeb
источник
> «они не были в местах по умолчанию». Вы не следовали инструкциям мастера должным образом, выбрав «единственная версия», все в установленных местах по умолчанию. SCL использует разные пути для нескольких версий.
Реми Коллет
@RemiCollet спасибо за ответ. Я выбрал одну версию из мастера - это то, что я думаю, потому что мне нужна только одна версия PHP в моем контейнере. Единственная часть инструкций мастера, которую я не добавил в свой dockerfile, была `yum --enablerepo = remi-php72-test install php-xxx` и yum update. Я что-то здесь упускаю?
charlesdeb
Эти последние команды предназначены для тестовых пакетов и для дополнительного расширения (замените xxx на имя
Remi Collet
@RemiCollet Извините, я должен быть немного тупым. Вы говорите, что если использовать тестовые пакеты, это исправит мою проблему с модулями mysql, не входящими в .../remi/...папки?
charlesdeb
1
Я говорю, что пакеты php- * (одна версия) используют стандартные пути, а php72-php- * (SCL, несколько версий) используют / opt / remi. См. Blog.remirepo.net/pages/English-FAQ#scl
Реми Коллет