問題:
使用程式碼在PHP 中產生隨機密碼時下面的程式碼片段,所有字元都是'a',回傳值是一個陣列而不是a字串。
function randomPassword() { $alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789"; for ($i = 0; $i < 8; $i++) { $n = rand(0, count($alphabet)-1); $pass[$i] = $alphabet[$n]; } return $pass; }
解:
1.使用strlen 而不是count 來計算字母表的長度: 對於字串,count 總是返回1,而strlen 返回實際長度。
$alphaLength = strlen($alphabet) - 1; //put the length -1 in cache
2。使用 implode 將陣列轉換為字串: implode 接受一個陣列並將其元素連接成一個字串。
return implode($pass); //turn the array into a string
3.將 $pass 宣告為陣列: 這會阻止它被初始化為字串。
$pass = array(); //remember to declare $pass as an array
安全警告:
請注意 rand() 是不是加密安全的偽隨機數產生器。考慮使用更安全的替代方案來產生密碼或加密目的。
以上是為什麼我的 PHP 隨機密碼產生器只會產生「a」和一個陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!