比如有一个php文件a.php,它大概要2分钟才能执行完,有没有一个函数,可以让这个文件执行,不等它执行完呢?就是只要唤醒a.php让它执行就行,主程序立即返回处理别的事情。

解决方案 »

  1.   

    有什么问题吗?a.php 执行 其他事情在b.php...
    打开两个页面不就行了...
      

  2.   

    fsockopen() 函数兴许能解决你的问题
    http://qianxunniao.iteye.com/blog/1243602
      

  3.   

    test 怎么老吃我的回复?
    你也可以用php调用外部命令执行b.php
      

  4.   


    哈哈哈可怜的孩子,我刚还看你的回复在 刷新一下就没了.估计是csdn跟你发的那个地址的网站有过节吧...不知道是不是自动删的.
      

  5.   


    话说,前段时间无意中发现新版个人主页的个人动态存在BUG(输出的帖子标题都没有将html字符转为实体,估计标题中嵌入js脚本都能运行),PM通知管理员,居然到现在还没有修复(半个月都不止了,这效率真没的说)。。
      

  6.   

    就是父程序调用一个php文件,只管调,调完之后父程序继续执行下面的代码,不管被调用文件的死活了,也不等待被调用的文件返回结果什么的。
      

  7.   

    给你个函数,在我多个环境中可用。
    但不保证在你呢环境中有用/**
     * 函数 tenor
     * 功能 启动一个url,但不等待返回
     * 参数 $page,待执行的页面程序
     * 返回 无
     **/
    if(! function_exists('tenor')):
    function tenor($page) {
            $host = $_SERVER["HTTP_HOST"];
            $fp = fsockopen($host, 80, $errno, $errmsg);
            if(!$fp) {
                    echo "$errstr ($errno)<br>\n";
            } else {
                    fputs($fp,"GET /$page HTTP/1.0\nHost: $host\n\n");
                    fclose($fp);//可能需要注释掉该行
            }
    }
    endif;
      

  8.   

    php 是不支持多线程的,更谈不上主线程和子线程了。  不过倒是有办法模拟这个环境,代码如下:
    do {
                             $mrc = curl_multi_exec($mh,$active);
                     } while ($mrc == CURLM_CALL_MULTI_PERFORM);
                     while ($active and $mrc == CURLM_OK) {
                             if (curl_multi_select($mh) != -1) {
                                     do {
                                             $mrc = curl_multi_exec($mh, $active);
                                     } while ($mrc == CURLM_CALL_MULTI_PERFORM);
                             }
                     }
     是通过一个不停执行的循环 模拟的,这个办法要是不行的话  就用系统的计划任务  定时去执行程序吧~
      

  9.   

    to xuzuning,谢谢  我2号试试,KO后就给分啦。to yw5201314,我2号试下您的代码,谢谢。to dream1206  我过该方法,但没成功,2号再试试。另,php5中已经支持多线程了,但我不能用,各位可以研究下,好像是select功能族。
      

  10.   

    这种事还是用C吧, php只是为了Web而活的。。具体程序架构怎么设计还得明确一下功能描述。
      

  11.   

    xuzuning 的测试可用,但稍作解释:/**
     * 函数 tenor()
     * 功能 启动一个url,但不等待返回
     * 参数 $page,待执行的页面程序,去掉主机后的路径,如要执行localhost/a/1.php,那么$page应该为/a/1.php,用$host指定被调用页面所在的主机。
     * 返回 无
     **/function tenor($page) {
            $host = $_SERVER["HTTP_HOST"];
            $fp = fsockopen($host, 80, $errno, $errmsg);
            if(!$fp) {
                    echo "$errstr ($errno)<br>\n";
            } else {
                    fputs($fp,"GET /$page HTTP/1.0\nHost: $host\n\n");
                    fclose($fp);//可能需要注释掉该行
            }
    }测试通过,谢谢各位的帮助,结贴了。