例如两个PHP文件A和B,我想在A执行的过程中给B传输数据并让B在后台执行,B执行的时候比较长,而且B所做的后续操作与A无关,所以让A继续执行后面的语句无需等待B结束,请问该如何实现?注:我使用的是Windows服务器

解决方案 »

  1.   

    明白你的表述了.你这种想法可能在php上难到找解决方案.
      

  2.   

    可使用这个函数
    /**
     * 函数 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;
      

  3.   

    参数还是大量的数据呢?你要两个页面都独立起来,那要一次性把数据传过去。用ajax实现好了,这样相互独立。
      

  4.   

    请问启动这个url是在后台执行的吗?而且当包含这段代码的脚本结束会怎样?还有怎么给这个page传输数据?
      

  5.   

    传输一段文字,另外只用PHP实在的话该怎么做?能否说详细点?
      

  6.   

    在a页面加入 system('php B.php');
      

  7.   

    在后台执行,也就是cli模式。去php安装目录找到php.exe这个文件,并且在命令行下执行它。具体方法去查手册或google:php cli模式。
    不过你说的这个需求,用不用cli模式都无所谓。其实这只是个异步请求而已。
    你说的A脚本在执行过程中给B脚本传输数据。其实可以使用http协议,然后POST或者GET参数来达到传数据的目的。5楼给你的那个函数,其实就是放在A脚本中用来通过HTTP协议请求B脚本的一个函数。你可以在B文件中直接使用$HTTP_GET_VARS或$HTTP_POST_VARS来得到A脚本传过去的数据。另外还可以使用CURL库来实现这种模拟http请求。
      

  8.   

    在a页面加入 system('php B.php');这种方法也可以。可以通过加入命令行参数来达到像B脚本传数据的需求。具体请去google:php cli 命令行参数。但是注意php比不了那些底层语言,不同进程间无法互相访问,因为它们的内存不共享,php没有像"令牌"那种东西。所以不能直接通过A脚本运行的内存去访问B脚本所运行的内存。
      

  9.   

    如果数据量很少,你可以直接通过http或命令行参数传给B。
    如果数据量比较大,你可以通过第三方媒体传给B。比如当A运行后,可以先把数据存储到文件里或数据库,同时通知B可以去文件或数据库去取数据了。