我正在学习在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?有什么理由吗?
答案 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内部流程的信息会很有用)