Onde posso encontrar o php.ini?

881

Alguns anos atrás, instalei o Apache 2.2xe o PHP 5.3.1 em um servidor Linux que mantenho. Eu usei .tar.gz e construí-os conforme as instruções (em vez de rpms e what-have-you). E tudo estava bem.

Hoje eu preciso instalar isso que parece uma biblioteca PHP. Passei por todas as etapas para fazer a instalação e localizo ibm_db2.so em$PHP_HOME/lib/extensions/somecomplicatedname/ibm_db2.so

O grande problema é o último passo é configurar o php.ini, mas NÃO existe o php.ini no meu sistema. Horror de horrores. O PHP funciona bem, exceto, é claro, por esta nova coisa ibm_db2 que eu quero usar para que alguém possa usar uma GUI para mexer DB2. (Tentei um pequeno script php que falha e indica que as funções ibm_db2 não estão disponíveis).

Eu tenho que lidar com o PHP uma vez a cada poucos anos, então, por favor, me esclareça em um nível muito básico sobre o que eu poderia fazer para permitir o acesso à GUI baseada na Web DB2.

necromante
fonte
120
90% do tempo é /etc/php5/apache2/php.ini
Adam
Consulte também stackoverflow.com/q/2750580/632951
Pacerier
6
Voto negativo porque a premissa da pergunta está errada. "não existe php.ini no meu sistema" Não, você simplesmente não conseguiu localizá-lo. Por falar nisso, locate php.iniem poucos momentos o arquivo estará no seu sistema.
Lightness Races em órbita
1
@Adam: a menos que não seja PHP5;)
Linha
2
@line sim, meu comentário não é mais relevante, embora não tenha percebido a quantidade de votos!
Adam

Respostas:

466

A melhor maneira de encontrar isso é: crie um arquivo php e adicione o seguinte código:

<?php phpinfo(); ?>

e abra-o no navegador, ele mostrará o arquivo que está realmente sendo lido!

Atualizações por OP:

  1. A resposta aceita anteriormente provavelmente será mais rápida e conveniente para você, mas nem sempre é correta. Veja comentários sobre essa resposta.
  2. Observe também a alternativa mais conveniente <?php echo php_ini_loaded_file(); ?>mencionada nesta resposta .
Tejas
fonte
11
Essa deve ser a resposta aceita. Se você possui a CLI instalada e o apache em execução, ele pode ter seu próprio arquivo ini (como meu sistema). O uso da resposta aceita retorna o que a CLI está usando, em vez do apache.
Dan
2
@ Dan Sim, você está certo. Estou alterando a resposta aceita para esta, porque o problema que você mencionou também foi encontrado por alguém na prática (que comentou a resposta anteriormente aceita). (By the way, se você tinha comentado sobre a pergunta que eu teria corrigido este problema mais cedo.)
necromante
2
Isso não funciona na minha instalação. Erro de digitação? Deveria ser<?php phpinfo(); ?>
svenyonson
9
php -r \@phpinfo\(\)\;obras para me php -r \@phpinfo\(\)\; | grep 'PHP Version' -m 1puxar informações específicas
jgraup
@zylstra Experimente:<?php echo php_ini_loaded_file(); ?>
Ates Goral
834

Na linha de comandos, execute:

php --ini

Você receberá algo como:

Configuration File (php.ini) Path: /etc/php5/cli
Loaded Configuration File:         /etc/php5/cli/php.ini
Scan for additional .ini files in: /etc/php5/cli/conf.d
Additional .ini files parsed:      /etc/php5/cli/conf.d/curl.ini,
/etc/php5/cli/conf.d/pdo.ini,
/etc/php5/cli/conf.d/pdo_sqlite.ini,
/etc/php5/cli/conf.d/sqlite.ini,
/etc/php5/cli/conf.d/sqlite3.ini,
/etc/php5/cli/conf.d/xdebug.ini,
/etc/php5/cli/conf.d/xsl.ini

Isso é da minha máquina local de desenvolvimento. No entanto, a segunda linha é a interessante. Se não houver nada mencionado, dê uma olhada no primeiro. Esse é o caminho, onde o PHP procura o php.ini.

