当生成的文件夹名已经存在时重新创建文件夹名

时间:2018-09-06 17:27:47

标签: php

如果我使用此代码创建随机文件夹名称,则可以检查此文件夹名称是否已存在,但是如何再次运行此文件夹名称,请创建一个新的文件夹名称并再次检查,依此类推

function createRandomFoldername()
{
    $chars = "abcdefghijkmnopqrstuvwxyzABCDEFGHIJKMNOPQRSTUVWXYZ1023456789";
    srand((double)microtime()*1000000);
    $i = 0;
    $folder = '' ;

    while ($i <= 10)
    {
        $num = rand() % 33;
        $tmp = substr($chars, $num, 1);
        $folder = $folder . $tmp;
        $i++;
    }

    return $folder;
}
$folder_random = createRandomFoldername();

2 个答案:

答案 0 :(得分:0)

鉴于您的随机函数,您可以使用do while循环来实现此目的

do{ 
    $folder_random = createRandomFoldername();//generate once
}while(is_dir($folder_random));//check if already exists

如果文件夹不存在,循环将自动停止。

答案 1 :(得分:0)

如果您担心比赛条件,可以尝试以下方法:

!is_dir($folder) && !mkdir($folder) && !is_dir($folder)

此代码摘自Probable bugs文档的Php Inspections (EA Extended)

  

'mkdir(...)'比赛条件

     

此问题很难重现,因为与并发相关   问题是。尝试创建多个进程时显示   一个尚不存在的目录。具体来说,当一个过程   在另一个进程已经完成之后,位于is_dir()mkdir()之间   设法创建了目录。

循环直到完成。