Ubuntu php.ini中upload_max_filesize的更改不会生效。

30

我已经尝试了两天,想将通过php上传的文件的最大文件大小从默认的2M增加到10M。我更改了被phpinfo引用的php.ini文件,但无济于事。

我看到了一些文章说php.ini文件的第109行左右有语法错误,但我不知道这个语法错误是什么,也不知道如何纠正它。用户表示,由于upload_max_filesize在此错误之后,因此在配置文件中被忽略。请帮忙解决。


你在编辑php.ini文件后,是否重启了Apache(或者你使用的其他Web服务器)? - gen_Eric
6
重启Apache,卢克。 - zerkms
1
你看到一篇文章说你的php.ini文件中有语法错误?这是多大的几率啊? :) - glomad
“to no avail” 究竟是什么意思?在 phpinfo 中值是否已更改?如果是,它是否(没有)产生影响?如果有,是什么类型的影响? - eis
你是在指这篇“文章”吗?http://serverfault.com/questions/450460/php-ini-error-on-error-reporting - gen_Eric
显示剩余4条评论
10个回答

87

这条消息 对我有帮助:

服务器上安装的最新php版本不允许更改全局设置(例如执行时间,最大上传文件大小,最大发布文件大小等)。

按照以下步骤解决问题:

  1. 运行 phpinfo();
  2. phpinfo() 输出中查找“Scan this dir for additional .ini files”文本
  3. 它将类似于此:/etc/php5/apache2/conf.d
  4. 在该目录下创建您的user.ini文件。(/etc/php5/apache2/conf.d/user.ini
  5. 使用此ini文件进行自定义设置。
  6. 重新启动服务器

文件 /etc/php5/apache2/conf.d/user.ini

post_max_size = 90M
upload_max_filesize = 50M

更新 2018.06

如果您正在使用 nginx + php-fpm,则您的路径类似于这样:(在路径中使用您的 PHP 版本)。使用以下命令创建文件:

nano /etc/php/7.0/fpm/conf.d/user.ini

conf.d 目录中存在许多其他的 .ini 文件。如果您希望您的配置文件是最后被包含的,请使用前缀。

例如:30-user.ini

创建文件后不要忘记重新启动 fpm

sudo service php7.0-fpm restart

1
谢谢您的更新。这就是我所需要的。我只是在重新启动Apache时也在使用php-fpm,因此我还需要重启该服务。 - marcogmonteiro
1
2018年的更新正是我所需要的。非常感谢! - Genko
1
很奇怪,我已经重新启动了机器但是没有用,但是sudo service php7.0-fpm restart解决了问题。 - coder618
1
有人能否给这个答案打个勾,整整一天我都在搜索。上帝保佑你,兄弟。 - Amir Ur Rehman
使用ps -A | grep php命令来查找php*-fpm的名称,在我的情况下,该名称中没有数字。 - undefined
显示剩余7条评论

18
如果您的php.ini位于类似于/etc/php/7.*/fpm/php.ini这样的位置-则根据需要进行修改,并使用service php7.1-fpm restart代替sudo service apache2 restart

6

请问您是否重启了apache2?

sudo service apache2 restart

只有当apache开启时,新的php.ini配置才会生效。


似乎我对php.ini文件所做的任何更改都没有生效。现在我知道你会想...我正在编辑错误的php.ini文件...我已经三重检查过,我正在编辑通过phpinfo显示的php.ini文件。 - Steven Benavides
这是我提到的有关php.ini错误的文章:https://dev59.com/smgu5IYBdhLWcg3wASWO - Steven Benavides
我看了一下这篇文章。可能只是他自己的用户错误。我个人从未遇到过默认安装后出现问题的情况。我已经使用Ubuntu上的Apache有好几年了。如果您愿意,可以将您的php.ini压缩成zip文件或以其他方式提供给我们查看。 - Spencer Cameron-Morin
找到了...这是php.ini文件中的一个错误...将开发值行注释掉:E_ALL | E_STRICT。 - Steven Benavides
哼,这是怎么被取消注释的?O.O - Spencer Cameron-Morin

3

我遇到了完全相同的问题,并使用以下步骤解决了它:

在我的服务器上运行以下命令时

php --ini

我获得了我的php.ini文件的以下路径

Loaded Configuration File:         /etc/php/7.0/cli/php.ini

我不断对php.ini文件进行更改,但是没有任何更改生效。然后我在我的/var/www/html目录中创建了一个名为info.php的文件,并添加了以下代码。
<?php
    phpinfo();
?>

然后我在浏览器中打开了该文件 http://example.com/info.php,发现实际加载的php.ini文件位于不同的目录中。

Loaded Configuration File   /etc/php/7.0/apache2/php.ini

我在这个目录下修改php.ini文件后,所有更改都生效了。简而言之,请确保运行phpinfo();函数以确定php使用的实际php.ini文件。


3

您可能还需要增加文章的最大大小:

post_max_size=10M

尝试一下吧。


然后重新启动Apache。 :D - Spencer Cameron-Morin
尝试了所有的方法...多次重启Apache...重新启动服务器...增加post_max_size... - Steven Benavides

1
我有一个非常奇怪的经历,导致了与这个相同的症状。
关键是我的php.ini文件包含了一种旧式注释(以井号开头),在php 7.0中不再是注释。不正确的注释混淆了ini解析器。
解决方法是将所有#注释符号替换为分号(;),这是编写注释的唯一标准方式。
更多详情,请阅读我的评论:

https://serverfault.com/a/1012262/494670


谢谢!我刚刚遇到了一个类似的问题,从php7.2升级到7.3时,我的哈希(#)注释看起来很正常,但在7.3中不行了。将它们全部替换为分号(;)就解决了问题。 - beltouche

1
也许你会找到两个php.ini文件的目录。 如果你使用cli搜索php.ini的位置,比如php --ini,它可能会显示/etc/php/7.1/cli/php.ini,但是还有另一个文件夹/etc/php/7.1/fpm/php.ini用于php-fpm,你需要在conf.d文件夹下创建你的新ini文件,例如/etc/php/7.1/fpm/conf.d/30-user.ini,如果你需要一个适用于cli命令行的ini文件,你需要将你的ini文件放在/etc/php/7.1/cli/conf.d/30-user.ini下。

1
即使看起来没有失败,service apache2 reload仍需要以root身份运行。 运行sudo service apache2 reload即可。这适用于Ubuntu 14.04。

1
Ubuntu php.ini的更改不会生效。
在Ubuntu 18.04和Nginx 1.18.0中解决此问题的步骤如下:
  1. 检查正在运行的php版本:php -v
  2. 检查php.ini中的语法错误:sudo php-fpm7.4 -t(更改为您正在运行的版本)。
  3. 使用您喜欢的编辑器修复语法错误。
  4. 重新启动php-fpm:sudo systemctl restart php7.4-fpm(更改为您正在运行的版本)。
我的结果: PHP:/etc/php/7.4/fpm/php.ini上第2行出现语法错误,意外的END_OF_LINE,期望'='。
在我的情况下,在[PHP]之前有一个"w",这可能是我在使用nano进行搜索时发生的。

1

阅读了伟大的@Jekis的回答后,我解决了Fedora发行版的相同问题(这是相同的东西,只是路径不同):

  1. 在评估phpinfo();输出后,我发现其他.ini文件存储在:/etc/php.d目录中

  2. /etc/php.d中,我创建了一个新文件 - 40-user.ini。我添加了upload_max_filesize和其他我想要更改的设置

  3. 然后我重新启动了apache(httpd)

然后更改被接受。


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