我正在用PHP开发我的第一个项目并且是新的。昨天我需要创建一个功能,向所有网站成员发送新帖子的电子邮件通知。我创建了一个功能,但我不知道它有多好。
创建帖子后,我选择了sql中的所有网站成员 -
包括“db.php”;
$query = "SELECT * FROM user";
$runQuery = mysqli_query($db, $query);
这给了我所有的网站成员。然后我循环遍历数组并抓住每个成员的电子邮件ID -
while($users = mysqli_fetch_assoc($runQuery) {
$email = $users['email'];
}
这样我就拥有了每个成员的电子邮件ID。现在在循环中,我可以使用mail()函数向每个站点成员发送电子邮件。
为了更好的代码编写,我在另一个文档中编写了发送电子邮件代码,并使用'include()'函数进行链接。像这样 -
while($users = mysqli_fetch_assoc($runQuery) {
$email = $users['email'];
include "send_email.php";
}
发送电子邮件文件包含$ header,$ email_subject,$ email_body以及来自此循环的$ email。因此,每次循环运行时,它都有新的电子邮件ID,邮件将被发送到该电子邮件ID。
此代码在我的localhost上运行,即使在生产(hostgator托管)中也是如此,直到网站成员很少。但是,当我在我的实际网站上测试它(有超过70个成员)时,页面停留了至少10秒并返回错误“页面无效”。
那么这里究竟发生了什么?为什么它无法向更多用户发送电子邮件?
答案 0 :(得分:0)
因为你在每一步都包含“send_mail.php”文件,这意味着大量的内存和CPU使用率。那你为什么不这样做呢:
send_mail.php文件:
function sendMail($email){
//your mail stuff..
}
你的while循环:
include "send_mail.php";
while($users = mysqli_fetch_assoc($runQuery)){
$email = $users['email'];
sendMail($email);
}
PHP脚本也有执行代码的时间限制。如果你想绕过它,你必须把这个代码写到文件的顶部(有while循环):
set_time_limit(0);