copy和move_uploaded_file之间的区别

时间:2012-02-04 09:10:20

标签: php

  

copy()和move_uploaded_file()

之间有什么区别

我认为这两个函数执行相同的操作然后会有什么区别?

copy ( $_FILES['file']['tmp_name'], 
     "C:/Apache/htdocs/" . $_FILES['file']['name'] ) 


move_uploaded_file($_FILES['file']['tmp_name'], 
     "C:/Apache/htdocs/" . $_FILES['file']['name'])

3 个答案:

答案 0 :(得分:13)

  

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

     

如果有任何机会,这种检查尤其重要   任何完成上传文件的内容都可以将其内容透露给   用户,甚至是同一系统上的其他用户。

http://php.net/manual/en/function.move-uploaded-file.php

  

如果filename不是有效的上传文件,则不会执行任何操作,并且   move_uploaded_file()将返回FALSE。

答案 1 :(得分:3)

复制会将文件来源复制到目的地,而移动会移动它。

复制文件时,复制是指不清除临时缓冲区(源)。

当您移动文件时,它会从原始位置删除,意味着在临时缓冲区中(来源:$ _FILES)并将文件移动到目的地。

答案 2 :(得分:0)

为补充@Muhammad Hasan Khan的答案。

根据此评论https://www.php.net/manual/en/function.is-uploaded-file.php#113766,与 is_uploaded_file 相比, move_uploaded_file 带来的安全性更高,因此,以下两个摘要在安全性方面严格相同:

$tmp = $_FILES['file']['tmp_name'];
if(false === is_uploaded_file($tmp)){
    return false;
}
copy($tmp, $dst);
$tmp = $_FILES['file']['tmp_name'];
move_uploaded_file($tmp, $dst);