2013-02-02 4 views
-3

아래 코드의 목록 줄에 정의되지 않은 오프셋이 나타납니다. 이유가 무엇입니까? 암호가 아직 생성 내가 오프셋 오류를정의되지 않은 오프셋?

function generatePassword($length=6,$level=2){ 

    list($usec, $sec) = explode(' ', microtime(true)); 
    srand((float) $sec + ((float) $usec * 100000)); 

    $validchars[1] = "23456789abcdefghjkmnpqrstuvwxyz"; 
    $validchars[2] = "23456789abcdefghjkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ"; 
    $validchars[3] = "[email protected]#$%&*()-= /[email protected]#$%&*()-= /"; 

    $password = ""; 
    $counter = 0; 

    while ($counter < $length) { 
    $actChar = substr($validchars[$level], rand(0, strlen($validchars[$level])-1), 1); 

    // All character must be different 
    if (!strstr($password, $actChar)) { 
     $password .= $actChar; 
     $counter++ ; 
    } 
    } 

    re 

회전 $ 암호를 얻을에도 불구하고;

}

+0

이것은 실제 질문이 아닙니다. 오류에 대한 자세한 내용, 시도한 내용 등 등 ...이 질문에 플래그가 붙어 있습니다. – TN888

+0

PHP의 유명한 디버깅 방법 (예 : 인쇄 변수 또는 XDebugger 사용 - 중단 점 등)을 읽으십시오. .) 여기에 게시하기 전에 버그가있는 코드에 적용하십시오. – mtndesign

답변

1

microtime(true) 결코 공백을 포함하지 않는 부동 소수점 값을 반환합니다. 따라서 explode()은 단일 항목 만있는 배열을 반환하고 배열에 두 개 이상의 항목이 필요하므로 두 개의 매개 변수가있는 list이 실패합니다. 대신 microtime(false)을 사용하십시오.

list($usec, $sec) = explode(' ', microtime(false)); 
+0

microtime() = microtime (false) [microtime] (http://php.net/manual/en/function.microtime.php) –

+0

이상한 점은 함수가 여전히 작동하며 여전히 임의의 암호를 생성한다는 것입니다. – user1898525

+1

PHP 마술 일뿐입니다. 누락 된 목록 항목에 대한 경고를 생성 한 다음 기본값을 NULL로 지정하고 경고에 관계없이 계속합니다. 그 NULL은 다음에 오는 산술에서 0으로 변환됩니다. 그래서 당신은 가변적 인 것으로 간주 될 때 입력 중 하나가 상수이기 때문에 당신은 여전히 ​​임의의 암호를 얻고 있습니다. . – leftclickben

관련 문제