我有一个关于php代码如何执行的问题。
我现在只使用php连接到iOs APP的mysql数据库。所以我在php端创建了不同的API。然后,在APP方面,只需提交帖子或获取查询或更新数据库的请求。
所以在php方面,我做了DB查询或更新,然后将json结果返回给APP。
现在我有一个功能,它完成以下工作:
function a(){
1.Insert a record to the DB;
if (insert successful){
2. $this->echoJson ('Succeed','New Record has added');
3. then send email to several email addresses.(using PHPMailer-master)
}
}
当我的APP端获得指示插入成功的json数据时。该应用程序将跳转到另一页。
该功能运作良好。唯一的问题是步骤3需要大约5秒才能运行。第1步和第2步非常快。对于php方面来说,它只在所有代码执行完毕后才返回json数据。所以我的APP方需要等待5秒才能得到响应。但我只关心插入是否成功。
插入成功后是否可以返回json数据然后进行发送?
我不确定我是否能清楚地解释这个问题。
总之,我发现执行顺序是第1步第3步第2步。我想将顺序作为第1步第2步第3步。
谢谢。
答案 0 :(得分:1)
Vicotry的解决方案适用于次要编辑:
curl_setopt($ch, CURLOPT_URL, "sendActiveEmail.php");
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 10);
$parmArray=array("paraName"=>value,...);
curl_setopt($ch, CURLOPT_POSTFIELDS, $parmArray);
curl_exec($ch);
curl_close($ch);
答案 1 :(得分:0)
我理解你的问题,但不,它必须在json返回之前完成发送邮件。与其他高级语言不同,PHP不支持线程,如果有一种方法可以保存数据库中的邮件并一次运行一个cron作业来推送所有邮件而不是在返回json时发送它
答案 2 :(得分:0)
将您的PHPMailer功能移动到另一个文件(简称send.php
,可由http://example.com/send.php
在内部访问)。然后你可以用一个实际发送邮件的微小超时函数发出一个curl请求。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://example.com/send.php');
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1);
curl_exec($ch);
curl_close($ch);