在txt文件中搜索和重写时间戳


Searching and Overwritting timestamp in txt file

我在php中遇到了一个问题。我被要求这样做是为了我的大学目的。我在第一个页面中有一个基本的文本框,用户需要在其中输入登录id并按下登录按钮。按下登录按钮后,登录id和时间戳将存储在用逗号分隔的txt文件中。因此,如果这是用户A第二次登录,则必须用新的时间戳覆盖以前的时间戳。

这是我的代码:

<html>
<head><title>Login Portal</title></head>
<body><center>
<h1>TPF EMPLOYEE LOGIN</h1><hr><br><br>
<?php
session_start();
if(isset($_POST['submit']))
    {
    $myfile = fopen("data.txt", "a") or die("Unable to open file!");
    $_SESSION['name']=$_POST['id'];
    date_default_timezone_set('Asia/Calcutta');
    $date = date('Y-m-d H:i:s');
    $txt=$_SESSION['name'].",".$date.",'n";
    fputs($myfile, $txt);
    fclose($myfile);
    }
    else
    {
    echo "<form name='login' method='post'>";
    echo "Enter your login id : <input type='text' name='id' id='id' /><br><br>";
    echo "<input type='submit' name='submit' value='Login' />";
    echo "</form>";
    }
?>
</center>
</body>
</html>

这就是我的txt文件的样子:

yesh,2014-10-05 10:00:42,
thilak,2014-10-05 10:00:56,
if(isset($_POST['submit'])) {
    $myfile = file_get_contents('data.txt');
    $_SESSION['name']=$_POST['id'];
    date_default_timezone_set('Asia/Calcutta');
    $date = date('Y-m-d H:i:s');
    $txt=$_SESSION['name'].",".$date.",'n";
    $name = $_SESSION['name'];
    if(preg_match("/$name/", $myFile)) {
        $results = preg_replace("/$name.*',/", $txt, $myFile);
        file_put_contents('data.txt', $results);
    }
    else {
        file_put_contents('data.txt', $txt, FILE_APPEND);
    }
}
else {
    echo "<form name='login' method='post'>";
    echo "Enter your login id : <input type='text' name='id' id='id' /><br><br>";
    echo "<input type='submit' name='submit' value='Login' />";
    echo "</form>";
}

在将其用于真实文件之前,请确保仔细测试,以确保它不会损害您的数据。因为我对文件本身了解不够,无法确保它不会损坏文件。

这样的东西(虽然可能不是最佳的)应该会起作用。但是,在实际环境中,您可能希望使用数据库,或者至少锁定文件,这样它就不会被读写之间的另一个会话更新。这是未经测试的,但应该会让你朝着正确的方向前进。

$lines = file($file, FILE_IGNORE_NEW_LINES);
$name = preg_quote($_SESSION['name']);
$lines = preg_replace('/^' . $name . ',([^,]+),/$', $date, $lines);
file_put_contents($file, join("'n", $lines));