需要帮助PHP上传图像和PDF文件类型

时间:2011-06-18 23:06:15

标签: php image pdf upload file-type

如何在php中设置表单限制,只允许使用jpgs和pdf进行上传?此外,当我将文件大小设置为800000时,我似乎有上传错误。以下是上传表单:

<form action="upload_files.php" method="post"
enctype="multipart/form-data">
<label for="img_preview">Preview Image:</label>
<input type="file" name="img_preview" id="img_preview" />
<br />
<label for="pdf_doc">Your PDF:</label>
<input type="file" name="pdf_doc" id="pdf_doc" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>

这是upload_files.php

<?php
if ((($_FILES["img_preview"]["type"] == "image/gif")
|| ($_FILES["img_preview"]["type"] == "image/jpeg")
|| ($_FILES["img_preview"]["type"] == "image/pjpeg"))
&& ($_FILES["img_preview"]["size"] < 80000))
{
if ($_FILES["img_preview"]["error"] > 0)
{
echo "Return Code: " . $_FILES["img_preview"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["img_preview"]["name"] . "<br />";
echo "Type: " . $_FILES["img_preview"]["type"] . "<br />";
echo "Size: " . ($_FILES["img_preview"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["img_preview"]["tmp_name"] . "<br />";
//check the file into its room
if (file_exists("upload/" . $_FILES["img_preview"]["name"]))
  {
  echo $_FILES["img_preview"]["name"] . " already exists. ";
  }
else
  {
  move_uploaded_file($_FILES["img_preview"]["tmp_name"],
  "upload/" . $_FILES["img_preview"]["name"]);
  echo "Stored in: " . "upload/" . $_FILES["img_preview"]["name"];
  }
  }
  }
 else
 {
 echo "Invalid file";
 }
 ?>  

这是img_preview文件的上传代码。我会为pdf_doc文件创建另一个文件,但是这个文件目前无法正常工作。

那么,如何将文件大小限制增加到8MB?而且,对于pdf上传,我想将文件类型限制为pdf,jpg或gif。所以,我尝试了这个参数:

if ((($_FILES["img_preview"]["type"] == "image/gif")
|| ($_FILES["img_preview"]["type"] == "image/jpeg")
|| ($_FILES["img_preview"]["type"] == "image/pjpeg"))
|| ($_FILES["img_preview"]["type"] == "application/pdf"))
&& ($_FILES["img_preview"]["size"] < 80000))

但又是错误。有什么问题?有更流畅的方法吗?

1 个答案:

答案 0 :(得分:0)

文件类型问题

由于浏览器报告的MIME类型(这是您在$_FILES中获得的)可能是欺骗性的,因此您不能依赖它。这为您提供了两个合理的选择:

  1. 按文件扩展名过滤
  2. 使用finfo_file
  3. 过滤

    不幸的是,{&lt; {1}}默认不包含在PHP&lt; 5.3,这样您就可以使用扩展检查(过去对我来说效果很好),或使用discontinued PECL package finfo

    最大上传大小问题

    许多 PHP设置会对此产生影响,您需要调整所有以使大型上传工作。幸运的是,一段时间以来,PHP文档的a page where everything related to file upload可能会导致问题。

相关问题