【问题标题】:Can't upload images larger than 2MB despite the 10M settings in php.ini尽管 php.ini 中设置了 10M,但无法上传大于 2MB 的图像
【发布时间】:2014-05-25 22:40:31
【问题描述】:

我正在使用下一个 PHP 代码在我的网站上上传图片:

<?php
if(isset($_POST['submit_form'])) {
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 1048576*10)
&& in_array($extension, $allowedExts))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
}
    ?>

只要我上传最大 2MB 的文件,它就可以正常工作。 我在脚本中定义的限制是 10MB (1048576*10)。

在我的 php.ini 文件 (BlueHost) 中,为“post_max_size”和“upload_max_filesize”定义了 10M。

我也尝试了“ini_set()”,但没有任何改变。

当我尝试上传大于 2MB 的文件时,它会不停地“上传”它。它永远不会完成,但似乎它会尝试(浏览器的加载图标正在工作)。

我尝试联系我的托管公司,他们说限制是 10MB 而不是 2。脚本来自 w3schools: http://www.w3schools.com/php/php_file_upload.asp

我不明白我做错了什么。我正在尝试解决这个问题一段时间,但我现在真的需要你的帮助。

  • phpinfo() 都显示为 10M,没有 2M。
  • 没有任何与文件大小限制相关的 .htaccess 文件。
  • PHP 版本 5.4.27

提前谢谢你。

【问题讨论】:

  • 您选择文件后发送表格了吗?
  • 您是否有任何 .htaccess 或 apache 配置覆盖将其设置为 2Mb? phpinfo() 说什么?你使用正确的 php.ini 吗?
  • 抱歉,是的,我忘记在此处包含该代码部分;刚刚将表单提交脚本添加到我的问题中。
  • 我浏览了在我的主机上可以找到的每个 .htaccess 文件,但我看不到任何与文件大小相关的可能会覆盖限制的内容。 phpinfo() 将所有内容显示为 10M,没有关于 2M。
  • 检查 $_FILES["file"]["size"] 的值是否符合您的预期

标签: php html file upload limit


【解决方案1】:
  1. 您是否查看过 phpinfo() 读数来验证您对 php.ini 所做的更改是否确实有效?
  2. 是否每次修改 php.ini 时都重新启动网络服务器?
  3. 请参阅 php.net 上的这些文档

http://www.php.net/manual/en/ini.core.php#ini.max-file-uploads

http://www.php.net/manual/en/faq.using.php#faq.using.shorthandbytes

【讨论】:

  • phpinfo() 在“本地值”和“主值”两列中将“post_max_size”和“upload_max_filesize”都显示为 10M。我将检查您在此处提到的其他建议。谢谢。
  • 当前,“max_file_uploads”设置为“20”。根据我在 phpinfo() 中看到的,一切看起来都很好。
【解决方案2】:

在某些情况下,php 中的文件上传限制大小也受到 memory_limit 设置的限制。也许将其提高到 16Mb 或更多会有所帮助?如果它还没有那么高..

【讨论】:

  • 根据 phpinfo(),“memory_limit”的当前值设置为“128M”。感谢您的想法!
【解决方案3】:

这里有几件事情需要考虑。先从 ied3vil 的建议开始,还没跑就回来。

我假设您使用的是 apache,因为它是 PHP 的常用配置。您需要确定 PHP 在什么模式下运行,并确保您正在编辑正确的 php.ini 文件。在任何给定的服务器上,甚至在任何给定的上下文根上,经常有 2 个或更多 php.ini 文件。如果 PHP 配置已设置为允许递归覆盖,则您可能在您的路径中的任何位置都有一个 php.ini 文件,以供服务或引导的文件。

其次,PHP 并不是架构中唯一可以限制文件上传大小的组件。 Apache 可以使用 LimitRequestBody 指令设置 HTTP 请求正文大小的限制,也可以将其设置为允许在许多配置中进行递归覆盖......在允许在 &lt;Directory /path/to/dir&gt; 指令内覆盖,甚至允许它在.htaccess 文件中设置。

在查看 ied3vil 的回答后检查您是否仍然无法工作:

  • 是正在编辑的相关主 php.ini 文件(apache php.ini 文件或 php5 配置 php.ini 文件。这将取决于您是否在 cgi 模式下运行 PHP
  • apache 是否有任何设置来指定允许的请求大小限制
  • 如果 apache 或 php 被配置为允许通过诸如 .htaccess、特定目录的 php.ini.conf 具有 vhost 定义的文件来覆盖配置,您将需要沿着文件上传的路径查找那些文件前面提到的设置。

【讨论】:

  • 正确的 php.ini 应该在 phpinfo() - 我没有建议 .htaccess 覆盖,好点!
猜你喜欢
  • 2015-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
相关资源
最近更新 更多