<?php
namespace Index\Controller;
use Core\Controller;
class test extends Controller
{
public function test11()
{
sleep(5);
file_put_contents( './123.log', "123\r\n" , FILE_APPEND );
}
public function test12()
{
$url = 'http://127.0.0.1:1001/index/test/test11';
$res = self::asyncRequest($url);
echo "我沒有等a站點返回值,我就執行了";
}
/**
* php異步請求
*
* @param $host string 主機地址
* @param $path string 路徑
* @param $param array 請求參數
* @return string
*/
public static 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;
}
}