2013-04-29 25 views
0

我有正確的PHP腳本來創建一個隨機數,並在服務器上創建一個新的文件夾,因爲它的名字。如果該文件夾存在,腳本將停止。我無法弄清楚的是如何指示腳本生成一個新的隨機#如果該文件夾已經存在,並再次嘗試,直到它找到一個未使用的號碼/文件夾。我認爲do while是我正在尋找的,但不知道我是否正確寫入了它(不想在服務器上測試它,因爲害怕創建永久循環的mkdir命令)。雖然LOOP - 最好的辦法

這裏是正在使用

<?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"); 

?> 

回答

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)"); 
+0

真棒該做的工作Alex和我很感激 - 在一個側面說明,我的隨機數將被設置爲10K到90K所以它之前沒有可用的數字很長的路要走 - 但只是涵蓋所有基地,將利用類似於MadDokMike關於安全計數的建議的邏輯是如果所有數字都被使用,則使用exit()來排除腳本的方式? – DMSJax 2013-04-29 16:44:26

+0

@ user2065226是的。如果使用所有可能的組合,您將需要其他東西來打破循環。櫃檯是一種方式。 – alexn 2013-04-29 16:45:53

+0

爲了以防萬一,放入10000循環的硬限制可能是個好主意。像這樣的代碼已經越來越被遺忘,絆倒了有人在未來的方式。 – tadman 2013-05-14 02:08:28

0

我會做這樣的事情:

<?php 
$filename = md5(time().rand()) . ".txt"; 
while(is_file("clients/$filename")){ 
    $filename = md5(time().rand()) . ".txt"; 
} 
touch("clients/$filename"); 
0

有用的技巧對一個while循環,當你的測試代碼;創建變量爲安全計,並增加它,然後,如果你的其他邏輯會導致它打破了一個無限的問題,像這樣的:

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

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

很明顯,如果你需要500低/高然後將其設置到什麼,這只是確保你不會殺死你的機器。 :)

+0

感謝你 - 沒有足夠的信譽來投上一票 - 抱歉,但感謝你的想法,我會在將來使用它 – DMSJax 2013-04-29 16:45:27