2010-10-15 160 views
22

我想从表单上传一个doc文件并发送给电子邮件。我正在使用

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

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

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

注:我使用geekMail class

+20

dude print_r($ _ FILES); – rook 2010-10-15 19:22:49

回答

10

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

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

+0

如果我使用$ _FILES [“file”] [“name”]并将它分配给一个变量,比如说$ attachment,它将不起作用,因为它只返回一个文件名。我想我需要给路径和路径只能来自tmp_name。 如果我错了,请纠正我。 – Jaspero 2010-10-15 19:21:27

+2

大多数邮件库都有两个用于附件的文件名。一个是服务器上文件的名称/位置,另一个是您希望用户看到它的名称。在你的情况下,名称/位置是'tmp_name',并且最终用户文件名是'name'。 – 2010-10-15 19:26:48

+1

从你的问题我明白,你想通过使用名称而不是tmp_name将文件存储在服务器上。要做的事情是使用http:// php。net/manual/en/function.move-uploaded-file.php'move_uploaded_file()'并将'tmp_file'移动到名称为'name'的文件名。 – 2010-10-15 19:27:18

47

$_FILES['file']['tmp_name'];将包含服务器上的文件的临时文件名。这只是您服务器上的占位符,直到您处理文件

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

+0

$ geekMail-> attach('/ home/willem/file2.zip')应该是使用库的格式。 所以我不得不使用 $ attachment = $ _FILES ['file'] ['tmp_name']; $ geekMail-> attach($ attachment); 有没有一种方法可以传递['name']以及路径? – Jaspero 2010-10-15 19:24:37

+0

如果使用tmp_name的src创建img,会发生什么情况? – Marcel 2014-07-17 13:47:51

+2

谢谢你解释!无法在网络上的任何位置找到该信息 – JMS 2014-11-14 19:24:53

0

只是一个建议,但你可以试试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); 
1

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

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

4

$_FILES["file"]["tmp_name"]包含文件内容的服务器上的实际副本,同时
$_FILES["file"]["name"]包含你从CLIEN上传的文件名t电脑。