我在哪里可以找到php.ini文件?

1074
今天我需要安装IBM DB2库。我按照所有步骤进行,直到执行make install命令,然后我在$PHP_HOME/lib/extensions/somecomplicatedname/ibm_db2.so目录下找到了ibm_db2.so文件。
问题是最后一步是配置php.ini文件,但是我的系统上没有任何php.ini文件。PHP工作正常,除了这个新潮的ibm_db2东西。我尝试了一个小的PHP脚本,它失败了,并指示ibm_db2函数不可用。
我该如何找到或设置php.ini文件,以便我可以启用所需的库?

139
90%的时间是在/etc/php5/apache2/php.ini文件中。 - Adam
另请参见https://dev59.com/THE85IYBdhLWcg3wgDlI - Pacerier
12
问题的前提是错误的。“我的系统上没有php.ini文件”不对,你只是没有找到它。说到这里,“locate php.ini”命令可以在短时间内告诉你该文件在系统中的位置。 - Lightness Races in Orbit
3
除非这不是 PHP5 ;) - Line
2
@line 是的,我的评论已经不太相关了,尽管我没有意识到有这么多赞! - Adam
显示剩余2条评论
14个回答

1065

在命令行中执行:

php --ini

你将会得到类似下面这样的内容:

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

这是从我的本地开发机器上获取的。不过,第二行才是重点。如果没有提到任何内容,请查看第一行。那就是PHP寻找php.ini文件的路径。

你可以使用一个脚本中的phpinfo()命令来搜索相同的信息,并通过浏览器调用它。它在输出的第一个块中提到。php -i也可以在命令行中执行相同的操作,但使用起来非常不方便。


5
接受最古老和先前最简单的答案(SO网站强制我等一会儿才能接受)。感谢提供的详细说明,这可能会帮助下一个寻找信息的人。对于我来说,第二行是“(无)”,在第一行路径中放置php.ini文件后一切正常。谢谢! - necromancer
20
我使用了这个命令,并编辑了它指向的php.ini文件,但我的PHP设置没有改变。后来我发现它并没有给我正确的php.ini文件。我尝试使用phpinfo() PHP函数,并找到了实际需要编辑的正确php.ini文件位置。我认为这非常重要,希望能对某些人有所帮助。 - thecommonthread
5
这与不同的PHP安装无关,但是不同的SAPI可以使用不同的ini文件。我不使用Apache模块,但据我所记,似乎没有绕过 phpinfo.php 文件的方法。对于FPM,你至少可以使用 php5-fpm -i | grep '\.ini'。通常你会使用两到三次,最终你就知道文件在哪里了 ;) - KingCrunch
在某些lamp堆栈上,这将仅返回php-cli php-ini。 - CodeBrauer
2
最后我编辑了错误的ini文件,浪费了一个小时。这可能是我的愚蠢,但这是对像我这样的人的警告-如果不起作用,请创建上面的<?php phpinfo(); ?>,因为这对我有用。 - Chris Beeley
显示剩余4条评论

544

找到它最好的方法是:

创建一个 PHP (.php) 文件并添加以下代码:

<?php phpinfo(); ?>

在浏览器中打开它。它将显示实际正在读取的文件!

由OP更新:

  1. 先前接受的answer可能更快,更方便,但并不总是正确的。请参见该答案的评论。
  2. 还请注意更方便的替代方法<?php echo php_ini_loaded_file(); ?>,在this answer中提到。

12
这应该是被接受的答案。如果您已经安装了CLI并运行了Apache,则可能会有自己的ini文件(就像我的系统一样)。使用这个被接受的答案会返回CLI正在使用的内容,而不是Apache的内容。 - Dan
2
@Dan 是的,你说得对。我正在将接受的答案更改为这个,因为你提到的问题在实践中也被某人遇到了(他评论了先前接受的答案)。 (顺便说一下,如果你在问题上发表评论,我会更快地解决这个问题。) - necromancer
2
这在我的安装上不起作用。打错字了吗?应该是 <?php phpinfo(); ?> - svenyonson
10
php -r \@phpinfo\(\)\; 对我有效。php -r \@phpinfo\(\)\; | grep 'PHP Version' -m 1 可以提取特定信息。 - jgraup
@zylstra 试试:<?php echo php_ini_loaded_file(); ?> - Ates Goral
显示剩余3条评论

