php fsockopen实现异步

直接上代码:(fsockopenDemo.php与test.php在同一目录,test.php测试是否调用)

<?php
//实现fsockopen异步 必须开启php.ini中allow_url_fopen = on 同时要支持php_openssl(如果没有该扩展先生成扩展后再使用)
$data = array(
    'orderid' => 1,
    'test' => 'aa',
    'aa' => '测试',
    'data' => array('test1' => 2),
);
sock_get('http://localhost/test.php',$data);
/** 实现GET异步
 * @param $url
 * @param $data
 */
function sock_get($url, $data)
{
    $dataStr = http_build_query($data);
    $info = parse_url($url);
    $fp = fsockopen($info["host"], 80, $errno, $errstr, 3);
    //$head = "GET ".$info['path']."? HTTP/1.0\r\n";
    $head = "GET ".$info['path']."?".$dataStr." HTTP/1.0\r\n";
    $head .= "Host: ".$info['host']."\r\n";
    $head .= "\r\n";
    $write = fputs($fp, $head);
    usleep(1);//延时一毫秒
    fclose($fp);
    echo "get success";
}
sock_post('http://localhost/test.php',$data);
/**
 * fsockopen 实现POST异步
 * @param string $url
 * @param array $data
 */
function sock_post($url, $data)
{
    $info = parse_url($url);
    $dataStr = http_build_query($data);
    $fp = fsockopen($info["host"], 80, $errno, $errstr, 3);
    $head = "POST ".$info['path']."? HTTP/1.0\r\n";
    $head .= "Host: ".$info['host']."\r\n";
    $head .= "Referer: http://".$info['host'].$info['path']."\r\n";
    $head .= "Content-type: application/x-www-form-urlencoded\r\n";
    $head .= "Content-Length: ".strlen(trim($dataStr))."\r\n";
    $head .= "\r\n";
    $head .= trim($dataStr);
    $write = fputs($fp, $head);
    usleep(1);//延时一毫秒
    fclose($fp);
    echo "post success";
}

test.php

<?php
sleep(3);//延时3秒后写入日志
file_put_contents("./test.log", "[".date('Y-m-d H:i:s')."]"."写入成功!"."提交方式:".$_SERVER['REQUEST_METHOD'].PHP_EOL.var_export($_REQUEST,true).PHP_EOL,FILE_APPEND);


喜欢(0)

评论 抢沙发

表情