尽管php.ini中有10M设置,但无法上传大于2MB的图像

时间:2014-04-11 16:49:20

标签: php html file upload limit

我正在使用下一个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)中,为&#34; post_max_size&#34;定义了10M;和&#34; upload_max_filesize&#34;。

我也试过&#34; ini_set()&#34;,但没有改变。

当我尝试上传大于2MB的文件时,它会保持&#34;上传&#34;它不停。它永远不会完成,但似乎它尝试(浏览器的加载图标正在运行)。

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

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

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

提前谢谢。

3 个答案:

答案 0 :(得分:2)

  1. 您是否查看过phpinfo()读数以验证您对php.ini的更改是否实际上有效?
  2. 每次修改php.ini时都重新启动了网络服务器吗?
  3. 请参阅php.net上的这些文档
  4. 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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

这里有一些事情需要考虑。首先从ied3vil的建议开始,如果你还没有运行,请回到这里。

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

其次,PHP不是您的架构中唯一可以限制文件上载大小的组件。 Apache可以使用LimitRequestBody指令设置HTTP请求主体大小的限制,该指令也可以设置为允许在许多配置中进行递归覆盖...允许在<Directory /path/to/dir>指令内部覆盖,或者甚至允许将其设置在.htaccess文件中。

在查看ied3vil的回答后,您是否仍然无法检查的事项:

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