2017-09-25 68 views
2

我遇到問題。我正在使用PHP散列我的密碼,但是當我驗證它時,它給出了以下消息。使用PHP哈希處理後無法驗證密碼

注意:未定義的變量:liXZkG452在/opt/lampp/htdocs/test/verify.php第2行
失敗

我解釋下面我的代碼。

hash.php

<?php 
$password="[email protected]"; 
$hash = password_hash($password, PASSWORD_BCRYPT); 
echo $hash; 
?> 

以上echo是給這個$2y$10$liXZkG452/DQjB7TsIHEzuJ/ovi0L3.xwN1uYeqt.kFYma33Uu9Wq值並再次我在下面的文件比較它。

verify.php

<?php 
$hash="$2y$10$liXZkG452/DQjB7TsIHEzuJ/ovi0L3.xwN1uYeqt.kFYma33Uu9Wq"; 
$password="[email protected]"; 
if (password_verify($password, $hash)) { 
    echo 'login'; 
}else{ 
    echo 'Failed'; 
} 
?> 

上述功能是給我的問題。請幫我解決這個問題。

+7

您應該使用singlequotes''',而不是雙引號。你在雙引號中有'$'變量標識符,所以PHP認爲它實際上是一個變量。使用單引號可以規避這一點。 – Qirel

+0

@Qirel:完美,謝謝。我可以知道什麼錯誤? – subhra

+1

就像我所說的,'$'是變量標識符。所以PHP認爲'$'之後的任何東西都是變量名稱。在雙引號中,PHP使用變量,但不使用單引號。 – Qirel

回答

2

您需要在您的$hash變量周圍使用單引號字符串,而不是雙引號字符串,因爲PHP會將$解釋爲雙引號字符串內的變量標識符。然後它會假設接下來的是變量名稱(這就是爲什麼你得到這個「未定義的變量..」的通知)。字符串中的$的前兩個實例不會這樣處理,因爲它不是有效的變量名(它以數字開頭)。

下面輸出「login」,因爲$hash現在用單引號引用。

$hash = '$2y$10$liXZkG452/DQjB7TsIHEzuJ/ovi0L3.xwN1uYeqt.kFYma33Uu9Wq'; 
$password = "[email protected]"; 
if (password_verify($password, $hash)) { 
    echo 'login'; 
} else { 
    echo 'Failed'; 
}