167
这适用于我:

This works for me:

php -i | grep 'php.ini'

你应该看到类似下面的内容:

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

P.S.

要仅获取php.ini路径,请使用:

php -i | grep /.+/php.ini -oE

7
只有存在 php.ini 文件才能让这个方法起作用,这也正是问题所在:如果不存在该文件,你仍然不知道该去哪里寻找或放置一个新的文件。 - KingCrunch
我从未遇到过没有php.ini文件的情况。 - rockstardev
执行这个命令会返回 Configuration File (php.ini) Path => /usr/lib,但是运行 <?php phpinfo(); ?> 返回的是 Loaded Configuration File: /etc/php.ini。因此,在我的情况下,phpinfo() 更加可靠。 - Leo Galleguillos
4
这不完全正确。每个使用PHP语言的框架都有自己的php.ini文件。如果你从命令行调用那行代码,你很可能会收到类似于/var/php5/cli/php.ini的结果,但这并不是在Web环境下运行PHP时所使用的文件。对于那个文件,你应该查找apache2文件夹。 - Andrea Moro
能否从Apache获取输出php -i | grep 'php.ini'?(script.php) - Stackoverflow

72
在命令窗口中,输入
php --ini

它会显示类似以下路径:

Configuration File (php.ini) Path: /usr/local/lib
Loaded Configuration File:         /usr/local/lib/php.ini
如果以上命令不起作用,则使用此命令:
echo phpinfo();

1
这么多愚蠢的答案,谢谢你! - raveren

41

在Linux上使用以下命令查找php.ini文件路径。

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

或者尝试另一种方法:

php --ini

它显示路径结果。


13
这种方法不如"php -i | grep 'php.ini'"这样的方法好,因为它会找到所有的php.ini文件,而且不会告诉你哪个是你的PHP安装程序所使用的。另外,当locate数据库没有更新时,可能会给出错误的结果。 - lxg
在Ubuntu MATE 20.04(Focal Fossa)中,默认情况下未安装locate - Peter Mortensen

35

这个命令应该能帮助你找到它

php -r "phpinfo();" | grep php.ini

1
我更喜欢这个答案,因为它不需要我创建、定位一个包含 PHP 内容的文件并在浏览器中加载页面。 - Andrew Allbright

31

PHP提供了两个本地函数来显示加载的配置文件:

根据您的设置,ApacheCLI可能使用不同的.ini文件。以下是两种解决方案:

Apache:

只需在一个 PHP (.php) 文件中添加以下内容,并在浏览器中打开即可:

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

命令行界面:

在你的终端中复制并粘贴以下命令:

php -r 'print php_ini_loaded_file(); print_r(php_ini_scanned_files());'

1
被低估的、彻底的和(几乎)正确的答案。我差点把它改成正确的答案,但我担心 php_ini_loaded_file 可能并不总是可用。 - necromancer
@zylstra,你的PHP版本是多少?php_ini_loaded_file文档中说需要PHP版本>=5.2.4。 - necromancer
@necromancer 现在不确定。忘记我正在检查哪个系统了。:/ - zylstra

27
phpinfo();

会告诉你它的位置,或者从命令行

php -i

21

在命令行中运行此命令:

php -r "echo php_ini_loaded_file().PHP_EOL;"

21

尝试以下解决方案

  1. 在你的终端里,输入 find / -name "php.ini"

  2. 在终端中输入 php -i | grep php.ini。它应该显示文件路径为 "Configuration File (php.ini) Path => /etc"

  3. 如果你可以访问其中一个 PHP 文件,请在编辑器(记事本)中打开它,并在新行上的 <?php 后插入 phpinfo();。这将告诉你 php.ini 的位置。

  4. 你也可以在交互模式下与 PHP 进行对话。只需在终端中输入 php -a,并在 PHP 解释器启动后键入 phpinfo();


1
1、2和4点存在多个安装问题的漏洞;已经有很好的答案了,不需要在这里添加没有任何意义的答案。 - necromancer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接