我需要将一些文件转换为PDF,然后将它们附加到电子邮件中.我正在使用Pear Mail作为它的电子邮件方面,这很好(主要是 - 仍在解决一些问题)但作为其中的一部分,我需要创建临时文件.现在我可以使用tempnam()函数,但听起来它在文件系统上创建了一个文件,这不是我想要的.
我只想在临时文件系统中使用一个名称(使用sys_get_temp_dir()),该名称不会与运行相同用户的同一脚本的其他人冲突多次调用该脚本.
建议?
Lus*_*sid 144
我过去使用uniqid()来生成唯一的文件名,但实际上并没有创建文件.
$filename = uniqid(rand(), true) . '.pdf';
Run Code Online (Sandbox Code Playgroud)
第一个参数可以是你想要的任何东西,但是我在这里使用了rand()来使它更加随机.使用set前缀,可以进一步避免与系统中的其他临时文件冲突.
$filename = uniqid('MyApp', true) . '.pdf';
Run Code Online (Sandbox Code Playgroud)
从那里,您只需创建文件.如果所有其他方法都失败了,那就把它放在while循环中并继续生成它,直到你得到一个有效的循环.
while (true) {
$filename = uniqid('MyApp', true) . '.pdf';
if (!file_exists(sys_get_temp_dir() . $filename)) break;
}
Run Code Online (Sandbox Code Playgroud)
Chr*_*don 26
说真的,使用tempnam().是的,这会创建文件,但这是一个非常有意的安全措施,旨在防止系统上的另一个进程"窃取"您的文件名并导致您的进程覆盖您不想要的文件.
即,考虑这个顺序:
PHP的tempnam()实际上调用了系统的mkstemp(用于Linux ...替换其他操作系统的"最佳实践"功能),这将通过以下过程:
现在,您可以自己完成所有这些事情,但是为什么,当"正确的函数"执行创建安全临时文件所需的所有内容时,这几乎总是涉及为您创建一个空文件.
例外: