¿Cómo encontrar el archivo php.ini utilizado por la línea de comando?

389

Necesito habilitar pdo_mysql en mi entorno EasyPhp, así que fui al archivo php.ini y descomenté la siguiente línea:

extension=php_pdo_mysql.dll

Lamentablemente, todavía tengo el mismo problema. Estoy usando la CLI, así que supongo que necesito localizar el archivo php.ini utilizado por la CLI. ¿Cómo puedo encontrarlo?

Amokrane Chentir
fuente
Ver también stackoverflow.com/q/8684609/632951
Pacerier
@sjas No está mal, es correcto y le permite conocer la ruta del php.ini cargado en el cli.
SaidbakR

Respuestas:

952

Simplemente ejecute php --iniy busque Loaded Configuration Fileen la salida la ubicación php.iniutilizada por su CLI

Mchl
fuente
55
@Mchl Te votaría, pero creo que deberías haber publicado la respuesta con grep en la línea.
Jim W.
99
@BradFJacobs ¿por qué usar grep cuando ahora es multiplataforma?
Garet Claborn
Pero esto no solo muestra el que se carga al usar PHP a través de la CLI (porque está ejecutando el comando desde eso).
Antony D'Andrea
1
@ AntonyD'Andrea: de eso se trata exactamente la pregunta. ¿Ver? Lo dice incluso en el título: ¿Cómo encontrar el archivo php.ini utilizado por la línea de comando ?
Mchl
esta no es mi respuesta ... en mi caso escribo sudo find / -iname php.iniy encuentra /etc/php/7.0/apache2/php.iniel lugar correcto del archivo de configuración php.ini correcto de mi máquina que no fue encontrado por ( php --inio php -i | grep php.iniambos encontrados /etc/php/7.0/cli/php.ini)
NineCattoRules
366

Puedes obtener una completa phpinfo()usando:

php -i 

Y, allí, está el php.iniarchivo utilizado:

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

En Windows, use finden su lugar:

php -i|find/i"configuration file"
Pascal MARTIN
fuente
12
Entonces, esta instancia de php no utilizó php.ini en absoluto, excepto los valores predeterminados. La Configuration Filelínea de phpinfo () muestra el último lugar donde php buscó un archivo ini. Ese puede ser el lugar donde encontró dicho archivo o la última opción que resulta ser% SYSTEMROOT% en Windows.
VolkerK
2
@pascal: php -i | find "Configuration file"debería funcionar en Windows. Definitivamente no es tan poderoso como grep, pero findhará una búsqueda básica de cadenas por ti. Por supuesto, si php -i volca su salida a stderr, probablemente sea SOL.
Marc B
2
findes sensible a mayúsculas y minúsculas, por lo que debe ser perfecto ( php -i | find "Configuration File") o no distingue entre mayúsculas y minúsculas ( php -i | find /i "Configuration file"- tenga en cuenta la /ibandera).
deizel
99
Considere agregar php --inicomo alternativa; disponible desde PHP 5.2.3 :)
Ja͢ck
2
Nadie mencionó que es posible tomar ese valor del script llamando a php_ini_loaded_file y cuando sea necesario php_ini_scanned_files
Radek Benkel
16

Puede usar get_cfg_var ('cfg_file_path') para eso:

Para verificar si el sistema está usando un archivo de configuración, intente recuperar el valor de la configuración de cfg_file_path. Si está disponible, se está utilizando un archivo de configuración.
A diferencia de phpinfo (), dirá si no encontró / usó un php.ini en absoluto.

var_dump( get_cfg_var('cfg_file_path') );

Y simplemente puede establecer la ubicación de php.ini . Está utilizando la versión de línea de comandos, por lo que utilizando el -cparámetro puede especificar la ubicación, p. Ej.

php -c /home/me/php.ini -f /home/me/test.php
VolkerK
fuente
13

Ejecútelo php --inien su terminal, obtendrá todos los detalles sobre los archivos 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

Para obtener más información, use el comando de ayuda php --helpSe mostrarán todas las opciones posibles.

Sathish
fuente
8

A veces las cosas no siempre son lo que parecen cuando se trata de archivos de configuración en general. Así que aquí estoy aplicando mis métodos habituales para explorar qué archivos abre un proceso.

¡Utilizo un programa de línea de comandos muy poderoso y útil llamado strace para mostrarme lo que realmente sucede a mis espaldas!

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

Strace extrae las llamadas del kernel (sistema) que realiza su programa y descarga la salida en el archivo especificado por -o

Es fácil usar grep para buscar ocurrencias de php.ini en este registro. Es bastante obvio mirar la siguiente respuesta típica para ver qué está pasando.

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
Thomas-Peter
fuente
1
php -ime dio resultados incorrectos, pero este está perfectamente bien. ¡Gracias!
Dmitry Ginzburg
7

Si desea cargar todos los archivos de configuración, esto le dirá:

php -i | grep "\.ini"

Algunos sistemas cargan cosas de más de un archivo ini. En mi sistema ubuntu, se ve así:

$  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
Reece45
fuente
6

En OSX Mavericks, ejecutando:

$ php -i | grep 'Configuration File'

Devuelto:

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

En el /etc/directorio estaba:

php.ini.default

(así como php-fpm.conf.default)

Yo era capaz de copiar php.ini.defaulta php.ini, agregar date.timezone = "US/Central"a la parte superior (derecha abajo [php]), y el problema está resuelto.

(Al menos el mensaje de error se ha ido).

MikeiLL
fuente
5

Si necesita pasarlo a otra aplicación, puede hacer algo como:

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

solo devuelve el camino. php -c $(php --ini | grep Loaded | cut -d" " -f12)pasará el archivo de configuración (útil para fpm)

Mike Mackintosh
fuente
3

Por lo que recuerdo cuando solía usar EasyPHP, el archivo php.ini está en C:\Windows\oC:\Windows\System32

Tim Cooper
fuente
2
Bien, me dice C: \ WINDOWS. ¡Pero no lo encontré allí en serio!
Amokrane Chentir
2

Hacer

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

Esto generará todos los archivos nombrados php.ini.

Averigua cuál usas, generalmente apache2/php.ini

Han Van Pham
fuente
Esto no funciona si no hay un archivo php.ini (algunos contenedores acoplables). Por lo tanto, la respuesta aceptada es más adecuada.
Manuel Manhart
myyyyyyyyyy hombre
doc vacaciones
@emilioestevez * mujer
willsmanley
1

En su archivo php.ini configure su directorio de extensiones, por ejemplo:

extension_dir = "C:/php/ext/"

Verá en su carpeta PHP que hay una carpeta ext con todos los dll y extensiones.

Marc Uberstein
fuente
0

Guarde la salida phpinfo de la CLI en el archivo local:

php -i >> phpinfo-cli.txt
lubosdz
fuente
0

En el contenedor docker phpmyadmin / phpmyadmin no hay archivo php.ini. Pero hay dos archivos: php.ini-debug y php.ini-production

Para resolver el problema, simplemente cambie el nombre de uno de los archivos a php.ini y reinicie el contenedor docker.

Ivan Gusev
fuente
-4

No hay php.ini utilizado por la línea de comando. Tienes que copiar el archivo de ...EasyPHP-<<version>>\apache\php.ini a ...EasyPHP-<<version>>\php\php.inique editar el que está en el directorio php

Referencia:

antitóxico
fuente