gpt4 book ai didi

php - pdf 生成和发送电子邮件的长时间延迟。在服务器解析脚本时放置图像?

转载 作者:行者123 更新时间:2023-11-29 22:31:22 25 4
gpt4 key购买 nike

我正在制作一个表格,您可以在其中订购 express 服务。它的主要思想是生成包含验证数据的 PDF 文件,然后将其附加到电子邮件中发送给客户 + cc 给 express 公司。

问题是 pdf 生成 (TCPDF) 和电子邮件发送 (Swiftmail) 需要很长时间。

我想防止不耐烦的用户一遍又一遍地点击“确认”。理想的解决方案是显示一些 gif“正在加载”图像左右。我研究了 jquery .load() 函数,它看起来对这个问题来说是件好事,但是没有 js 的用户呢?

你能给我指出正确的方向吗?

最佳答案

在这种情况下我会使用 ajax。但是如果缺少 JS 是你真正关心的问题,那么有几种方法可以在没有 JS 的情况下做到这一点。首先,您可以在开始使用 pdf 之前向用户显示一些内容。例如

<?php
echo "<html><head></head><body> Please Wait..";
flush();
// process pdf here
?>

函数 flush() 将强制网络服务器将数据发送到浏览器,因此它会在页面的其余部分加载时显示。但是有些浏览器会在内部缓存这个东西。有一些方法可以克服这个问题(查看 php.net 中关于 flush() 函数的注释)但它可能会变得困惑。

另一种方法是异步处理 PDF。在这种情况下,目标脚本只显示一条消息,表明电子邮件将很快发送。并触发实际要发送的脚本女巫。例如:

<?php
echo "<html><head></head><body> Email will be send out shortly </body></html>";

$params='';
foreach ($_POST as $name => $value) {
$params.=$name.'='.$value.'&';
}
if ($params!='')
$params=urldecode(substr($params,0,-1));
$parts=parse_url('process_pdf.php'.'?'.$params);
$fp = fsockopen('process_pdf.php',80, $errno, $errstr, 30);
$out = "POST ".$parts['path']." HTTP/1.1\r\n";
$out.= "Host: ".$parts['host']."\r\n";
$out.= "Content-Type: application/x-www-form-urlencoded\r\n";
$out.= "Content-Length: ".strlen($parts['query'])."\r\n";
$out.= "Connection: Close\r\n\r\n";
$out.= $parts['query'];
fwrite($fp, $out);
fclose($fp);
?>

在此示例中,“process_pdf.php”将获得与原始脚本相同的所有 POST 参数。但会在后台执行,不会中断原始页面。

关于php - pdf 生成和发送电子邮件的长时间延迟。在服务器解析脚本时放置图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6746683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com