PHP上传网络图片实现

功能截图:

实现思路:首先要对用户输入的URL进行快速的合法性判断,包括文件大小,文件类型等。然后再下载,再进行后处理等。

实现1、首先不下载,快速判断文件类型与文件大小

      //get image size  and MIME type added by chenming 2012-7-20

     function getFileSizeAndType($url){

        $result = array();

        $url = parse_url( $url);

        if($fp = @fsockopen($url[ 'host'],empty($url['port' ])?80: $url['port'],$error)){

               fputs($fp,"GET " .(empty( $url['path'])? ‘/’:$url[ 'path'])." HTTP/1.1\r\n");

               fputs($fp,"Host: $url[host] \r\n\r\n");

               while(!feof ($fp)){

                     $tmp = fgets($fp);

                      if(trim($tmp) == ”){

                            break;

                     } else if(preg_match (‘/Content-Length:(.*)/si’,$tmp,$arr)){

                           $result[ 'size'] = trim($arr[ 1]);

                     } else if(preg_match (‘/Content-Type:(.*)/si’, $tmp, $arr)){

                           $result[ 'type'] = trim($arr[ 1]);

                     }

                      if(count($result) == 2){

                            return $result;

                     }

              }

               return null;

       } else{

               return null;

       }

     }

第2、以上类型与大小都检查通过后,再下载文件

      /*

      * 下载图片 ,并获取类型, added by chenming 2012-7-19

      * */

      function getRemoteContentType($remoteFile){

             # the request

            $ch = curl_init($remoteFile);

             curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

            $data = curl_exec($ch);

             # get the content type

            $info = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);

             return array(‘data’ =>$data, ‘type’=>$info);

     }

第3、对图片大小进行处理,获取刚下载图片大小的方法

     $datainfo = $this-> getRemoteContentType ($url);  //下载内容并找出MIME类型

     $file = $datainfo[ 'data'];

     $img = imagecreatefromstring($datainfo['data' ]);

     $img_width = imagesx($img);

     $img_height = imagesy($img);