如果在PHP中验证子字符串是正确的,例如,如果user1在字符串中,那么它应该是真的吗?
文本文件:
user1:pass1
user2:pass2
user3:pass3
if(in_array($_SERVER['user1'] . "\r\n", $textfile)){ //not the way want this to be true
printf("Ok user1 is in this row somewhere");
}
答案 0 :(得分:1)
我会反对这种认证系统,因为它容易出错或滥用。使用其他系统,如ACL或数据库用户/密码哈希检查。
答案 1 :(得分:1)
如上所述,就用户身份验证而言,这不是一个好方法。如果你想要一些基本的东西,请至少使用HTTP Authentication或其他东西。
也就是说,您可以使用PHP's file function执行您所要求的操作,例如
function validUser($file, $user, $pass) {
// Check file exists
if (!is_file($file)) {
return FALSE;
}
// Read file
$lines = file($file);
if ($lines === FALSE) {
return FALSE;
}
// Go over the lines and check each one
foreach ($lines as $line) {
list($fuser, $fpass) = explode(':', trim($line));
if ($user == $fuser && $pass == $fpass) {
return TRUE;
}
}
// No user found
return FALSE;
}
if (validUser('passwords.txt', 'foo', 'bar')) {
echo 'The user was found';
}
请注意,这假设每行的格式为“username:password”,没有其他内容;您可能需要根据格式精确调整线条的匹配方式。由此验证的示例文件将具有诸如
之类的行foo:bar
答案 2 :(得分:0)
如果您使用此身份验证;为了您的用户考虑采用不同的(更安全的)方法。顺便说一句,对OP的回复是正确的,PHP代码几乎没有任何内容可以正常工作。
但是,如果想通过键$ arr ['key']来使用数组的值来查找不需要保护的配置设置(基本上可以看世界),你可以使用parse_ini_file( ) 和朋友。再说一次:对于真正敏感的数据,这不是一个好主意。
编辑:另外,对于行尾字符使用PHP_EOL常量而不是假设“\ r \ n”可能是个好主意。