2013-04-29 3 views
0

난 임의의 숫자를 만들고 그 이름으로 # 서버에 새 폴더를 만들 수있는 적절한 PHP 스크립트가 있습니다. 폴더가 있으면 스크립트가 중지됩니다. 폴더가 이미 존재하는 경우 스크립트가 새로운 임의의 번호를 생성하도록 지시하고 사용되지 않는 번호/폴더를 찾을 때까지 다시 시도하는 방법을 알아낼 수 없습니다. 나는 do while이 내가 찾고있는 것이지만 올바르게 작성했는지 안했는지 (정확히 mkdir 명령을 반복 작성하는 것을 두려워서 서버에서 테스트하지 않으려 고합니다). 이 정확한지 아니면이 다른 방법으로 어떻게해야합니까 - 여기 Do While LOOP - best approach

는 일회성 코드가 여기에
<?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

+0

@ user2065226 네. 가능한 모든 조합이 사용되는 경우 루프를 해제하기 위해 다른 것이 필요합니다. 카운터는 편도입니다. – alexn

+0

하드 루프 한계를 10000 루프로 설정하는 것이 좋습니다. 이런 식의 코드는 잊어 버리고 앞으로 누군가를 위태롭게하는 방법이 있습니다. – tadman

0

나는 이런 식으로 뭔가 할 것 : while 루프에 때 테스트 코드에 대한

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

유용한 팁을; 안전 계수로 변수를 생성하고 다른 논리는 다음과 같이,이 발발 무한 문제가 발생하는 경우 다음을 증가 : 분명히

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

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

이 필요하면 500보다 낮은/높은 다음, 이것은 단지 확인합니다 무엇으로 설정 당신은 당신의 기계를 죽이지 않을 것입니다. :)

+0

감사합니다. 투표에 대한 명성이 충분하지 않습니다. 죄송 합니다만, 그 아이디어에 감사드립니다. 앞으로 사용하겠습니다. – DMSJax