一尘不染

PHP中的唯一和临时文件名?

php

我需要将一些文件转换为PDF,然后将它们附加到电子邮件中。我将Pear Mail用于其电子邮件方面,这很好(大多数情况下-
仍在解决一些问题),但是作为此过程的一部分,我需要创建临时文件。现在我可以使用tempnam()函数,但听起来好像它在文件系统上创建了一个文件,这不是我想要的。

我只想要临时文件系统中的名称(使用sys_get_temp_dir()),该名称不会与运行同一用户同一脚本的其他人多次调用该脚本发生冲突。

有什么建议吗?


阅读 455

收藏
2020-05-29

共1个答案

一尘不染

我过去曾使用uniqid()生成唯一的文件名,但实际上并未创建该文件。

$filename = uniqid(rand(), true) . '.pdf';

第一个参数可以是您想要的任何参数,但是我在这里使用rand()使其更加随机。使用设置的前缀,您可以进一步避免与系统中的其他临时文件冲突。

$filename = uniqid('MyApp', true) . '.pdf';

从那里,您只需创建文件。如果其他所有方法均失败,则将其置于while循环中并继续生成它,直到获得可行的为止。

while (true) {
 $filename = uniqid('MyApp', true) . '.pdf';
 if (!file_exists(sys_get_temp_dir() . $filename)) break;
}
2020-05-29