0

我有正确的 PHP 脚本来创建一个随机数并在服务器上创建一个新文件夹,其中 # 作为它的名称。如果文件夹存在,则脚本停止。我不知道的是如何指示脚本生成一个新的随机 # 如果文件夹已经存在,然后重试,直到找到一个未使用的号码/文件夹。我认为 ado while是我正在寻找的,但不确定我是否正确编写了它(不想在服务器上测试它,因为害怕创建一个永远循环的mkdir命令)。

这是正在使用的一次性代码

<?php
$clientid = rand(1,5);
while (!file_exists("clients/$clientid"))
{
mkdir("clients/$clientid", 0755, true);
exit("Your new business ID is($clientid)");
}
echo ("The client id is $clientid");
?>

这是do while我正在考虑的 - 这是正确的还是我需要以不同的方式做到这一点?

<?php

$clientid = rand(1,5);

do {mkdir("clients/$clientid", 0755, true);
    exit("Your new business ID is($clientid)");}

while (!file_exists("clients/$clientid"));
echo ("The client id is $clientid");

?>
4

3 回答 3

0

在 while 循环上测试代码时有用的提示;创建变量作为安全计数并增加它,然后如果您的其他逻辑导致它爆发的无限问题,如下所示:

$safetyCount = 0;
while (yourLogic && $safeCount < 500){

//more of your logic
$safetyCount++;
}

显然,如果您需要 500 低/高然后将其设置为任何值,这只是确保您不会杀死您的机器。:)

于 2013-04-29T16:27:54.203 回答
0

问题是您只能在循环之外生成一次新数字。这意味着您最终会得到一个永不终止的循环。反转循环并在每次迭代中生成一个新数字:

$clientid = rand(1,5);
while (file_exists("clients/$clientid"))
{
    // While we are in here, the file exists. Generate a new number and try again.
    $clientid = rand(1,5);
}

// We are now guaranteed that we have a unique filename.
mkdir("clients/$clientid", 0755, true);
exit("Your new business ID is($clientid)");
于 2013-04-29T16:23:04.323 回答
0

我会做这样的事情:

<?php
$filename = md5(time().rand()) . ".txt";
while(is_file("clients/$filename")){
    $filename = md5(time().rand()) . ".txt";
}
touch("clients/$filename");
于 2013-04-29T16:23:53.363 回答