使用.pdf扩展名创建一个临时文件php tempnam

问题描述:

使用tempname时可以创建.pdf文件扩展名吗?我需要用一个使用tempname创建的文件发送电子邮件。 (我可以发送文件,但我需要.pdf扩展名)使用.pdf扩展名创建一个临时文件php tempnam

+1

这是否真的有意义吗?如果电子邮件不包含任何其他附件,为什么不将它命名为“attachment.pdf”或与电子邮件内容有关的意义? – 2011-04-22 18:47:31

+0

我想使用临时位置来存储文件(不在我的应用程序目录中)。如果你能想到另一种方式让我知道。 – 2011-04-22 22:07:50

+0

@Chris但是为什么临时文件需要扩展名为.PDF? – 2011-04-22 22:13:20

您可以在多部分邮件中的MIME标题中为文件名指定任何名称。

+1

您可以为不习惯它的读者添加Mime标头样本,也不需要谷歌了解它。 – 2014-04-15 15:20:43

不,这不适用于tempnam。您必须为此编写自己的函数,例如使用当前时间。这里的问题是避免竞争条件,但都不可能通过包括PID的文件名,这样可以解决:

do { 
    $filename = rand(); 
    $filename .= '.'. str_replace(' ', '.', microtime()); 
    $filename .= '.'. getmypid(); 
    $filename .= '.pdf'; 
} while(file_exists($filename)); 

如果目录不同机器之间共享的PID不能保证是唯一的。在这种情况下,还包括当前机器的主机名(由gethostname返回)。

我使用临时唯一名称这样的功能:

function tempnam_sfx ($path, $suffix) { 
if(!is_dir($path)){ 
    mkdir($path, 0777, true); 
}  

do { 
    $file = $path . DIRECTORY_SEPARATOR . mt_rand() . $suffix; 
} while (file_exists($file));    

return $file; 
} 

$tempname = tempnam('', 'report_'); 
rename($tempname, $tempname .= '.pdf'); 
var_dump($tempname, is_file($tempname));