打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
PHP异步非阻塞fsockopen(本地可以非阻塞请求,服务器就一直不执行异步的请求) (未解决)

index.php

    /**     * php异步请求     *     * @param $host string 主机地址     * @param $path string 路径     * @param $param array 请求参数     * @return string     */function asyncRequest($url,$post_data=array(),$cookie=array())    {        $url_arr = parse_url($url);        $port = isset($url_arr['port'])?$url_arr['port']:80;        if($url_arr['scheme'] == 'https'){            $url_arr['host'] = 'ssl://'.$url_arr['host'];        }        $fp = fsockopen($url_arr['host'],$port,$errno,$errstr,30);        if(!$fp) return false;        $getPath = isset($url_arr['path'])?$url_arr['path']:'/index.php';        $getPath .= isset($url_arr['query'])?'?'.$url_arr['query']:'';        $method = 'GET';  //默认get方式        if(!empty($post_data)) $method = 'POST';        $header = "$method  $getPath  HTTP/1.1\r\n";        $header .= "Host: ".$url_arr['host']."\r\n";        if(!empty($cookie)){  //传递cookie信息            $_cookie = strval(NULL);            foreach($cookie AS $k=>$v){                $_cookie .= $k."=".$v.";";            }            $cookie_str = "Cookie:".base64_encode($_cookie)."\r\n";            $header .= $cookie_str;        }        if(!empty($post_data)){  //传递post数据            $_post = array();            foreach($post_data AS $_k=>$_v){                $_post[] = $_k."=".urlencode($_v);            }            $_post = implode('&', $_post);            $post_str = "Content-Type:application/x-www-form-urlencoded; charset=UTF-8\r\n";            $post_str .= "Content-Length: ".strlen($_post)."\r\n";  //数据长度            $post_str .= "Connection:Close\r\n\r\n";            $post_str .= $_post;  //传递post数据            $header .= $post_str;        }else{            $header .= "Connection:Close\r\n\r\n";        }        fwrite($fp, $header);        usleep(1000); // 这一句也是关键,如果没有这延时,可能在nginx服务器上就无法执行成功        fclose($fp);        return true;    }        //$url = 'http://xxx.com/1.php';        $url = 'http://localhost/1.php';        $res = asyncRequest($url);        var_dump($res);        echo "我没有等a站点返回值,我就执行了";

1.php

sleep(3);file_put_contents("1234.txt",time(),FILE_APPEND);

 

这段代码:

本地不用等待,并且1.php可以请求带 (本地环境win7 php7.1.13和apache)

但是放到服务端:不用等待,但是1.php不能被请求到。(服务器环境win2016 php7.1.13和apache,宝塔集成的环境)

 

奇怪的是,本地如果请求服务器需要等待的1.php,同样请求不到.

 

 

 

 

查的一些参考:

https://blog.csdn.net/weixin_33690367/article/details/91689736

https://zhidao.baidu.com/question/2267107086723350868.html

https://segmentfault.com/q/1010000012574466/a-1020000012583303

 

来源:https://www.icode9.com/content-1-509851.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
php 异步调用方法示例
ajax最好的两个分页类
PHP开发api接口安全验证
史上最详细的ajax教程(一),不容错过
基于curl的php多线程类(异步请求)
php 自动提交表单
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服