Você pode receber as mesmas informações usando phpinfo() um script e chamá-lo em um navegador. É mencionado no primeiro bloco da saída. php -ifaz o mesmo para a linha de comando, mas é bastante desconfortável.

KingCrunch
fonte
5
aceitar a resposta mais antiga e anteriormente a mais simples (SO obriga-me a esperar um pouco antes de aceitar). obrigado pela expansão que provavelmente ajudará a próxima pessoa a procurar informações. para mim, a segunda linha disse (nenhuma), e tudo funcionou bem depois de colocar um arquivo php.ini no caminho na primeira linha. obrigado!
Necromancer
12
Eu usei esse comando e editei o arquivo php.ini que ele também me dirigia, e minhas configurações de PHP não estavam mudando e percebi que não estava me fornecendo o arquivo php.ini correto. Tentei usar a função PHP phpinfo () e ela me deu a localização correta do php.ini que eu precisava editar. Eu acho que isso é muito importante e espero que isso ajude alguém.
thecommonthread
3
/etc/php5/apache2/php.ini
Adam
@thecommonthread Obrigado por apontar o problema que encontrou na prática. Alterei a resposta aceita para uma que destaca a criação de um .phparquivo. By the way, se você comentar sobre a pergunta, então eu sou notificado e posso resolver o problema mais cedo.
Necromancer
5
@Pacerier Isso não tem nada a ver com instalações PHP diferentes, mas os SAPIs diferentes podem usar arquivos ini diferentes. Não uso o módulo apache, mas, tanto quanto me lembro, acho que não há como contornar um phpinfo.phparquivo semelhante. Com o FPM, você pode pelo menos usar php5-fpm -i | grep '\.ini'. Normalmente, você usa isso duas ou três vezes e no final do dia você sabe onde estão os arquivos;)
KingCrunch
133

Isso funciona para mim:

php -i | grep 'php.ini'

Você deve ver algo como:

Loaded Configuration File => /usr/local/lib/php.ini

ps Para obter apenas o caminho php.inin

php -i | grep /.+/php.ini -oE
coderama
fonte
5
Isso só funciona, se não é um php.ini, que é exatamente o problema: Se não houver nenhum, você ainda não sabe para onde olhar, ou onde colocar um novo.
KingCrunch 8/08/13
Nunca me deparei com uma situação em que não haja arquivo php.ini.
Coderama
A execução desse comando me dá Configuration File (php.ini) Path => /usr/lib, mas a execução <?php phpinfo(); ?>me dá Loaded Configuration File: /etc/php.ini. Então, phpinfo()foi mais confiável no meu caso.
Leo Galleguillos
2
Isso não é inteiramente correto. Toda estrutura que usa a linguagem PHP possui seu próprio arquivo php.ini. Se você chamar essa linha na linha de comando, provavelmente receberá algo como /var/php5/cli/php.ini, que não é o arquivo usado ao executar o PHP em um ambiente web. Para esse arquivo, você deve procurar na pasta apache2.
Andrea Moro
63

Na janela de comando, digite

php --ini

Ele mostrará o caminho algo como

Configuration File (php.ini) Path: /usr/local/lib
Loaded Configuration File:         /usr/local/lib/php.ini

Se o comando acima não funcionar, use este comando

echo phpinfo();
bibliophilsagar
fonte
33

Este comando deve ajudá-lo a encontrá-lo

php -r "phpinfo();" | grep php.ini
Rimantas Jacikevicius
fonte
1
Eu gosto muito mais do que algumas das outras respostas. Não é necessário que eu crie, localize um arquivo php com esse conteúdo e carregue a página no navegador.
Andrew Allbright
29

Use os seguintes comandos para encontrar o php.inicaminho do arquivo no linux.

[root@AnyDirectory ~]# locate php.ini
/etc/php.ini
/etc/php.ini.rpmnew
/usr/share/doc/php-common-5.4.45/php.ini-development
/usr/share/doc/php-common-5.4.45/php.ini-production


