Come trovare il file php.ini utilizzato dalla riga di comando?


389

Devo abilitare pdo_mysql nel mio ambiente EasyPhp, quindi sono andato al file php.ini e ho commentato la seguente riga:

extension=php_pdo_mysql.dll

Purtroppo ho ancora lo stesso problema. Sto utilizzando l'interfaccia della riga di comando, quindi suppongo di dover individuare il file php.ini utilizzato dall'interfaccia della riga di comando. Come posso trovarlo?



@sjas Non è sbagliato, è corretto e ti consente di conoscere il percorso del php.ini caricato nel cli.
SaidbakR,

Risposte:


952

Basta eseguire php --inie cercare Loaded Configuration Filenell'output la posizione php.iniutilizzata dalla propria CLI


5
@Mchl Ti voterei a favore, ma penso che avresti dovuto pubblicare la risposta con grep nella riga.
Jim W.

9
@BradFJacobs perché usare grep quando ora è multipiattaforma?
Garet Claborn,

Ma questo non ti mostra solo quello che viene caricato quando si utilizza PHP tramite l'interfaccia della riga di comando (perché si esegue il comando da quello).
Antony D'Andrea,

1
@ AntonyD'Andrea: che è esattamente di che si tratta. Vedere? Lo afferma anche nel titolo: come trovare il file php.ini utilizzato dalla riga di comando ?
Mchl,

questa non è la mia risposta ... nel mio caso scrivo sudo find / -iname php.inie trova /etc/php/7.0/apache2/php.iniil posto giusto del file di configurazione php.ini giusto della mia macchina che non è stato trovato da ( php --inio php -i | grep php.initrovato entrambi /etc/php/7.0/cli/php.ini)
NineCattoRules

366

Puoi ottenere un pieno phpinfo()usando:

php -i 

E, lì dentro, c'è il php.inifile usato:

$ php -i | grep 'Configuration File'
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

Su Windows utilizzare findinvece:

php -i|find/i"configuration file"

12
Quindi questa istanza di php non ha usato affatto php.ini ma i valori predefiniti. La Configuration Filelinea di phpinfo () mostra l'ultimo posto dove php ha cercato un file ini. Questo può essere il luogo in cui ha trovato un tale file o l'ultima opzione che risulta essere% SYSTEMROOT% su Windows.
VolkerK,

2
@pascal: php -i | find "Configuration file"dovrebbe funzionare su Windows. Sicuramente non potente come grep, ma findfarà la ricerca di stringhe di base per te. Naturalmente, se php -i scarica il suo output su stderr, probabilmente sei SOL.
Marc B,

2
findfa distinzione tra maiuscole e minuscole per impostazione predefinita, quindi deve essere perfetto ( php -i | find "Configuration File") o maiuscole / minuscole ( php -i | find /i "Configuration file"- notare la /ibandiera).
Deizel,

9
Valuta di aggiungere php --inicome alternativa; disponibile da PHP 5.2.3 :)
Ja͢ck il

2
Nessuno ha menzionato che è possibile prendere quel valore dallo script chiamando php_ini_loaded_file e quando necessario php_ini_scanned_files
Radek Benkel,

16

Puoi usare get_cfg_var ('cfg_file_path') per quello:

Per verificare se il sistema utilizza un file di configurazione, provare a recuperare il valore dell'impostazione di configurazione cfg_file_path. Se questo è disponibile, viene utilizzato un file di configurazione.
A differenza di phpinfo () dirà se non ha trovato / usato affatto un php.ini.

var_dump( get_cfg_var('cfg_file_path') );

E puoi semplicemente impostare la posizione di php.ini . Stai utilizzando la versione della riga di comando, quindi utilizzando il -cparametro puoi specificare la posizione, ad es

php -c /home/me/php.ini -f /home/me/test.php

13

Esegui php --ininel tuo terminale, otterrai tutti i dettagli sui file ini

[root@tamilan src]# php --ini
Configuration File (php.ini) Path: /etc
Loaded Configuration File:         /etc/php.ini
Scan for additional .ini files in: /etc/php.d
Additional .ini files parsed:      /etc/php.d/apc.ini,
/etc/php.d/bcmath.ini,
/etc/php.d/curl.ini,
/etc/php.d/dba.ini,
/etc/php.d/dom.ini,
/etc/php.d/fileinfo.ini,
/etc/php.d/gd.ini,
/etc/php.d/imap.ini,
/etc/php.d/json.ini,
/etc/php.d/mbstring.ini,
/etc/php.d/memcache.ini,
/etc/php.d/mysql.ini,
/etc/php.d/mysqli.ini,
/etc/php.d/pdo.ini,
/etc/php.d/pdo_mysql.ini,
/etc/php.d/pdo_sqlite.ini,
/etc/php.d/phar.ini,
/etc/php.d/posix.ini,
/etc/php.d/sqlite3.ini,
/etc/php.d/ssh2.ini,
/etc/php.d/sysvmsg.ini,
/etc/php.d/sysvsem.ini,
/etc/php.d/sysvshm.ini,
/etc/php.d/wddx.ini,
/etc/php.d/xmlreader.ini,
/etc/php.d/xmlwriter.ini,
/etc/php.d/xsl.ini,
/etc/php.d/zip.ini

