ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

PHP 实现关闭浏览器 仍后台运行PHP脚本效果

2022-05-24 17:32:16  阅读:193  来源: 互联网

标签:code 浏览器 header json test 后台 array PHP data


工作繁忙,废话少说!直接上代码!

 

使用:

// 返回前的处理代码
$res = '查询中...请稍后';
$code=1;
if(file_exists('test.json')){
    $res=file_get_contents('test.json');
    unlink('test.json');
    $code=0;
    return $res;
}
$data = '123456';
backstage_job($data); //调用转如后台函数

 

 

function backstage_job($data){
    /**************** 1 返回给前端结果以前的操做 ****************/

      // ---->如果返回前的处理代码较多,还是推荐放在方法外<----

    /**************** 2 告诉前端结果,告诉浏览器操做成功,但继续运行php ****************/
    ob_end_clean();
    ob_start();
    //Windows服务器须要加上这行。
    echo str_repeat(" ",4096);//windows
    // echo str_repeat(' ', 65536); //linux
    //-----------------------------------------------------------------------------------
    _ajaxReturntwo(200,'操做成功',$data);//返回结果给ajax
    //-----------------------------------------------------------------------------------
    $size = ob_get_length();

    header("Content-Length: ".$size);
    header("Connection: close");
    header("HTTP/1.1 200 OK");
    header('Content-Type:application/json; charset=utf-8');
    ob_end_flush();
    if(ob_get_length())
    ob_flush();
    flush();
    if (function_exists("fastcgi_finish_request")) { // yii或yaf默认不会当即输出,加上此句便可(前提是用的fpm)
        fastcgi_finish_request(); // 响应完成, 当即返回到前端,关闭链接
    }

    ignore_user_abort(true);//在关闭链接后,继续运行php脚本
    set_time_limit(70); //no time limit,不设置超时时间(根据实际状况使用)(或者设置为0 ,意为不限超时 时间)
    /**************** 2 告诉前端结果,告诉浏览器完成,但继续运行php ****************/


    /**************** 3 继续运行php ****************/
    sleep(10);
    /*
      休眠PHP,也就是当前PHP代码的执行中止,10秒钟后PHP被唤醒,
      PHP唤醒后,继续执行下面的代码,但这个时候上面代码的结果已经输出浏览器了,
      也就是浏览器从HTTP头中知道了服务端关闭了链接,浏览器将不在等待服务器的响应,
      反应给客户的就是页面不会显示处于加载状态,换句话说用户能够关掉当前页面,或者关掉浏览器,
      PHP唤醒后继续执行下面的代码,这也就实现了PHP后台执行的效果,
      休眠的做用只是让php先把前面的输出做完,不要急于立刻执行下面的代码,休息一下而已,也就是说下面的代码
      执行的时候前面的输出应该到达浏览器了
    */
    // .......继续写你功能的逻辑

    echo "可惜,代码走到这里,‘我’输出的这句话。已经不能在客户端/浏览器被看到了~"."<br>".'所以这里的输出将无意义!';

    for ($i=0; $i < 5; $i++) { 
      $str='现在用户已经关闭了浏览器或者脚本程序!'.'但是依旧不影响“我”继续在这里,向test.txt文件写入内容哦!'."<br>";
      file_put_contents('test.txt',$str,FILE_APPEND);
      sleep(10);
    }
    
    exit;
}
function _ajaxReturntwo($code, $msg, $data=array()) { // $data = is_null($data) ? array() : $data; $data = $data ?? array(); $data = array( "code" => $code, "msg" => $msg, "data" => json_encode($data) ); header('Cache-Control:no-cache,must-revalidate'); header('Pragma:no-cache'); header('Content-Type:application/json; charset=utf-8'); header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Headers:x-requested-with,content-type"); return json_encode($data); }

 

如果对你有帮助,记得点个赞吧!

 

标签:code,浏览器,header,json,test,后台,array,PHP,data
来源: https://www.cnblogs.com/mangofish/p/16306328.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有