2010-04-06 73 views
0

如何验证子字符串在PHP中是真实的,例如,如果user1在字符串中,它应该是true?验证在PHP中的字符串,如果只有子字符串为真

文本文件:

USER1:PASS1

用户2:PASS2

用户3: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

认真看看手册。我不介意初学者的问题,但这段代码是* so * wrong我不相信你会付出任何努力。 – 2010-04-06 14:42:19

+0

@coronatus任何编程问题都是有效的,并且没有用于身份验证方法的php手动条目。 – 2010-04-06 14:50:00

+0

为什么在用户名后面加入换行符?我没有在文本文件中看到它们。你可以做一个print_r($ textfile)吗?另外,用户名是$ _SERVER ['user1']的键或值吗? – webbiedave 2010-04-06 14:54:16

回答

1

我会建议对这种认证系统作为容易出现错误或滥用。使用其他系统,如ACL或数据库用户/密码散列检查。

0

如果您使用此进行身份验证;为了您的用户考虑采用不同(更安全)的方法。顺便说一下,对OP的回复是正确的,该PHP代码中的任何内容都不会像预期的那样工作。但是,如果想通过键$ arr ['key']使用数组的值来查找不需要保护的配置设置(基本上让世界看到),那么可以使用parse_ini_file () 和朋友。再次说明:对于真正敏感的数据来说这不是一个好主意。

编辑:此外,它可能是一个好主意,使用PHP_EOL常量为结束行字符,而不是假设“\ r \ n”。

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