是否有一种替代tmpnam()而不存在原子问题的方法?


Is there an alternative to tmpnam() that doesn't have atomic issues?

PHP有UNIX tempfile的包装器吗?或者只是tmpnam()有原子性问题,比如一次调用两个函数访问函数。

我想在许多脚本上大规模生成临时文件名。有tmpnam()的替代方案吗?

谢谢!

[edit: means tmpnam()]

没有灵丹妙药,但有两招:

你可以直接从php调用这个函数:

<?php
$tempFileName = exec("mktemp -t $prefix");
?>

您也可以使用像这样的递归函数(很脏,但应该可以工作:)):

<?php
function tmpName($prefix, $path, $ext) {
    $name = (string)$prefix.getmypid().microtime(true).$ext;
    if (file_exists($path.'/'.$name)) {
        return tmpName($prefix, $path, $ext);
    } else {
        return $name;
    }
}
$tempFileName = tmpName('an arbitrary prefix','/tmp','.txt');   
?>