使用tempname时是否可以创建.pdf文件扩展名?我需要发送一封包含使用tempname创建的文件的电子邮件。 (我可以发送文件,但我需要.pdf扩展名)
答案 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;
}