我正在尝试从表单上传doc文件并将其发送到电子邮件。我正在使用
$_FILES['file']['tmp_name'];
问题是,它返回一个随机生成的文件名。因此,当它到达收件箱时,文件名为phpvwRGKN.dat(文件名每次都是随机的)。
如何保留文件名和扩展名?
注意:我正在使用geekMail class
答案 0 :(得分:52)
$_FILES['file']['tmp_name'];
将包含服务器上文件的临时文件名。在您处理文件
$_FILES['file']['name'];
包含用户计算机上传文件的原始名称。
答案 1 :(得分:10)
$_FILES["file"]["name"] - the name of the uploaded file
答案 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