ou tente de outra maneira

[root@AnyDirectory ~]# php --ini
mostra o resultado do caminho

Sakthi Karthik
fonte
11
Isso é inferior a métodos como php -i | grep 'php.ini', porque encontra qualquer php.ini e não informa qual a sua instalação do PHP. Além disso, pode gerar resultados incorretos quando o locatebanco de dados não estiver atualizado.
Lxg 17/02
26
phpinfo();

informará sua localização ou na linha de comando

php -i
Leniel Maccaferri
fonte
22

O PHP vem com duas funções nativas para mostrar qual arquivo de configuração está carregado:

Dependendo da sua configuração, o Apache e a CLI podem usar arquivos ini diferentes. Aqui estão as duas soluções:

Apache:

Basta adicionar o seguinte em um arquivo php e abri-lo no seu navegador

print php_ini_loaded_file();
print_r(php_ini_scanned_files());

CLI:

Copie e cole no seu terminal:

php -r 'print php_ini_loaded_file(); print_r(php_ini_scanned_files());'
Creaforge
fonte
Resposta subestimada, completa e (quase) correta. Eu quase mudei isso para a resposta correta, mas estou preocupado que php_ini_loaded_filenem sempre esteja disponível.
Necromancer
@zylstra qual era a sua versão php? os documentos para php_ini_loaded_filedizer a versão php> = 5.2.4
necromancer
@ necromancer Não tenho certeza agora. Esqueci qual sistema eu estava verificando. : /
zylstra
8
find / -name php.ini

Ei ... funcionou para mim!

Usuário banido
fonte
3
por um lado, leva um tempo; para dois, se você tiver mais de um, como saber qual é o que está realmente em uso?
Necromancer
1
É verdade que php --inifunciona, mas esta é apenas outra opção :) Geralmente, existe uma /etc/php5/cli/php.ini /etc/php5/apache2/php.ini /etc/php5/cgi/php.inie geralmente qual você deseja é bastante óbvio. (cli, apache, cgi)
Banned_User
Esta não é uma boa solução, porque não pretendemos encontrar todo o arquivo php.ini no disco.
4

Você pode obter mais informações sobre seus arquivos de configuração usando algo como:

$ -> php -i | ack config # Use fgrep -i if you don't have ack

Configure Command =>  './configure'  ...
Loaded Configuration File => /path/to/php.ini
Mike Purcell
fonte
2

Experimente uma destas soluções

  1. No seu tipo de terminal find / -name "php.ini"

  2. No seu tipo de terminal php -i | grep php.ini. Ele deve mostrar o caminho do arquivo comoConfiguration File (php.ini) Path => /etc

  3. Se você pode acessar um dos seus arquivos php, abra-o em um editor (bloco de notas) e insira o código abaixo depois <?php em uma nova linhaphpinfo(); Isso informará a localização do php.ini
  4. Você também pode conversar com php no modo interativo. Apenas digite php -ao terminal e digite phpinfo (); após o php iniciado.
cherankrish
fonte
os pontos 1, 2 e 4 são vulneráveis ​​a vários problemas de instalação; já existem ótimas respostas. não é necessário adicionar uma resposta que não adicione nada aqui.
Necromancer
O @necromancer explica seus problemas em detalhes, para que seja útil para alguém. Temos votos positivos e negativos para respostas ruins e inusitadas e a comunidade decidirá.
cherankrish
-1

Existem várias maneiras válidas já mencionadas para localizar o arquivo php.ini, mas se você se deparou com esta página porque deseja fazer algo com ele em um script bash:

path_php_ini="$(php -i | grep 'Configuration File (php.ini) Path' | grep -oP '(?<=\=\>\s).*')" echo ${path_php_ini}

Cragmonkey
fonte
1
veja isso em vez disso: stackoverflow.com/a/24342463/621338 em vez de cumprimentá-lo, o que é quebradiço se o texto mudar, você pode fazer com que o php imprima apenas o nome do arquivo e use-o em um script bash sem coisas complicadas como as acima.
Necromancer