【发布时间】:2017-10-19 07:43:12
【问题描述】:
更新:安装测试 - 它工作 - 但我的网络主机无法在大约 6 秒内处理 600 封电子邮件 - 我让每个连接等待 20 秒然后发送一封邮件 - 这些都通过了
我有一个包含 600 多封电子邮件的邮件列表 我有发送 600 多封电子邮件的功能
不幸的是,执行时间有限制(90 秒),因此脚本在完成之前就被关闭了。我无法使用set_time_limit(0) 更改时间,因为它是由我的网络主机设置的(不在我可以更改的 ini 文件中)
我的解决方案是从主文件向子文件发出发送请求,该子文件将一次发送 100 封邮件。但是这些是否会立即发送 - 还是会在发送下一个请求之前等待答复?
代码:
for($i=0;$i<$mails;$i+100) {
$url = 'http://www.bedsteforaeldreforasyl.dk/siteadmin/php/sender.php';
$myvars = 'start=' . $i . '&emne=' . $emne . '&besked=' . $besked;
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_POST, 1);
curl_setopt( $ch, CURLOPT_POSTFIELDS, $myvars);
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt( $ch, CURLOPT_HEADER, 0);
curl_setopt( $ch, CURLOPT_SAFE_UPLOAD, 0);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt( $ch, CURLOPT_TIMEOUT, 1);
$response = curl_exec( $ch );
curl_close($ch);
}
$mails是收件人总数$start是SQL语句的起始行号
这会(如我所愿)启动 6 个并行连接 - 还是(如我所惧)会一个接一个地启动 6 个进程?
在接收脚本中我有:
<br>
ignore_user_abort(true);<br>
$q1 = "SELECT * FROM maillist LIMIT $start,100 ORDER BY navn";
【问题讨论】:
-
我不是 100% 确定,但看起来它将开始 6 个进程
-
是否会等待对方完成 - 还是同时进行?
-
我不敢回答这个我不确定的问题
-
我认为 curl_exec 是阻塞的,所以这将按顺序运行。也许 multi-exec 会帮助php.net/manual/en/function.curl-multi-exec.php
-
curl_exec 正在阻塞,我想知道的是:即使您设法使用 multi-exec 在 1/6 的时间内发送所有邮件,这真的是理想的行为吗?在不到 90 秒的时间内发送了 600 多封邮件是很多...