Cambia la directory dei moduli php


8

Sto compilando php e sto impostando la mia directory dei moduli su / usr / lib64 / 20090626-zts

Vorrei cambiare questo in / usr / lib64 / php / modules, ma non riesco a trovare un'opzione di configurazione per farlo.

Posso cambiarlo nel mio php.ini e spostare la directory, ma quando eseguo phpize e creo un nuovo modulo lo inserisce ancora in / usr / lib64 / 20090626-zts


Non hanno avuto il tempo di testare questo: EXTENSION_DIR=/usr/lib64/php/modules phpize.
Mark Wagner,

Risposte:


4

Vorrei suggerire di rendere / usr / lib64 / php / modules un collegamento simbolico alla cartella con l'ID. Ciò impedisce a lungo termine la miscelazione di estensioni di diverse versioni di PHP.

Oltre a ciò: dovresti essere in grado di impostarlo impostando EXTENSION_DIRcome variabile d'ambiente prima di eseguire la configurazione di PHP. qualcosa di simile a

 $ EXTENSION_DIR=/my/location ./configure --with-some-extension

Sì, ha senso, non voglio che i miei moduli entrino in conflitto in futuro. Penso che lascerò solo il nome della cartella da solo.
copacetico

8

Controlla l'attuale directory delle estensioni con:

php-config --extension-dir

e puoi cambiarlo impostando extension_dirin php.ini:

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

Non dimenticare di riavviare Apache.


0

Il mio problema non era identico, ma dal momento che questa domanda è stata la prima a far apparire risposte alla fine molto utili, aggiungerò i miei commenti.

Ho avuto problemi a far funzionare PHP (con Centos7 in un container docker) per usare MySQL a causa della configurazione della directory - sebbene stavo usando binari pre-compilati e non compilando nulla. Sebbene i vari moduli pdo e mysqlnd.so e i file .ini siano stati installati nel mio contenitore (usando solo standard yum install php72e tutte le altre cose specificate nella procedura guidata di installazione di PHP ), non erano nelle posizioni predefinite che PHP li stava cercando. Non ho idea del perché. Forse è una specie di docker?

Ad ogni modo, per risolvere il problema ho dovuto fare eco a una extension_dirdirettiva per me PHP.inie anche impostare la PHP_INI_SCAN_DIRvariabile env. Questi sono i comandi rilevanti dal mio Dockerfile

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

Spero che ciò non comporti conflitti di modulo in seguito, come avverte @johanes.


> "non si trovavano nelle posizioni predefinite". Non hai seguito correttamente le istruzioni della procedura guidata, scegliendo "versione singola", tutto installato nelle posizioni predefinite. SCL utilizza percorsi diversi per consentire più versioni.
Remi Collet,

@RemiCollet grazie per la risposta. Ho scelto la versione singola dalla procedura guidata - che è quello che penso di volere poiché voglio solo una versione di PHP sul mio contenitore. L'unica parte delle istruzioni della procedura guidata che non ho aggiunto al mio dockerfile era `yum --enablerepo = remi-php72-test install php-xxx` e yum update. Mi sto perdendo qualcosa qui?
charlesdeb,

Questi ultimi comandi sono per pacchetti di test e per estensione aggiuntiva (sostituisci xxx con il nome dell'estensione che desideri)
Remi Collet,

@RemiCollet Siamo spiacenti, devo essere un po 'stupido. Stai dicendo che se usi i pacchetti di test questo risolverà il mio problema con i moduli mysql che non vanno nelle .../remi/...cartelle?
charlesdeb,

1
Dico che i pacchetti php- * (versione singola) usano percorsi standard e php72-php- * (SCL, versioni multiple) usa / opt / remi. Vedi blog.remirepo.net/pages/English-FAQ#scl
Remi Collet,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.