PHP文件上载中的文件无效

时间:2011-08-27 16:24:20

标签: php file-upload

我已经为图像文件构建了一个带有HTML表单/ PHP上传的网站,当它在我的本地计算机上运行XAMPP时运行良好,但是当我将它上传到000webhost时,大多数情况下它表示无效文件和有时只会成功上传图片。我已经尝试在php配置中调高最大执行时间,但似乎没有修复它。我试图上传的文件小于php配置中的最大文件大小,并完美地在我的测试机上工作。

我觉得奇怪的是,它有时会起作用,而不是其他时间,并且不知道该尝试什么。

编辑:

这是表格          文件名:          

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/png")))
   {
       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 />";


          move_uploaded_file($_FILES["file"]["tmp_name"],
          "churchimages/pauls.jpeg");
          echo "Stored in: " . "churchimages/pauls.jpeg";

          }
  }

 else

 {
 echo "Invalid file";//This is the section I am seeing
 }

5 个答案:

答案 0 :(得分:3)

您的文件类型检测依赖于$_FILES["file"]["type"],这是由浏览器发送的,并且非常不可靠。

检测上传文件是否为图片的更好方法是getimagesize()

$info = getimagesize($_FILES["file"]["tmp_name"]);

$allowed_types = array(IMG_GIF, IMG_JPEG, IMG_PNG);

if (in_array($info[2], $allowed_types))
 { .... do stuff ... }

答案 1 :(得分:2)

在执行任何其他操作之前,您应该检查上传是否实际上成功:

if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
    ... handle upload...
    if (!move_uploaded_file(...)) { // <--important. ALWAYS check if the move worked.
       die("File move failed. Data is lost");
    }
} else {
   die("Upload failed with code " . $_FILES['file']['error']);
}

如果没有上传,那么['type']字段就不会被设置,只是说“无效文件”就没用了 - 根本就没有文件。

正如Pekka指出的那样,你应该使用其他方法来确定文件类型。 $ _FILES中的['type']数据是用户提供的,并且很容易伪造。

答案 2 :(得分:0)

确保您为上传的文件而不是相对文件定义绝对路径。

答案 3 :(得分:0)

我今天遇到过这个问题......很伤心。花了大约一个小时来修理。

想法:检查脚本顶部的$ _FILES [“file”] [“type”] ==“image / gif”是对我失败的。浏览器似乎填充了“BLANK DATA”而不是“image / gif”,因此每次使用“无效文件类型”时我的初始检查失败

问题:浏览器似乎没有正确地从tmp目录发送文件类型?

我的FIX:删除文件类型检查....如上所述,这是非常不可靠的......

答案 4 :(得分:0)

检查PHP文件权限。在ooowebhost中,您可以在chmod中找到它。改为'777'。否则,该文件没有执行/写入的权限