php 异步非阻塞执行,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值