【问题标题】:validating a string in php if only substring is true如果只有子字符串为真,则在 php 中验证字符串
【发布时间】:2010-04-06 14:39:32
【问题描述】:

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

【问题讨论】:

  • 说真的,看手册。我不介意初学者的问题,但是这段代码是所以错了我不相信你付出任何努力。
  • @coronatus 任何编程问题都是有效的,认证方法没有php手动输入。
  • 为什么要在用户名后面加上换行符?我在文本文件中看不到它们。你能做一个 print_r($textfile) 吗?另外,用户名是 $_SERVER['user1'] 的键还是值?

标签: php string substring


【解决方案1】:

我建议不要使用这种容易出错或滥用的身份验证系统。使用其他系统,如 ACL 或数据库用户/密码哈希检查。

【讨论】:

    【解决方案2】:

    正如上面所说,就用户身份验证而言,这不是一个好方法。如果您想要一些基本的东西,请考虑使用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';
    }
    

    请注意,这假设每一行都是“用户名:密码”的形式,没有其他内容;您可能需要根据您的格式准确调整您匹配行的方式。将通过此验证的示例文件将具有诸如

    之类的行
    foo:bar
    

    【讨论】:

      【解决方案3】:

      如果您使用它进行身份验证;为了您的用户考虑不同(更安全)的方法。顺便说一句,对 OP 的回复是正确的,PHP 代码中几乎没有任何内容可以按预期工作。

      但是,如果想法是通过键 $arr['key'] 使用数组的值来查找不需要保护的配置设置(基本上是全世界都可以看到),您可以使用 parse_ini_file( ) 和朋友。再次重申:对于真正敏感的数据,这不是一个好主意。

      编辑:另外,将 PHP_EOL 常量用于行尾字符而不是假设“\r\n”可能是个好主意。

      【讨论】:

        猜你喜欢
        • 2022-11-12
        • 1970-01-01
        • 1970-01-01
        • 2012-11-19
        • 2021-06-25
        • 2017-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多