102 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			102 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
<?php
 | 
						||
 | 
						||
/**
 | 
						||
 * 异步 执行程序
 | 
						||
 * param string $path 异步url 地址
 | 
						||
 * param array $postData 传递的参数
 | 
						||
 * param string $method 请求方式
 | 
						||
 * param string $url 请求地址
 | 
						||
 * return bool
 | 
						||
 */
 | 
						||
function request_asynchronous($path, $method = "POST", $postData = array(), $url = '')
 | 
						||
{
 | 
						||
    if (empty($path)) {
 | 
						||
        return false;
 | 
						||
    }
 | 
						||
 | 
						||
    if ($url) {
 | 
						||
        $matches = parse_url($url);
 | 
						||
        $host = $matches['host'];
 | 
						||
        //$path = $matches['path'] ? $matches['path'] . ($matches['query'] ? '?' . $matches['query'] : '') : '/';
 | 
						||
        if ($matches['scheme'] == 'https') { //判断是否使用HTTPS
 | 
						||
            $transports = 'ssl://';  //如使用HTTPS则使用SSL协议
 | 
						||
            $port = !empty($matches['port']) ? $matches['port'] : 443; //如使用HTTPS端口使用443
 | 
						||
        } else {
 | 
						||
            $transports = 'tcp://'; //如没有使用HTTPS则使用tcp协议
 | 
						||
            $port = !empty($matches['port']) ? $matches['port'] : 80; //如没有使用HTTPS则使用80端口
 | 
						||
        }
 | 
						||
    } else {
 | 
						||
        $port = 443;
 | 
						||
        $transports = 'ssl://';
 | 
						||
        $host = $_SERVER['HTTP_HOST'];
 | 
						||
    }
 | 
						||
 | 
						||
    $errNo = 0;
 | 
						||
    $errStr = '';
 | 
						||
    $timeout = 60;
 | 
						||
    $fp = '';
 | 
						||
    if (function_exists('fsockopen')) {
 | 
						||
        $fp = fsockopen(($transports . $host), $port, $errno, $errStr, $timeout);
 | 
						||
    } elseif (function_exists('pfsockopen')) {
 | 
						||
        $fp = pfsockopen($transports . $host, $port, $errNo, $errStr, $timeout);
 | 
						||
    } elseif (function_exists('stream_socket_client')) {
 | 
						||
        $fp = stream_socket_client($transports . $host . ':' . $port, $errNo, $errStr, $timeout);
 | 
						||
    }
 | 
						||
 | 
						||
    if (!$fp) {
 | 
						||
        return false;
 | 
						||
    }
 | 
						||
 | 
						||
    stream_set_blocking($fp, 0); //开启非阻塞模式
 | 
						||
    stream_set_timeout($fp,  3); //设置超时时间(s)
 | 
						||
 | 
						||
    $date = [];
 | 
						||
    if ($postData) {
 | 
						||
        //处理文件
 | 
						||
        foreach ($postData as $key => $value) {
 | 
						||
            if (is_array($value)) {
 | 
						||
                $date[$key] = serialize($value);
 | 
						||
            } else {
 | 
						||
                $date[$key] = $value;
 | 
						||
            }
 | 
						||
        }
 | 
						||
    }
 | 
						||
 | 
						||
    if ($method == "GET") {
 | 
						||
        $query = $date ? http_build_query($date) : '';
 | 
						||
        $path .= "?" . $query;
 | 
						||
    } else {
 | 
						||
        $query = json_encode($date);
 | 
						||
    }
 | 
						||
 | 
						||
    //http消息头
 | 
						||
    $out = $method . " " . $path . " HTTP/1.1\r\n";
 | 
						||
    $out .= "HOST: " . $host . "\r\n";
 | 
						||
    if ($method == "POST") {
 | 
						||
        $out .= "Content-Length:" . strlen($query) . "\r\n";
 | 
						||
    }
 | 
						||
    $out .= "Accept: application/json, text/plain, */*\r\n";
 | 
						||
    $out .= "Access-Control-Allow-Credentials: true\r\n";
 | 
						||
    $out .= "Content-Type: application/x-www-form-urlencoded\r\n";
 | 
						||
    $out .= "Connection: Close\r\n\r\n";
 | 
						||
    if ($method == "POST") {
 | 
						||
        $out .= $query;
 | 
						||
    }
 | 
						||
 | 
						||
    fputs($fp, $out);
 | 
						||
    usleep(20000);
 | 
						||
    //忽略执行结果
 | 
						||
    /*while (!feof($fp)) {
 | 
						||
        echo fgets($fp, 128);
 | 
						||
    }*/
 | 
						||
    fclose($fp);
 | 
						||
 | 
						||
    return true;
 | 
						||
}
 | 
						||
/*
 | 
						||
$p = array(
 | 
						||
    'test'=>1222,
 | 
						||
    'test1'=>2222,
 | 
						||
    );
 | 
						||
var_dump(request_asynchronous('/test.php', 'GET', $p, 'https://png.cm'));
 | 
						||
*/ |