Per di più, usa il comando php --helphelp. Verranno visualizzate tutte le opzioni possibili.


8

A volte le cose non sono sempre come sembrano quando si tratta di configurare i file in generale. Quindi qui sto applicando i miei soliti metodi per esplorare quali file vengono aperti da un processo.

Uso un programma a riga di comando molto potente e utile chiamato strace per mostrarmi cosa sta succedendo davvero alle mie spalle!

$ strace -o strace.log php --version
$ grep php.ini strace.log

Strace estrae le chiamate del kernel (sistema) effettuate dal programma e scarica l'output nel file specificato da -o

È facile usare grep per cercare le occorrenze di php.ini in questo registro. È abbastanza ovvio guardare la seguente risposta tipica per vedere cosa sta succedendo.

open("/usr/bin/php.ini", O_RDONLY)      = -1 ENOENT (No such file or directory)
open("/etc/php.ini", O_RDONLY)          = 3
lstat("/etc/php.ini", {st_mode=S_IFREG|0644, st_size=69105, ...}) = 0

1
php -imi ha dato risultati errati, ma questo va benissimo. Grazie!
Dmitry Ginzburg,

7

Se vuoi caricare tutti i file di configurazione, questo ti dirà:

php -i | grep "\.ini"

Alcuni sistemi caricano cose da più di un file ini. Sul mio sistema Ubuntu, assomiglia a questo:

$  php -i | grep "\.ini"
Configuration File (php.ini) Path => /etc/php5/cli
Loaded Configuration File => /etc/php5/cli/php.ini
Scan this dir for additional .ini files => /etc/php5/cli/conf.d
additional .ini files parsed => /etc/php5/cli/conf.d/apc.ini,
/etc/php5/cli/conf.d/curl.ini,
/etc/php5/cli/conf.d/gd.ini,
/etc/php5/cli/conf.d/mcrypt.ini,
/etc/php5/cli/conf.d/memcache.ini,
/etc/php5/cli/conf.d/mysql.ini,
/etc/php5/cli/conf.d/mysqli.ini,
/etc/php5/cli/conf.d/pdo.ini,
/etc/php5/cli/conf.d/pdo_mysql.ini

6

Su OSX Mavericks, in esecuzione:

$ php -i | grep 'Configuration File'

restituito:

Configuration File (php.ini) Path => /etc
Loaded Configuration File:         (none)

Nella /etc/directory c'era:

php.ini.default

(oltre php-fpm.conf.default)

Sono stato in grado di copiare php.ini.defaultad php.iniaggiungere date.timezone = "US/Central"alla parte superiore (in basso a destra [php]), e il problema è risolto.

(Almeno il messaggio di errore è sparito.)


5

Se devi passare a un'altra app, puoi fare qualcosa del tipo:

php --ini | grep Loaded | cut -d" " -f12

restituisce solo il percorso. php -c $(php --ini | grep Loaded | cut -d" " -f12)passerà nel file di configurazione (utile per fpm)


3

Da quello che ricordo quando usavo EasyPHP, il file php.ini è in C:\Windows\oC:\Windows\System32


2
Giusto mi sta dicendo C: \ WINDOWS. Ma non l'ho trovato sul serio!
Amokrane Chentir,

2

Fare

find / -type f -name "php.ini" 

Questo produrrà tutti i file nominati php.ini.

Scopri quale stai usando, di solito apache2/php.ini


Questo non funziona se non esiste un file php.ini (alcuni contenitori docker). Pertanto la risposta accettata è più adatta.
Manuel Manhart,

myyyyyyyyyy man
doc holiday

@emilioestevez * donna
willsmanley il

1

Nel tuo file php.ini imposta la directory delle estensioni, ad esempio:

extension_dir = "C:/php/ext/"

Vedrai nella tua cartella PHP che c'è una cartella ext con tutte le dll e le estensioni.


0

Salva l'output phpinfo della CLI nel file locale:

php -i >> phpinfo-cli.txt

0

Nel contenitore docker phpmyadmin / phpmyadmin nessun file php.ini. Ma ci sono due file: php.ini-debug e php.ini-production

Per risolvere il problema, basta rinominare uno dei file in php.ini e riavviare il contenitore docker.


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.