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?



@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


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"

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

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.


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

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

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.)


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)


3

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


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


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.


0

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

php -i >> phpinfo-cli.txt

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.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.