确认带有激活链接的电子邮件,如果有效的 PHP,则存储在文件中


Confirm email with activation link then store in file if valid PHP

我意识到这个问题已经被问了很多次,但我还没有找到平面文件版本。

我正在寻找一种在PHP或CGI-PERL中实现以下目标的方法,最好是PHP:

  1. 一个人通过表单提交他们的电子邮件地址。
  2. 然后,电子邮件将(临时)存储在平面文件数据库中 (temp_emails.txt)
  3. 然后,此人会收到一封自动回复电子邮件,其中包含用于确认其电子邮件地址的链接。
  4. 通过单击链接确认后,他们的电子邮件地址是保存到新文件。

(例如confirmed_emails.txt)。

我想到的一种方法是某种形式的"选择加入"方法。

如果没有SQL或类似的数据库,这可能吗?

这是可能的。

将电子邮件写入temp_emails.txt文件时,请像这样打开它:

$f = fopen('temp_emails.txt', 'a+'); // open for read/write at end of file
fwrite($f, $email); // write the email to the file
fclose($f); // close it
// send new email

他们得到他们的链接 confirm.php?email=xyz@abc.com

// first check if they already confirmed it
$file = file('confirmed_emails.txt');
if(!in_array($email, $file)){
    // not in file
    $f = fopen('confirmed_emails.txt', 'a+');
    fwrite($f, $email);
    fclose($f);
}else {
    // already confirmed
}

我认为您可能可以在不存储任何内容的情况下管理它,即使在文本文件中也是如此。

当您生成通过电子邮件发送给用户进行确认的唯一代码时,请通过对要发送到的电子邮件地址进行哈希处理来创建它,并具有以下格式的链接:

http://www.example.com/confirm.php?email=<emailaddress>&confirm=<hashedemail>
然后,只需根据链接中的哈希

重新对链接中的电子邮件地址进行哈希处理,如果它们匹配,则您已确认电子邮件地址。

(虽然我很好奇你为什么不想把它存储在数据库中 - 大概你需要将电子邮件地址存储在一个数据库中,这样你才能用它们做一些有用的事情?