Rumah > Artikel > pembangunan bahagian belakang > Mengapakah Penjana Kata Laluan Rawak PHP Saya Hanya Menghasilkan \'a\'s dan Array?
Masalah:
Apabila menjana kata laluan rawak dalam PHP menggunakan kod coretan di bawah, semua aksara ialah 'a' dan nilai pulangan ialah tatasusunan dan bukannya a rentetan.
function randomPassword() { $alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789"; for ($i = 0; $i < 8; $i++) { $n = rand(0, count($alphabet)-1); $pass[$i] = $alphabet[$n]; } return $pass; }
Penyelesaian:
1. Gunakan strlen dan bukannya count untuk mengira panjang abjad: count sentiasa mengembalikan 1 untuk rentetan, manakala strlen mengembalikan panjang sebenar.
$alphaLength = strlen($alphabet) - 1; //put the length -1 in cache
2. Gunakan implode untuk menukar tatasusunan kepada rentetan: implode mengambil tatasusunan dan mencantumkan elemennya menjadi satu rentetan.
return implode($pass); //turn the array into a string
3. Isytiharkan $pass sebagai tatasusunan: Ini menghalangnya daripada dimulakan sebagai rentetan.
$pass = array(); //remember to declare $pass as an array
Amaran Keselamatan:
Perhatikan bahawa rand() ialah bukan penjana nombor pseudorandom yang selamat secara kriptografi. Pertimbangkan untuk menggunakan alternatif yang lebih selamat untuk menjana kata laluan atau tujuan kriptografi.
Atas ialah kandungan terperinci Mengapakah Penjana Kata Laluan Rawak PHP Saya Hanya Menghasilkan \'a\'s dan Array?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!