move_uploaded_file和is_uploaded_file之间的区别

时间:2011-08-13 07:01:40

标签: php

使用

从php表单上传文件时
<input name="xxx" type="file">

是否有必要使用php函数 is_uploaded_file 来检查它是否是通过PHP的HTTP POST上传机制上传的?

我已阅读所有关于该功能的内容,但我看不到它的用途?我错了吗?

在php文档中说

  

如果文件名命名的文件是通过HTTP POST上传的,则返回TRUE。这有助于确保恶意用户没有尝试欺骗脚本处理不应该工作的文件

但是,上传文件 move_uploaded_file 的主要功能还会检查它是否是有效文件

  

此函数检查以确保filename指定的文件是有效的上载文件(意味着它是通过PHP的HTTP POST上载机制上传的)。如果文件有效,它将被移动到目的地给出的文件名。

所以,我的问题如下:

是否真的有必要使用 is_upload_file ,如果 move_uploaded_file 已经检查过恶意内容了吗?

// if artwork file upload correctly, continue!
if ($_FILES['artwork']['error'][0] == 0) {

    // check if the artwork file was uploaded via HTTP POST to prevent a malicious attack
    if (is_uploaded_file($_FILES['artwork']['tmp_name'][0])) {

       // move files
    }
}

2 个答案:

答案 0 :(得分:5)

move_uploaded_file将返回不明确的false,这意味着您不知道移动是否成功,或者文件是否有效。

对于Web应用程序,用户不会知道出了什么问题(开发人员也不知道)。因此,我建议首先检查文件的有效性,并在尝试移动文件之前记录/输出相应的错误消息。

答案 1 :(得分:1)

使用 move_uploaded_file 时,您不必使用 is_uploaded_file

只有当您想直接访问上传的临时文件(不移动它)时才需要

is_uploaded_file