我想从表单上传一个doc文件并发送给电子邮件。我正在使用
$_FILES['file']['tmp_name'];
问题是,它返回一个随机生成的文件名。所以,当它到达收件箱时,文件名是phpvwRGKN.dat(文件名每次都是随机的)。
如何保存文件名和扩展名?
注:我使用geekMail class
我想从表单上传一个doc文件并发送给电子邮件。我正在使用
$_FILES['file']['tmp_name'];
问题是,它返回一个随机生成的文件名。所以,当它到达收件箱时,文件名是phpvwRGKN.dat(文件名每次都是随机的)。
如何保存文件名和扩展名?
注:我使用geekMail class
$_FILES["file"]["name"] - the name of the uploaded file
如果我使用$ _FILES [“file”] [“name”]并将它分配给一个变量,比如说$ attachment,它将不起作用,因为它只返回一个文件名。我想我需要给路径和路径只能来自tmp_name。 如果我错了,请纠正我。 – Jaspero 2010-10-15 19:21:27
大多数邮件库都有两个用于附件的文件名。一个是服务器上文件的名称/位置,另一个是您希望用户看到它的名称。在你的情况下,名称/位置是'tmp_name',并且最终用户文件名是'name'。 – 2010-10-15 19:26:48
从你的问题我明白,你想通过使用名称而不是tmp_name将文件存储在服务器上。要做的事情是使用http:// php。net/manual/en/function.move-uploaded-file.php'move_uploaded_file()'并将'tmp_file'移动到名称为'name'的文件名。 – 2010-10-15 19:27:18
$_FILES['file']['tmp_name'];
将包含服务器上的文件的临时文件名。这只是您服务器上的占位符,直到您处理文件
$_FILES['file']['name'];
包含用户计算机上传文件的原始名称。
$ geekMail-> attach('/ home/willem/file2.zip')应该是使用库的格式。 所以我不得不使用 $ attachment = $ _FILES ['file'] ['tmp_name']; $ geekMail-> attach($ attachment); 有没有一种方法可以传递['name']以及路径? – Jaspero 2010-10-15 19:24:37
如果使用tmp_name的src创建img,会发生什么情况? – Marcel 2014-07-17 13:47:51
谢谢你解释!无法在网络上的任何位置找到该信息 – JMS 2014-11-14 19:24:53
只是一个建议,但你可以试试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);
像@Gabi Purcaru上面提到,重命名和移动文件是使用move_uploaded_file()
的正确方法。它执行一些安全检查以防止安全漏洞和其他漏洞。如果要使用它或从中派生的扩展名,则需要清理$_FILES['file']['name']
的值。使用pathinfo
($_FILES['file']['name'], PATHINFO_EXTENSION)
可以安全地获取扩展名。
如果你想获得上传的文件名,使用$_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
$_FILES["file"]["tmp_name"]
包含文件内容的服务器上的实际副本,同时
$_FILES["file"]["name"]
包含你从CLIEN上传的文件名t电脑。
dude print_r($ _ FILES); – rook 2010-10-15 19:22:49