不要等待脚本完成

时间:2010-07-28 11:21:53

标签: php asynchronous

我有一个发送短信的PHP脚本,问题是每条短信发送前需要一些时间。在我的站点中,页面将等待此脚本运行完毕。如何向用户发送短信将被发送的消息,并恢复网站的正常运行。

6 个答案:

答案 0 :(得分:2)

将消息放入数据库的队列中。然后在后台运行一个作为cron作业运行的脚本来处理队列。

答案 1 :(得分:2)

这里唯一的问题是浏览器认为它正在等待来自脚本的更多输出。您可以卸载到单独的进程,或使用异步Web调用,或者您可以简单地.....

<?php
register_shutdown_function('when_alls_done');
.... // render page
exit;

function when_alls_done()
{
    if ($_REQUEST['send_to_phone']) {
       send_sms($_REQUEST['send_to_phone'], $_REQUEST['message']);
    }
}

网络服务器应该在“退出”处刷新请求并让浏览器知道响应已完成(之前PHP代码中的显式刷新将不会刷新Web服务器缓冲区,否则将导致输出用另一个块来编码的块)。

下进行。

答案 2 :(得分:0)

而是在那里发送短信然后你可以将它存储在某个地方(例如数据库)。然后,您可以构建一个额外的脚本(在PHP中或您想要的任何其他内容),轮询数据库以查找要发送和分派SMS的SMS。您可以根据您的操作系统,通过cron或计划任务每​​隔x秒或分钟运行一次。这样,您就可以在页面中执行耗时的任务,其任务是及时与用户进行通信。

答案 3 :(得分:0)

如果你在LAMP

  1. 编写一个cron作业,该作业将查询队列(在数据库中)以查找待处理的SMS并发送它们。
  2. 在您的脚本中将SMS添加到队列中。
  3. 在另一页上显示其短信的用户状态。
  4. 使用Ajax,您可以在后台查询最近发送的SMS的状态。只要看到发送通知用户。

答案 4 :(得分:0)

要执行此操作,您可以使用 ajax 。 在一些按钮按下只是发送一个ajax请求到模拟发送短信的PHP文件。并在屏幕上发出通知,如'发送短信!!!'并且根据ajax行动的反应,将'发送短信'改为'成功!!!'....

使用ajax你可以使用jquery .. 如果你不知道jquery评论我的视频教程...我有一些jquery的初学者视频教程....

度过愉快的一天!!!!!

答案 5 :(得分:0)

当你知道如何:

时,这很容易
<?php
   echo 'A sms will be sent!';

   fastcgi_finish_request();

// Put all your time consuming code here!

?>