move_uploaded_file是如何工作的?

时间:2016-07-13 05:30:42

标签: php

我正在学习在php上传文件。为此,我提到了一些链接。 他们在上传代码中说我们必须使用:

move_uploaded_file(upload_file_name, 'path to move')

用于将文件移动到所需目录的功能。

但是在move_uploaded_file函数中,它们将临时名称作为第一个参数传递。

为什么他们使用临时名称作为第一个参数?他们为什么不用原名?

move_uploaded_file($_FILES['photo']['tmp_name'], 'uploads/'.$new_file_name);

为什么我们必须使用这个temp_name?有什么理由吗?

2 个答案:

答案 0 :(得分:1)

上传文件时,该文件将保存在服务器的临时文件目录中,文件名为 / tmp / somefilename

使用move_uploaded_file,您可以将该文件移动到您喜欢/允许的任何目的地。

原始文件名就像用户s computer is stored in $ _ FILES [' userfile'] [' name']`。

答案 1 :(得分:0)

我将尝试解释php文件上传,因为我理解这个过程。

当你在php上传文件时(使用POST请求),php应该用文件数据填充 $ _ FILES 全局变量。要获取文件数据(此类大小,类型等),此文件应在文件系统中可用。 因此,使用 php.ini php中的 upload_tmp_dir 指令将此文件保存到临时文件夹,然后填写 $ _ FILES 全局变量。

之后,您可以使用php为您提供的数据来处理此文件。

php还有一些用于请求数据验证的配置指令,例如: upload_max_filesize post_max_size 。所以你可以设置全局验证配置,php为你做验证。

  

为什么他们使用临时名称作为第一个参数?

因为此函数仅处理来自http请求的文件。

如果您尝试将当前http请求中不存在的任何文件设置为此函数的第一个参数,您将获得false作为结果。

如果您对更多细节感兴趣,可以阅读php source(此功能处理发布请求,因为我理解)。

  

为什么不使用原始名称?

当前http请求上传的文件在filesytem中不存在原始名称(我认为它是出于安全原因而实现的,可能是为了避免与相同文件名冲突)。这就是为什么你不能使用这个原始名称。

<强> P.S。 伙计们,如果我错了,请纠正我(对我们所有人来说,了解更多关于php内部流程的信息会很有用)