如何在PHP中创建一个临时目录而不冒竞争风险?

如何在PHP中创建一个临时目录而不冒竞争风险?,php,python,Php,Python,我想知道PHP是否有类似于Python的tempdir.mkdtemp()的东西。如果仍然使用PHP的System::mktemp,则它似乎不合适。我想我自己也可以实现Python中提供的相同功能,但我很难相信我是唯一一个寻求该功能并希望避免重新发明轮子的人 代码应该是与操作系统无关的,因此在建议时使用exec不是一个选项。是与操作系统无关的,我不知道。你在哪里担心这个问题?您可能可以通过使用足够长的随机命名目录来降低风险。当php有uniqid()时,我不会使用“random”。@matcar

我想知道PHP是否有类似于Python的tempdir.mkdtemp()的东西。如果仍然使用PHP的System::mktemp,则它似乎不合适。我想我自己也可以实现Python中提供的相同功能,但我很难相信我是唯一一个寻求该功能并希望避免重新发明轮子的人


代码应该是与操作系统无关的,因此在建议时使用exec不是一个选项。

是与操作系统无关的,我不知道。你在哪里担心这个问题?您可能可以通过使用足够长的随机命名目录来降低风险。当php有uniqid()时,我不会使用“random”。@matcarlson:当然,可以尝试创建一个随机命名的目录,检查是否成功,然后重试其他操作。这基本上就是Python所做的。我这么做的原因是:没有安全风险,但是我仍然希望我的代码不会在另一个程序创建了一个与我试图创建的目录同名的目录的情况下失败。只为这个函数或类将创建的目录创建一个目录?为什么你认为调用is_dir和mkdir之间没有竞争?我想这比轮子难一点。你知道吗将不得不添加一些代码来更改冲突或新目录的目录名,但我相信这就是您要寻找的。
<?
if is_dir("myNewDir"){
    //rename the directory your trying to make and do it again
}else{
    mkdir("myNewDir); 
}
?>
<?php
$dirName = substr(md5(mt_rand()), 0, 8);
while (@mkdir($dirName) === false){
    $dirName = substr(md5(mt_rand()), 0, 0);
}
echo "Created directory: " . $dirName ;
?>