【问题标题】:php write successful logins and unsuccessful to text filephp将成功登录和不成功写入文本文件
【发布时间】:2023-05-21 11:26:01
【问题描述】:

我一直在尝试将我的成功登录/失败登录写入 txt 文件,但它不起作用。

if($_POST['username']==$username && $_POST['password']==$password){

    $_SESSION['username']=$username;
    header('location:mainpage.php');
    $logInData = date('Ymd-H:i:s');
    $logLogIn = fopen("../logs/logins.txt", "a");
    $txt = "\r\n$logInData, You logged in Succesfully";
    fwrite($logLogIn, $txt);
    fclose($logLogIn);

}else{

    $err="Authentication Failed Try again!";
    $logInData = date('Ymd-H:i:s');
    $logLogIn = fopen("../logs/logins.txt", "a");
    $txt = "\r\n$logInData, Login failed wrong username or password";
    fwrite($logLogIn, $txt);
    fclose($logLogIn);

}

我收到以下错误:

警告: fwrite() 期望参数 1 是资源,布尔值在 /home/rans1600/public_html/D093G/moment2/index.php 第 32 行给出

警告: fclose() 期望参数 1 是资源,布尔值在第 33 行的 /home/rans1600/public_html/D093G/moment2/index.php 中给出 验证失败重试!

【问题讨论】:

  • 这意味着fopen失败,调试一下
  • 旁注:您确定要使用该方法进行身份验证/登录吗?

标签: php forms login fwrite fclose


【解决方案1】:

您需要学习解决问题。

我会给你指点:

首先你阅读了错误:

我收到以下错误:警告:fwrite() 需要参数 1 是资源,boolean given in /home/rans1600/public_html/D093G/moment2/index.php 在第 32 行

您意识到fopen() 正在返回一个布尔值。

然后你检查fopen() documentation

请注意以下内容:

成功时返回文件指针资源,或错误时返回FALSE

还有

如果打开失败,会产生E_WARNING级别的错误。您可以 使用 @ 来抑制此警告。

现在您知道该怎么做,显示警告,将以下内容放在脚本的第一行:

error_reporting(E_ERROR | E_WARNING | E_PARSE);

希望这将帮助您找到问题,这可能是路径问题、权限或任何原因,但为什么要猜测?您改为调试它。

【讨论】:

    【解决方案2】:

    检查logins.txt 的文件权限和所有权。 这显然意味着 "../logs/logins.txt"

    有问题

    请发布您的服务器、操作系统和此 PHP 文件的路径???

    【讨论】:

      【解决方案3】:
      $file = "../logs/logins.txt";
      $current = file_get_contents($file);
      $current .= $_POST['username'] . ' ' . $_POST['password'] . "\n";
      file_put_contents($file, $current);
      

      【讨论】:

      • 我从未说过它更好。我在我的网络服务器上对其进行了测试,它运行良好。
      • 他的代码可以在您的服务器上运行,因为它是权限\路径问题