2013-10-17 48 views
1

我有一個安全標記,當頁面加載並將該標記寫入文件時創建。然後我確認在表單中傳遞的令牌與文件中的一個令牌相匹配。PHP in_array()不起作用

這第一部分位於FORM.PHP文件中,我可以確認該令牌正在寫入該文件。

//Create Token 
$token = md5(time()); 

//Save token to file 
$fp = fopen('/PATH/tokens.txt', 'a') or die ("Unable to open to Token file"); 
fwrite($fp, "$token\n") or die ("Unable to write to Token file"); 
fclose($fp); 

這部分代碼位於PROCESS.PHP文件中。我已經打印出$ tokens數組的內容,並且可以手動確認相同的標記在那裏。

$tokens = file('/PATH/tokens.txt') or die("Unable to read file"); 

$token = $_POST['token']; 

if (in_array($token, $tokens)){ 
    error_log("Found Token"); 
} else { 
    error_log("Token Not Found"); 
} 

我想不通爲什麼in_array($token, $tokens)函數沒有返回TRUE。

回答

2

使用file('/path/file.ext',FILE_IGNORE_NEW_LINES);,否則每個條目都有附加文件中的換行符。

2

file()默認保留換行符,這意味着你正在匹配一個md5()到md5()\ n。

要去除換行符出來,你需要通過FILE_IGNORE_NEW_LINES作爲第二個參數文件()

+0

該訣竅謝謝! –

0

file函數會返回一個數組附加了換行