创建一个扩展名为.pdf的临时文件php tempnam

时间:2011-04-22 18:44:15

标签: php

使用tempname时是否可以创建.pdf文件扩展名?我需要发送一封包含使用tempname创建的文件的电子邮件。 (我可以发送文件,但我需要.pdf扩展名)

4 个答案:

答案 0 :(得分:5)

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

// now use the new filename as you wish
var_dump($tempname, is_file($tempname));

默认情况下,可以使用最严格的权限级别创建此类文件。通常,它们只能由当前用户读取。可能需要使这些文件具有组可读性:

chmod($original, 0640);

甚至是世界可读的,虽然这是不可取的:

chmod($original, 0644);

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

我使用这样的函数作为临时唯一名称:

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;
}