PHP $ _FILES ['file'] ['tmp_name']:如何保留文件名和扩展名?

时间:2010-10-15 19:12:58

标签: php

我正在尝试从表单上传doc文件并将其发送到电子邮件。我正在使用

$_FILES['file']['tmp_name'];

问题是,它返回一个随机生成的文件名。因此,当它到达收件箱时,文件名为phpvwRGKN.dat(文件名每次都是随机的)。

如何保留文件名和扩展名?

注意:我正在使用geekMail class

6 个答案:

答案 0 :(得分:52)

$_FILES['file']['tmp_name'];将包含服务器上文件的临时文件名。在您处理文件

之前,这只是服务器上的占位符

$_FILES['file']['name'];包含用户计算机上传文件的原始名称。

答案 1 :(得分:10)

$_FILES["file"]["name"] - the name of the uploaded file

来自http://www.w3schools.com/php/php_file_upload.asp

答案 2 :(得分:5)

$_FILES["file"]["tmp_name"]包含服务器上文件内容的实际副本 $_FILES["file"]["name"]包含您从客户端计算机上传的文件的名称。

答案 3 :(得分:1)

只是一个建议,但您可以尝试使用Pear Mail_Mime类。

http://pear.php.net/package/Mail_Mime/docs

否则你可以使用一些代码。使用rename()的Gabi Purcaru方法不会按照它的编写方式工作。请参阅此帖http://us3.php.net/manual/en/function.rename.php#97347。你需要这样的东西:

$dir = dirname($_FILES["file"]["tmp_name"]);
$destination = $dir . DIRECTORY_SEPARATOR . $_FILES["file"]["name"];
rename($_FILES["file"]["tmp_name"], $destination);
$geekMail->attach($destination);

答案 4 :(得分:1)

与上面提到的@Gabi Purcaru一样,重命名和移动文件的正确方法是使用move_uploaded_file()。它执行一些安全检查以防止安全漏洞和其他漏洞。如果要使用它或从中派生的扩展,您需要清理$_FILES['file']['name']的值。使用pathinfo ($_FILES['file']['name'], PATHINFO_EXTENSION)安全地获取扩展程序。

答案 5 :(得分:1)

如果您想获取上传的文件名,请使用$_FILES["file"]["name"]

但是如果你想阅读上传的文件,你应该使用$_FILES["file"]["tmp_name"],因为tmp_name是你上传文件的临时副本,它比使用

更容易

$_FILES["file"]["name"] // This name includes a file path, which makes file read process more complex