我有一个脚本,使用PHPMailer发送至少一个电子邮件,但可能最多5个。 发送邮件的操作会延迟页面加载大约2-3秒。 这几乎是可以接受的,但显然每增加一封电子邮件,这会增加两倍和三倍。 即使在页面HTML之后放置代码也没有什么区别。 我知道PHP显然是一个"单线程"应用程序,但肯定有更聪明的方法吗?是否有一些花哨的javascript applet会在后台静默加载另一个页面,还是有一个更简洁的方式? 欢迎任何提示。
答案 0 :(得分:0)
我通常编写一个单独的脚本,接受必要的数据作为命令行参数,然后将该脚本作为后台进程启动,以便主脚本可以退出而无需等待它完成。像这样:
exec("nohup /usr/bin/php mailerscript.php $param1 $param2 > /dev/null &");
在mailerscript.php中,您可以$param1
和$param2
访问$argv[1]
和$argv[2]
。确保mailerscript.php对于webserver进程是可执行的,并且在exec中指定了它的完整路径。
答案 1 :(得分:0)
不知道为什么有人对这篇文章进行了修改,因为它是一个完全有效的问题,但是对于任何人未来的参考,我通过使用jquery / ajax嵌入页面来解决这个问题,如下所示:
<div id="contentext"></div>
<script>
$(document).ready(function() {
$("#contentext").load("sendmail.php");
});
</script>
这样页面立即加载,启动sendmail脚本,并从PHPmailer等输出结果/错误。
感谢其他建议:exec方法很有用,就像定期处理脚本选项的cron作业一样,但是,我更喜欢这种方法,因为它可以保留本机PHP / Javascript环境中的内容,而无需调用外部通过操作系统等进行处理。