Ändern Sie das Verzeichnis der PHP-Module

8

Ich kompiliere PHP und setze mein Modulverzeichnis auf / usr / lib64 / 20090626-zts

Ich möchte dies in / usr / lib64 / php / modules ändern, kann jedoch keine Konfigurationsoption dafür finden.

Ich kann es in meiner php.ini ändern und das Verzeichnis verschieben, aber wenn ich phpize ausführe und ein neues Modul erstelle, wird es trotzdem in / usr / lib64 / 20090626-zts abgelegt

Copacetic
quelle
Ich habe keine Zeit, dies zu testen : EXTENSION_DIR=/usr/lib64/php/modules phpize.
Mark Wagner

Antworten:

4

Ich würde vorschlagen, / usr / lib64 / php / modules zu einem Symlink zu dem Ordner mit der ID zu machen. Dies verhindert auf lange Sicht das Mischen von Erweiterungen aus verschiedenen Versionen von PHP.

Außerdem: Sie sollten es festlegen können, indem Sie es EXTENSION_DIRals Umgebungsvariable festlegen , bevor Sie PHPs configure ausführen. etwas wie

 $ EXTENSION_DIR=/my/location ./configure --with-some-extension
johannes
quelle
Ja, das macht Sinn, ich möchte nicht, dass meine Module in Zukunft in Konflikt geraten. Ich denke, ich werde den Ordnernamen einfach in Ruhe lassen.
Copacetic
8

Überprüfen Sie das aktuelle Erweiterungsverzeichnis mit:

php-config --extension-dir

und Sie können es ändern , indem Sie extension_dirin php.ini:

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

Vergessen Sie nicht, Apache neu zu starten.

Quanten
quelle
0

Mein Problem war nicht identisch, aber da diese Frage als erste Antworten enthielt, die letztendlich sehr hilfreich waren, werde ich meine Kommentare hinzufügen.

Ich hatte aufgrund der Verzeichniskonfiguration Probleme, PHP (unter Centos7 in einem Docker-Container) dazu zu bringen, MySQL zu verwenden - obwohl ich vorgefertigte Binärdateien verwendete und nichts kompilierte. Obwohl die verschiedenen pdo- und mysqlnd.so-Module und INI-Dateien in meinem Container installiert wurden (nur unter Verwendung von Standard yum install php72und allen anderen im PHP-Installationsassistenten angegebenen Dingen ), befanden sie sich nicht an den Standardorten, nach denen PHP sie suchte. Ich habe keine Idee warum. Vielleicht ist es eine Art Docker-Sache?

Um das Problem zu lösen, musste ich eine extension_dirAnweisung an meine PHP.inisenden und AUCH die PHP_INI_SCAN_DIRenv-Variable setzen. Dies sind die relevanten Befehle aus meiner Docker-Datei

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

Ich hoffe, dass dies später nicht zu Modulkonflikten führt, wie @johanes warnt.

charlesdeb
quelle
> "Sie befanden sich nicht an den Standardorten." Sie haben die Anweisungen des Assistenten nicht ordnungsgemäß befolgt und "Einzelversion" ausgewählt. Alles wurde an den Standardorten installiert. SCL verwendet unterschiedliche Pfade, um mehrere Versionen zuzulassen.
Remi Collet
@ RemiCollet danke für die Antwort. Ich habe eine einzelne Version aus dem Assistenten ausgewählt - was ich meiner Meinung nach möchte, da ich nur eine Version von PHP in meinem Container haben möchte. Der einzige Teil der Assistentenanweisungen, den ich nicht in meine Docker-Datei aufgenommen habe, war "yum --enablerepo = remi-php72-test install php-xxx" und yum update. Vermisse ich hier etwas?
Charlesdeb
Diese neuesten Befehle gelten für Testpakete und für zusätzliche Erweiterungen (ersetzen Sie xxx durch den Namen der gewünschten Erweiterung)
Remi Collet
@ RemiCollet Sorry, ich muss ein bisschen dumm sein. Wollen Sie damit sagen, dass bei Verwendung der Testpakete mein Problem behoben wird, dass die MySQL-Module nicht in die .../remi/...Ordner gelangen?
Charlesdeb
1
Ich sage, dass php- * -Pakete (einzelne Version) Standardpfade verwenden und php72-php- * (SCL, mehrere Versionen) / opt / remi verwenden. Siehe blog.remirepo.net/pages/English-FAQ#scl
Remi Collet