zoukankan      html  css  js  c++  java
  • php获取远程图片的两种:CURL方式和sockets方式获取远程图片

    php获取远程图片的两种:CURL方式和sockets方式获取远程图片

    方式1:sockets

    $a = "http://yi1.com.cn/content/uploadfile/201106/thum-f3ccdd27d2000e3f9255a7e3e2c4880020110622095243.jpg";

    $local = 'socket1.gif';

    $aa = getImg($a,$local);

    /*
      *@ 完整的图片地址
      *@ 要存储的文件名
     
    */
    function getImg( $url = "", $filename = "" ) {
        if(is_dir(basename($filename))) {
            echo "The Dir was not exits";
            Return false;
        }
        //去除URL连接上面可能的引号
        $url = preg_replace( '/(?:^[\'"]+|[\'"\/]+$)/', '', $url );
        if (!extension_loaded('sockets')) return false;
        //获取url各相关信息
        preg_match( '/http:\/\/([^\/\:]+(\:\d{1,5})?)(.*)/i', $url$matches );
        if (!$matchesreturn false;
        $sock = socket_create( AF_INET, SOCK_STREAM, SOL_TCP );
        if ( !@socket_connect( $sock$matches[1], $matches[2] ? substr($matches[2], 1 ) : 80 ) ) {
            return false;
        }
        //图片的相对地址
        $msg = 'GET ' . $matches[3] . " HTTP/1.1\r\n";
        //主机名称
        $msg .= 'Host: ' . $matches[1] . "\r\n";
        $msg .= 'Connection: Close' . "\r\n\r\n";
        socket_write( $sock$msg );
        $bin = '';
        while ( $tmp = socket_read( $sock, 10 ) ) {
            $bin .= $tmp;
            $tmp = '';
        }
        $bin = explode("\r\n\r\n", $bin);
        $img = $bin[1];
        $h = fopen$filename, 'wb' );
        $res = fwrite$h$img ) === false ? false : true;
        @socket_close( $sock );
        Return $res;
    }

    ///////////////////////////////////////////////////////////////////////

    来源:http://yi1.com.cn

    方式2:curl

    <?php

    $url = "http://yi1.com.cn/content/uploadfile/201106/thum-f3ccdd27d2000e3f9255a7e3e2c4880020110622095243.jpg";

    $filename = 'curl.gif';
    //http://yi1.com.cn

    getImg($url$filename);
    /*
      *@通过curl方式获取制定的图片到本地
      *@ 完整的图片地址
      *@ 要存储的文件名
     
    */
    function getImg($url = "", $filename = "") {
        if(is_dir(basename($filename))) {
            echo "The Dir was not exits";
            Return false;
        }
        //去除URL连接上面可能的引号
        $url = preg_replace( '/(?:^[\'"]+|[\'"\/]+$)/', '', $url );

        $hander = curl_init();
        $fp = fopen($filename,'wb');

        curl_setopt($hander,CURLOPT_URL,$url);
        curl_setopt($hander,CURLOPT_FILE,$fp);
        curl_setopt($hander,CURLOPT_HEADER,0);
        curl_setopt($hander,CURLOPT_FOLLOWLOCATION,1);
        //curl_setopt($hander,CURLOPT_RETURNTRANSFER,false);//以数据流的方式返回数据,当为false是直接显示出来
        curl_setopt($hander,CURLOPT_TIMEOUT,60);

        /*$options = array(
            CURLOPT_URL=> 'http://yi1.com.cn/content/uploadfile/201106/thum-f3ccdd27d2000e3f9255a7e3e2c4880020110622095243.jpg',
            CURLOPT_FILE => $fp,
            CURLOPT_HEADER => 0,
            CURLOPT_FOLLOWLOCATION => 1,
            CURLOPT_TIMEOUT => 60
        );
        curl_setopt_array($hander, $options);
        
    */

        curl_exec($hander);
        curl_close($hander);
        fclose($fp);
        Return true;
    }

    ?>

    原文:http://yi1.com.cn/posts/473
  • 相关阅读:
    suse12安装详解
    Centos7上部署openstack mitaka配置详解(将疑难点都进行划分)
    菜鸟帮你跳过openstack配置过程中的坑[文末新添加福利]
    openstack中dashboard页面RuntimeError: Unable to create a new session key. It is likely that the cache is unavailable.
    Multiple network matches found for name 'selfservice', use an ID to be more specific.报错
    查看 SELinux状态及关闭SELinux
    SELinux深入理解
    IP地址、子网掩码、网络号、主机号、网络地址、主机地址
    Oracle job procedure 存储过程定时任务
    POI文件导出至EXCEL,并弹出下载框
  • 原文地址:https://www.cnblogs.com/jincon/p/2238982.html
Copyright © 2011-2022 走看看