是否存在没有原子问题的tmpnam()的替代方案?

时间:2011-08-09 18:39:07

标签: php unix

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

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

谢谢!

[编辑:意思是tmpnam()]

1 个答案:

答案 0 :(得分:1)

没有银弹,但有2个黑客:

您可以直接从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');   
?>