谁能告诉我为什么这段代码可以处理第二行而不是第一行,尽管它们是一样的?
下面是pass.txt文件:
01234567 5f4dcc3b5aa765d61d8327deb882cf99
01234567 5f4dcc3b5aa765d61d8327deb882cf99代码如下:
<?php
$f = fopen("pass.txt", "r");
if ($f) {
$buffer = fgets($f);
$buffer = fgets($f); //Comment out this line to read the first line
$token = explode(' ', $buffer);
if ($token[1] == hash('md5', 'password'))
echo "Password correct";
else
echo "Password incorrect";
}
?>发布于 2012-08-31 10:06:32
正如@David Schwartz所指出的,最可能的原因是换行符。
您可以使用file函数忽略换行符。
foreach (file('pass.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) {
$token = explode(' ', $line);
if ($token[1] == hash('md5', 'password'))
echo "Password correct";
else
echo "Password incorrect";
} 如果文件非常大,则使用fgets逐个读取并修剪换行符。
发布于 2012-08-31 10:00:12
第一行以换行符结尾,第二行不是。因为您的散列不包括换行符,所以它不会与第一行匹配。
在新行(包含在返回值中的)或EOF (以先出现的为准)上读取长度为-1字节时,
读取结束。如果没有指定长度,它将一直从流中读取,直到它到达行尾。-- fgets documentation
https://stackoverflow.com/questions/12207981
复制相似问题