找到正确的php.ini文件

我目前正在尝试找到正确的php.ini文件进行编辑,并重新启动apache以使更改生效,但我却束手无策。
我找到了三个不同的php.ini文件(不知道为什么会有三个),以下是我找到这些文件的方法。
$ sudo find / -name php.ini
/etc/php5/cli/php.ini
/etc/php5/apache2/php.ini
/etc/php5/cgi/php.ini

我也做了...
$ sudo php -i | grep 'Configuration File'
Configuration File (php.ini) Path => /etc/php5/cli
Loaded Configuration File => /etc/php5/cli/php.ini

我把它们全部改成了我想要的设置(只是为了确保)。
我使用以下命令重新启动了Apache。
sudo service apache2 restart

结果...
* Restarting web server apache2

我重新加载了页面,显示 php.ini 文件未更新。
我知道这是因为我使用了。
echo ini_get('post_max_size');

原本应该更改为20M,但仍然只有2M。

我尝试重新启动电脑,以为这样可以停止Apache服务器并重新加载带有正确设置的php.ini文件,但可惜这次尝试也失败了。

有没有可能存在另一个可能干扰的php.ini文件呢?


7'正确的'文件在apache2子目录中。 - Joren
3使用updatedb; locate php.ini代替find命令。 - sjas
@Michael 在Ubuntu 16.04 LTS Xenial Xerus中,文件位于/etc/php/5.6/apache2/php.ini,其中5.6/是安装的php版本。首先将文件复制到php.original.ini,然后使用sudo gedit /etc/php/5.6/apache2/php.ini打开进行编辑。 - Hedley Finger
7个回答

你那里有三个文件,每个文件都用于不同的目的。
`/etc/php/5.6/cli/php.ini` 是用于CLI PHP程序的,你可以在终端上运行 `php` 命令找到它。
`/etc/php/5.6/cgi/php.ini` 是用于php-cgi系统的,但在这个设置中并没有特别使用。
`/etc/php/5.6/apache2/php.ini` 是用于Apache使用的PHP插件。如果你想要对Apache设置进行更改,并且使用了内置的PHP模块来处理,这是你需要编辑的文件
`/etc/php/5.6/fpm/php.ini` 是用于 `php5-fpm` 处理器的,它是一个与FastCGI兼容的'包装器',用于PHP处理(例如从NGINX传递给 `php5-fpm`),并作为系统上的独立进程运行(不像Apache的PHP插件)。
对于低于16.04版本的Ubuntu,/etc/php/5.6//etc/php/7.0//etc/php/7.1/等路径被/etc/php5/等路径所取代。否则,这些路径保持不变。请根据您的环境相应地进行调整,将5.6或数字替换为实际存在于您的环境中的版本文件夹。

2php.ini在/etc/php5/apache2目录中找不到,但是它在cli目录中是可用的。 - Anuj TBE
2@anujsharma9196 如果您没有使用Apache内置的PHP插件,那么唯一可能的原因就是这样了。至今为止,文件路径仍然按照此处列出的方式工作(在我的15.04虚拟机上确认过)。 - Thomas Ward
1如果您安装了多个版本的PHP,请使用ll /etc/apache2/mods-enabled/php*命令检查当前正在使用的版本,这将为您提供有关版本的提示。 - Matthieu
是的,但是重启PHP的命令不仅仅是sudo service apache2 restart... - NoBugs
这是一个不同的问题,@NoBugs。这取决于PHP的安装方式(Apache插件、FPM或CGI安装的PHP组件都使用不同的重启调用)。 - Thomas Ward
非常感谢 @ThomasWard - 在使用 php -i | grep 'php.ini' 搜索 php.i 文件后,我一直在编辑 CLI。 - Zaheer Baloch

要找到CLI正在使用的php.ini文件,您可以运行以下命令:
php -i | grep 'php.ini'

示例输出:

$ php -i | grep 'php.ini'

Configuration File (php.ini) Path => /etc/php/7.0/cli
Loaded Configuration File => /etc/php/7.0/cli/php.ini

1这应该是被接受的答案! - Marcelo Ágil
4这个很好,但只会提供给cli加载的php配置。要获取apache加载的配置,需要在网页上执行phpinfo()函数。 - Dipu Raj
php -i命令有什么用途?grep命令又有什么用途?能否在解释中加入相关内容,那就太好了。 - Mayank Dudakiya

尝试在浏览器中运行包含此代码片段的脚本 <?php phpinfo(); ?>,然后尝试搜索类似Loaded Configuration File的内容。这个条目指定了您的Apache服务器中PHP使用的php.ini文件。

适用于PHP7的Ubuntu 16.4

/etc/php/7.0/apache2/php.ini

2我找不到那个文件。是哪个软件包提供那个文件的? - galmok
适用于Ubuntu 16.04上的PHP7。 - Softmixt

你可以在终端上运行这个命令来找到正在使用的文件。
php --ini

只需使用<?= phpinfo() ?>并读取:

已加载的配置文件


我正在使用Amazon Lightsail上的LAMP堆栈,并且我的Ubuntu服务器上正确的php.ini文件位置是:
/opt/bitnami/php/etc/php.ini