如果只有substring为true,则验证php中的字符串

时间:2010-04-06 14:39:32

标签: php string substring

如果在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");
}

3 个答案:

答案 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”可能是个好主意。