Como encontrar o arquivo php.ini usado pela linha de comando?

389

Eu preciso habilitar o pdo_mysql no meu ambiente EasyPhp, então fui para o arquivo php.ini e descomentei a seguinte linha:

extension=php_pdo_mysql.dll

Infelizmente ainda tenho o mesmo problema. Estou usando a CLI, então suponho que preciso localizar o arquivo php.ini usado pela CLI. Como posso encontrá-lo?

Amokrane Chentir
fonte
Veja também stackoverflow.com/q/8684609/632951
Pacerier
@sjas Não está errado, está correto e permite que você saiba o caminho do php.ini carregado no CLI.
SaidbakR

Respostas:

952

Basta executar php --inie procurar Loaded Configuration Filena saída o local php.iniusado pela sua CLI

Mchl
fonte
5
@Mchl Gostaria de lhe dar um voto positivo, mas acho que você deveria ter postado a resposta com grep na linha.
8132 Jim W.
9
@BradFJacobs Por que usar grep quando agora é multiplataforma?
Garet Claborn
Mas isso não mostra apenas o que é carregado ao usar o PHP via CLI (porque você está executando o comando a partir disso).
Antony D'Andrea
11
@ AntonyD'Andrea: qual é exatamente do que se trata a questão. Vejo? Ele afirma isso mesmo no título: Como encontrar o arquivo php.ini usado pela linha de comando ?
Mchl
esta não é a minha resposta ... no meu caso do tipo I sudo find / -iname php.inie funda /etc/php/7.0/apache2/php.inio lugar certo do arquivo de configuração php.ini direito de minha máquina que não foi encontrado por php --iniou php -i | grep php.ini(ambos encontrados /etc/php/7.0/cli/php.ini)
NineCattoRules
366

Você pode obter um total phpinfo()usando:

php -i 

E, lá, existe o php.iniarquivo usado:

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

No Windows, use find:

php -i|find/i"configuration file"
Pascal MARTIN
fonte
12
Então essa instância do php não usava php.ini, exceto os valores padrão. A Configuration Filelinha de phpinfo () mostra o último local em que o php procurou um arquivo ini. Esse pode ser o local em que ele encontrou esse arquivo ou a última opção, que é% SYSTEMROOT% no Windows.
VolkerK
2
@pascal: php -i | find "Configuration file"deve funcionar no Windows. Definitivamente não é tão poderoso quanto o grep, mas findfará uma pesquisa básica de strings por você. Obviamente, se o php -i despeja sua saída no stderr, você provavelmente é o SOL.
Marc B
2
findfaz distinção entre maiúsculas e minúsculas por padrão, portanto deve ser perfeito ( php -i | find "Configuration File") ou diferenciar maiúsculas de minúsculas ( php -i | find /i "Configuration file"- observe a /isinalização).
deizel
9
Considere adicionar php --inicomo alternativa; disponível desde o PHP 5.2.3 :)
Jack
2
Ninguém mencionou, que é possível obter o valor a partir do script chamando php_ini_loaded_file e quando necessários php_ini_scanned_files
Radek Benkel
16

Você pode usar get_cfg_var ('cfg_file_path') para isso:

Para verificar se o sistema está usando um arquivo de configuração, tente recuperar o valor da configuração de configuração cfg_file_path. Se isso estiver disponível, um arquivo de configuração está sendo usado.
Ao contrário do phpinfo (), ele dirá se não encontrou / usou o php.ini.

var_dump( get_cfg_var('cfg_file_path') );

E você pode simplesmente definir a localização do php.ini . Você está usando a versão da linha de comando; portanto, usando o -cparâmetro, você pode especificar o local, por exemplo

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

Execute php --inino seu terminal, você obterá todos os detalhes sobre os arquivos 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 mais, use o comando de ajuda. php --helpEle exibirá todas as opções possíveis.

Sathish
fonte
8

Às vezes, as coisas nem sempre são como parecem quando se trata de arquivos de configuração em geral. Então, aqui estou aplicando meus métodos usuais para explorar quais arquivos são abertos por um processo.

Eu uso um programa de linha de comando muito poderoso e útil chamado strace para me mostrar o que realmente está acontecendo nas minhas costas!

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

O Strace extrai as chamadas do kernel (sistema) que seu programa faz e despeja a saída no arquivo especificado por -o

É fácil usar o grep para procurar ocorrências do php.ini neste log. É bastante óbvio olhar para a seguinte resposta típica para ver o que está acontecendo.

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
fonte
11
php -ime deu resultados incorretos, mas este está perfeitamente bem. Obrigado!
Dmitry Ginzburg
7

Se você deseja que todos os arquivos de configuração sejam carregados, isso indica:

php -i | grep "\.ini"

Alguns sistemas carregam coisas de mais de um arquivo ini. No meu sistema ubuntu, fica assim:

$  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
fonte
6

No OSX Mavericks, executando:

$ php -i | grep 'Configuration File'

Devolvida:

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

No /etc/diretório estava:

php.ini.default

(bem como php-fpm.conf.default)

Eu era capaz de copiar php.ini.defaultpara php.ini, adicione date.timezone = "US/Central"ao topo (logo abaixo [php]), eo problema está resolvido.

(Pelo menos a mensagem de erro se foi.)

MikeiLL
fonte
5

Se você precisar passá-lo para outro aplicativo, poderá fazer algo como:

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

retorna apenas o caminho. php -c $(php --ini | grep Loaded | cut -d" " -f12)passará no arquivo de configuração (útil para fpm)

Mike Mackintosh
fonte
3

Pelo que me lembro quando costumava usar o EasyPHP, o arquivo php.ini está dentro C:\Windows\ouC:\Windows\System32

Tim Cooper
fonte
2
Certo, está me dizendo C: \ WINDOWS. Mas eu não achei isso a sério!
Amokrane Chentir
2

Faz

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

Isso produzirá todos os arquivos nomeados php.ini .

Descubra qual você está usando, geralmente apache2/php.ini

Han Van Pham
fonte
Isso não funciona se não houver arquivo php.ini (alguns contêineres do docker). Portanto, a resposta aceita é mais adequada.
Manuel Manhart 25/02/19
myyyyyyyyyy man
doc holiday
@emilioestevez * woman
willsmanley
1

No seu arquivo php.ini, defina o diretório de extensão, por exemplo:

extension_dir = "C:/php/ext/"

Você verá na sua pasta PHP uma pasta ext com todas as DLLs e extensões.

Marc Uberstein
fonte
0

Salve a saída do phpinfo da CLI no arquivo local:

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

No contêiner do docker phpmyadmin / phpmyadmin, nenhum arquivo php.ini. Mas existem dois arquivos: php.ini-debug e php.ini-production

Para resolver o problema, simplesmente renomeie um dos arquivos para php.ini e reinicie o contêiner do docker.

Ivan Gusev
fonte
-4

Não há php.ini usado pela linha de comando. Você tem que copiar o arquivo de ...EasyPHP-<<version>>\apache\php.ini para depois ...EasyPHP-<<version>>\php\php.inieditar o arquivo em php diretório

Referência:

antitóxico
fonte