2015-10-19 13:52:00 3787次浏览 2条回答 0 悬赏 20 金钱

我现在有这样一种需求: 用户点击download按钮,但是由于数据量太大,后台不马上生成数据文件,而是先返回ok, 然后后台进行一系列查询数据生成文件发送邮件的操作.

我知道用mysql生成一个任务表,然后后台用crontab周期访问生成文件的url能够达到想要的效果.

但是我想如果使用PHP多进程能否完成这样的任务?如果可以该如何写?谢谢

  • 回答于 2015-10-19 13:55 举报
    $pid = pcntl_fork();
    //父进程和子进程都会执行下面代码
    if ($pid == -1) {
        //错误处理:创建子进程失败时返回-1.
         die('could not fork');
    } else if ($pid) {
         //父进程会得到子进程号,所以这里是父进程执行的逻辑
         pcntl_wait($status); //等待子进程中断,防止子进程成为僵尸进程。
    } else {
         //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。
    }
    

    详细使用http://www.php.net/manual/zh/function.pcntl-fork.php

    2 条回复
    回复于 2015-10-19 14:00 回复

    谢谢,请问$status是在哪儿定义的?

    回复于 2015-10-19 14:07 回复

    int pcntl_wait ( int &$status [, int $options = 0 ] )

    status
    pcntl_wait()将会存储状态信息到status 参数上,这个通过status参数返回的状态信息可以用以下函数 pcntl_wifexited(), pcntl_wifstopped(), pcntl_wifsignaled(), pcntl_wexitstatus(), pcntl_wtermsig()以及 pcntl_wstopsig()获取其具体的值。

    觉得很赞
  • 回答于 2015-10-19 14:14 举报

    没有必要这么麻烦啊,可以使用Ajax变通的实现.

您需要登录后才可以回答。登录 | 立即注册
yiissy001
总监

yiissy001

注册时间:2013-12-04
最后登录:2017-09-25
在线时长:24小时55分
  • 粉丝7
  • 金钱2529
  • 威望90
  • 积分3669

热门问题