php多线程编程代码实例

      这里所谓的多线程,指的是在不影响正常程序的基础上,可以同时访问其他的链接或者命令, 执行其他的程序。这里仅仅是记录一下相关的代码。

1、popen方式

    /*
 * popend的方式
 * */
    public function popenDownload($url)
    {
        $pageURL = 'http';
        if ( isset($_SERVER['HTTPS']) && $_SERVER["HTTPS"] == "on")
        {
            $pageURL .= "s";
        }
        $pageURL .= "://";
        if ($_SERVER["SERVER_PORT"] != "80")
        {
            $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] .$url;
        }
        else
        {
            $pageURL .= $_SERVER["SERVER_NAME"] . $url;
        }
        pclose(popen($pageURL.'&', 'r'));
    }

这里需要注意的是,popen的参数应该是命令,可以是命令行之类的。

2、fsockopen方式

 /*
     * fsockopen方法实现异步请求
     * */
    public function fsockopenDownload($url)
    {
        $pageURL = 'http';
        if ( isset($_SERVER['HTTPS']) && $_SERVER["HTTPS"] == "on")
        {
            $pageURL .= "s";
        }
        $pageURL .= "://";
        if ($_SERVER["SERVER_PORT"] != "80")
        {
            $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] .$url;
        }
        else
        {
            $pageURL .= $_SERVER["SERVER_NAME"] . $url;
        }
        $host = parse_url($pageURL,PHP_URL_HOST);
        $port = parse_url($pageURL,PHP_URL_PORT);
        $port = $port ? $port : 80;
        $scheme = parse_url($pageURL,PHP_URL_SCHEME);
        $path = parse_url($pageURL,PHP_URL_PATH);
        $query = parse_url($pageURL,PHP_URL_QUERY);
        if($query) {
            $path .= '?' . $query;
        }
        if($scheme == 'https') {
            $host = 'ssl://'.$host;
        }
        $fp=fsockopen($host,$port,$error,$errorStr,0);
        if(!$fp){
            echo "$errorStr ($error)<br />\n";
        }
        stream_set_blocking($fp,false);//开启了手册上说的非阻塞模式
        stream_set_timeout($fp,1);//设置超时
        $header = "GET $path HTTP/1.1".PHP_EOL;
        $header.="Host:".$host.PHP_EOL;
        $header.="Connection: close".PHP_EOL;//长连接关闭
        fwrite($fp, $header);
        usleep(3000); // 这一句也是关键,如果没有这延时,可能在nginx服务器上就无法执行成功
        fclose($fp);
    }

参考链接:https://www.cnblogs.com/xuey/p/8463009.html

3、经典的curl方式

 /*
     * 封装的curl请求方法
     * */
    public function curl_init($url)
    {
        $pageURL = 'http';
        if ( isset($_SERVER['HTTPS']) && $_SERVER["HTTPS"] == "on")
        {
            $pageURL .= "s";
        }
        $pageURL .= "://";
        if ($_SERVER["SERVER_PORT"] != "80")
        {
            $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] .$url;
        }
        else
        {
            $pageURL .= $_SERVER["SERVER_NAME"] . $url;
        }
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $pageURL);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
        curl_setopt($ch, CURLOPT_TIMEOUT, 1);
        curl_exec($ch);
       // $data = curl_error($ch);
        curl_close($ch);
    }

curl是比较常用的一种方式,可以通过curl_error查看错误,通过curl_getinfo()查看相关信息。

参考链接:https://www.cnblogs.com/beringxue/p/7919110.html

这里只是记录下自己工作上用到的“多线程”请求方式,不一定是正确的,辩证看待。

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铁柱同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值