首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >php检查txt文件中的匹配项

php检查txt文件中的匹配项
EN

Stack Overflow用户
提问于 2013-03-01 17:03:30
回答 4查看 2.3K关注 0票数 1

您好,我创建了一个简单的登录系统。我知道这样做是完全不安全的,但这只是为了学习的目的,因为我是php的新手。我在验证时遇到了问题,现在它不会报告用户名或密码是否存在于txt文件中。我还将使用会话(未完全实现)来跟踪用户是否登录。

代码语言:javascript
复制
         <?php 
      session_start(); // session


       if(isset($_POST['register'])) //  Register USER
    {
      $user  = $_POST['username'];
      $password=$_POST['password'].PHP_EOL;
      $fh = fopen("file.txt","a+");
      fwrite($fh,$user." ".$password); //write to txtfile
      fclose($fh);
    }

txt文件中的输出如下所示:

代码语言:javascript
复制
      user1 password1
      user2 password2

这就是我需要帮助的地方

代码语言:javascript
复制
      if(isset($_POST['Login']))
      {
      $_SESSION['username']=$user; 
  $_SESSION['password']=$password;

  $file = file_get_contents("file.txt");



 if (strpos($file, "$user $password".PHP_EOL) !== false) 
  {
     // go to login page
  }
  else 
{ 
     //ERROR
}

    ?>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-01 17:06:21

file_get_contents()接受一个文件名,而不是一个文件指针,所以你应该使用file_get_contents('file.txt')并去掉fopen调用。

http://php.net/manual/en/function.file-get-contents.php

然后,$file的值是一个字符串,它将文件的所有内容作为一个字符串包含在内。所以你可以使用普通的字符串操作,而不需要任何feof的东西。

无论您如何想要查看file(),它可能对您很有用:

http://php.net/manual/en/function.file.php

编辑:

你的逻辑也有问题。

您将首先检查用户名,然后再检查密码,这是一个单独的操作。这将使任何用户与任何用户的密码匹配。假设用户alice的密码为"foo",bob的密码为"bar",按照当前的逻辑,alice将能够使用"foo“或"bar”作为密码登录。

因此,您实际上要查找的是一个字符串,它是用户名和密码的串联,就像在文件中找到的那样(例如"alice foo".PHP_EOL):

代码语言:javascript
复制
if (strpos($file, "$user $password".PHP_EOL) !== false) {
    // go to login page
} else {
    // error
}

您需要其中的PHP_EOL的原因是,这是您用来标记记录结尾的mark。如果您没有将其放入搜索字符串中,那么您将匹配实际密码的任何子字符串,包括空密码。(该文件包含文本"alice foo".PHP_EOL,还包含文本"alice ",但不包含文本"alice ".PHP_EOL)。

票数 4
EN

Stack Overflow用户

发布于 2013-03-01 17:06:52

问题出在这里:

代码语言:javascript
复制
$fp = fopen ("file.txt", "r"); // read from file
$file = file_get_contents($fp);

使用fopen,您可以逐行读取文件;使用file_get_contents,您可以通过将文件名指定为参数而不是文件句柄来获取字符串形式的整个文件内容。

你把两者都搞混了。

票数 1
EN

Stack Overflow用户

发布于 2013-03-01 17:52:35

引号内的php变量将只表现为字符串$_SESSION‘’username‘=“$user”;像这样使用$_SESSION’‘username’=$user;

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15154011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档