首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

织梦HTTP IMAGE上载类

2012-10-30 
织梦HTTP IMAGE下载类?phpif(!defined(DEDEINC)) exit(Request Error!)/** * 织梦HTTP下载类 * * @v

织梦HTTP IMAGE下载类

<?php   if(!defined('DEDEINC')) exit("Request Error!");/** * 织梦HTTP下载类 * * @version        $Id: dedehttpdown.class.php 1 11:42 2010年7月6日Z tianya $ * @package        DedeCMS.Libraries * @copyright      Copyright (c) 2007 - 2010, DesDev, Inc. * @license        http://help.dedecms.com/usersguide/license.html * @link           http://www.dedecms.com */@set_time_limit(0);class DedeHttpDown{    var $m_url = '';    var $m_urlpath = '';    var $m_scheme = 'http';    var $m_host = '';    var $m_port = '80';    var $m_user = '';    var $m_pass = '';    var $m_path = '/';    var $m_query = '';    var $m_fp = '';    var $m_error = '';    var $m_httphead = '';    var $m_html = '';    var $m_puthead = '';    var $BaseUrlPath = '';    var $HomeUrl = '';    var $reTry = 0;    var $JumpCount = 0;    /**     *  初始化系统     *     * @access    public     * @param     string    $url   需要下载的地址     * @return    string     */    function PrivateInit($url)    {        if($url=='') {            return ;        }        $urls = '';        $urls = @parse_url($url);        $this->m_url = $url;        if(is_array($urls))        {            $this->m_host = $urls["host"];            if(!empty($urls["scheme"]))            {                $this->m_scheme = $urls["scheme"];            }            if(!empty($urls["user"]))            {                $this->m_user = $urls["user"];            }            if(!empty($urls["pass"]))            {                $this->m_pass = $urls["pass"];            }            if(!empty($urls["port"]))            {                $this->m_port = $urls["port"];            }            if(!empty($urls["path"]))            {                $this->m_path = $urls["path"];            }            $this->m_urlpath = $this->m_path;            if(!empty($urls["query"]))            {                $this->m_query = $urls["query"];                $this->m_urlpath .= "?".$this->m_query;            }            $this->HomeUrl = $urls["host"];            $this->BaseUrlPath = $this->HomeUrl.$urls["path"];            $this->BaseUrlPath = preg_replace("/\/([^\/]*)\.(.*)$/","/",$this->BaseUrlPath);            $this->BaseUrlPath = preg_replace("/\/$/","",$this->BaseUrlPath);        }    }    /**     *  重设各参数     *     * @access    public     * @return    void     */    function ResetAny()    {        $this->m_url = "";        $this->m_urlpath = "";        $this->m_scheme = "http";        $this->m_host = "";        $this->m_port = "80";        $this->m_user = "";        $this->m_pass = "";        $this->m_path = "/";        $this->m_query = "";        $this->m_error = "";    }    /**     *  打开指定网址     *     * @access    public     * @param     string    $url   地址     * @param     string    $requestType   请求类型     * @return    string     */    function OpenUrl($url,$requestType="GET")    {        $this->ResetAny();        $this->JumpCount = 0;        $this->m_httphead = Array() ;        $this->m_html = '';        $this->reTry = 0;        $this->Close();        //初始化系统        $this->PrivateInit($url);        $this->PrivateStartSession($requestType);    }    /**     *  转到303重定向网址     *     * @access    public     * @param     string   $url   地址     * @return    string     */    function JumpOpenUrl($url)    {        $this->ResetAny();        $this->JumpCount++;        $this->m_httphead = Array() ;        $this->m_html = "";        $this->Close();        //初始化系统        $this->PrivateInit($url);        $this->PrivateStartSession('GET');    }    /**     *  获得某操作错误的原因     *     * @access    public     * @return    void     */    function printError()    {        echo "错误信息:".$this->m_error;        echo "<br/>具体返回头:<br/>";        foreach($this->m_httphead as $k=>$v){ echo "$k => $v <br/>\r\n"; }    }    /**     *  判别用Get方法发送的头的应答结果是否正确     *     * @access    public     * @return    bool     */    function IsGetOK()    {        if( preg_match("/^2/",$this->GetHead("http-state")) )        {            return TRUE;        }        else        {            $this->m_error .= $this->GetHead("http-state")." - ".$this->GetHead("http-describe")."<br/>";            return FALSE;        }    }    /**     *  看看返回的网页是否是text类型     *     * @access    public     * @return    bool     */    function IsText()    {        if( preg_match("/^2/",$this->GetHead("http-state")) && preg_match("/text|xml/i",$this->GetHead("content-type")) )        {            return TRUE;        }        else        {            $this->m_error .= "内容为非文本类型或网址重定向<br/>";            return FALSE;        }    }    /**     *  判断返回的网页是否是特定的类型     *     * @access    public     * @param     string   $ctype   内容类型     * @return    string     */    function IsContentType($ctype)    {        if(preg_match("/^2/",$this->GetHead("http-state"))        && $this->GetHead("content-type")==strtolower($ctype))        {    return TRUE; }        else        {            $this->m_error .= "类型不对 ".$this->GetHead("content-type")."<br/>";            return FALSE;        }    }    /**     *  用Http协议下载文件     *     * @access    public     * @param     string    $savefilename  保存文件名称     * @return    string     */    function SaveToBin($savefilename)    {        if(!$this->IsGetOK())        {            return FALSE;        }        if(@feof($this->m_fp))        {            $this->m_error = "连接已经关闭!"; return FALSE;        }        $fp = fopen($savefilename,"w");        while(!feof($this->m_fp))        {            fwrite($fp, fread($this->m_fp, 1024));        }        fclose($this->m_fp);        fclose($fp);        return TRUE;    }    /**     *  保存网页内容为Text文件     *     * @access    public     * @param     string    $savefilename  保存文件名称     * @return    string     */    function SaveToText($savefilename)    {        if($this->IsText())        {            $this->SaveBinFile($savefilename);        }        else        {            return "";        }    }    /**     *  用Http协议获得一个网页的内容     *     * @access    public     * @return    string     */    function GetHtml()    {        if(!$this->IsText())        {            return '';        }        if($this->m_html!='')        {            return $this->m_html;        }        if(!$this->m_fp||@feof($this->m_fp))        {            return '';        }        while(!feof($this->m_fp))        {            $this->m_html .= fgets($this->m_fp,256);        }        @fclose($this->m_fp);        return $this->m_html;    }    /**     *  开始HTTP会话     *     * @access    public     * @param     string    $requestType    请求类型     * @return    string     */    function PrivateStartSession($requestType="GET")    {        if(!$this->PrivateOpenHost())        {            $this->m_error .= "打开远程主机出错!";            return FALSE;        }        $this->reTry++;        if($this->GetHead("http-edition")=="HTTP/1.1")        {            $httpv = "HTTP/1.1";        }        else        {            $httpv = "HTTP/1.0";        }        $ps = explode('?',$this->m_urlpath);        $headString = '';        //发送固定的起始请求头GET、Host信息        if($requestType=="GET")        {            $headString .= "GET ".$this->m_urlpath." $httpv\r\n";        }        else        {            $headString .= "POST ".$ps[0]." $httpv\r\n";        }        $this->m_puthead["Host"] = $this->m_host;        //发送用户自定义的请求头        if(!isset($this->m_puthead["Accept"]))        {            $this->m_puthead["Accept"] = "*/*";        }        if(!isset($this->m_puthead["User-Agent"]))        {            $this->m_puthead["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2)";        }        if(!isset($this->m_puthead["Refer"]))        {            $this->m_puthead["Refer"] = "http://".$this->m_puthead["Host"];        }        foreach($this->m_puthead as $k=>$v)        {            $k = trim($k);            $v = trim($v);            if($k!=""&&$v!="")            {                $headString .= "$k: $v\r\n";            }        }        fputs($this->m_fp, $headString);        if($requestType=="POST")        {            $postdata = "";            if(count($ps)>1)            {                for($i=1;$i<count($ps);$i++)                {                    $postdata .= $ps[$i];                }            }            else            {                $postdata = "OK";            }            $plen = strlen($postdata);            fputs($this->m_fp,"Content-Type: application/x-www-form-urlencoded\r\n");            fputs($this->m_fp,"Content-Length: $plen\r\n");        }        //发送固定的结束请求头        //HTTP1.1协议必须指定文档结束后关闭链接,否则读取文档时无法使用feof判断结束        if($httpv=="HTTP/1.1")        {            fputs($this->m_fp,"Connection: Close\r\n\r\n");        }        else        {            fputs($this->m_fp,"\r\n");        }        if($requestType=="POST")        {            fputs($this->m_fp,$postdata);        }        //获取应答头状态信息        $httpstas = explode(" ",fgets($this->m_fp,256));        $this->m_httphead["http-edition"] = trim($httpstas[0]);        $this->m_httphead["http-state"] = trim($httpstas[1]);        $this->m_httphead["http-describe"] = "";        for($i=2;$i<count($httpstas);$i++)        {            $this->m_httphead["http-describe"] .= " ".trim($httpstas[$i]);        }        //获取详细应答头        while(!feof($this->m_fp))        {            $line = trim(fgets($this->m_fp,256));            if($line == "")            {                break;            }            $hkey = "";            $hvalue = "";            $v = 0;            for($i=0;$i<strlen($line);$i++)            {                if($v==1)                {                    $hvalue .= $line[$i];                }                if($line[$i]==":")                {                    $v = 1;                }                if($v==0)                {                    $hkey .= $line[$i];                }            }            $hkey = trim($hkey);            if($hkey!="")            {                $this->m_httphead[strtolower($hkey)] = trim($hvalue);            }        }        //如果连接被不正常关闭,重试        if(feof($this->m_fp))        {            if($this->reTry > 10)            {                return FALSE;            }            $this->PrivateStartSession($requestType);        }        //判断是否是3xx开头的应答        if(preg_match("/^3/",$this->m_httphead["http-state"]))        {            if($this->JumpCount > 3)            {                return;            }            if(isset($this->m_httphead["location"]))            {                $newurl = $this->m_httphead["location"];                if(preg_match("/^http/i",$newurl))                {                    $this->JumpOpenUrl($newurl);                }                else                {                    $newurl = $this->FillUrl($newurl);                    $this->JumpOpenUrl($newurl);                }            }            else            {                $this->m_error = "无法识别的答复!";            }        }    }    /**     *  获得一个Http头的值     *     * @access    public     * @param     string    $headname   头文件名称     * @return    string     */    function GetHead($headname)    {        $headname = strtolower($headname);        return isset($this->m_httphead[$headname]) ? $this->m_httphead[$headname] : '';    }    /**     *  设置Http头的值     *     * @access    public     * @param     string   $skey  键     * @param     string   $svalue  值     * @return    string     */    function SetHead($skey,$svalue)    {        $this->m_puthead[$skey] = $svalue;    }    /**     *  打开连接     *     * @access    public     * @return    bool     */    function PrivateOpenHost()    {        if($this->m_host=="")        {            return FALSE;        }        $errno = "";        $errstr = "";        $this->m_fp = @fsockopen($this->m_host, $this->m_port, $errno, $errstr,10);        if(!$this->m_fp)        {            $this->m_error = $errstr;            return FALSE;        }        else        {            return TRUE;        }    }    /**     *  关闭连接     *     * @access    public     * @return    void     */    function Close()    {        @fclose($this->m_fp);    }    /**     *  补全相对网址     *     * @access    public     * @param     string   $surl  需要不全的地址     * @return    string     */    function FillUrl($surl)    {        $i = 0;        $dstr = "";        $pstr = "";        $okurl = "";        $pathStep = 0;        $surl = trim($surl);        if($surl=="")        {            return "";        }        $pos = strpos($surl,"#");        if($pos>0)        {            $surl = substr($surl,0,$pos);        }        if($surl[0]=="/")        {            $okurl = "http://".$this->HomeUrl.$surl;        }        else if($surl[0]==".")        {            if(strlen($surl)<=1)            {                return "";            }            else if($surl[1]=="/")            {                $okurl = "http://".$this->BaseUrlPath."/".substr($surl,2,strlen($surl)-2);            }            else            {                $urls = explode("/",$surl);                foreach($urls as $u)                {                    if($u=="..")                    {                        $pathStep++;                    }                    else if($i<count($urls)-1)                    {                        $dstr .= $urls[$i]."/";                    }                    else                    {                        $dstr .= $urls[$i];                    }                    $i++;                }                $urls = explode("/",$this->BaseUrlPath);                if(count($urls) <= $pathStep)                {                    return "";                }                else                {                    $pstr = "http://";                    for($i=0;$i<count($urls)-$pathStep;$i++)                    {                        $pstr .= $urls[$i]."/";                    }                    $okurl = $pstr.$dstr;                }            }        }        else        {            if(strlen($surl)<7)            {                $okurl = "http://".$this->BaseUrlPath."/".$surl;            }            else if(strtolower(substr($surl,0,7))=="http://")            {                $okurl = $surl;            }            else            {                $okurl = "http://".$this->BaseUrlPath."/".$surl;            }        }        $okurl = preg_replace("/^(http:\/\/)/i","",$okurl);        $okurl = preg_replace("/\/{1,}/", "/", $okurl);        return "http://".$okurl;    }}//End Class

?

<?php   if(!defined('DEDEINC')) exit('dedecms');/** * 图像处理类 * * @version        $Id: image.class.php 1 18:10 2010年7月5日Z tianya $ * @package        DedeCMS.Libraries * @copyright      Copyright (c) 2007 - 2010, DesDev, Inc. * @license        http://help.dedecms.com/usersguide/license.html * @link           http://www.dedecms.com */class image{    var $attachinfo;    var $targetfile;    //图片路径    var $imagecreatefromfunc;    var $imagefunc;    var $attach;    var $animatedgif;    var $watermarkquality;    var $watermarktext;    var $thumbstatus;    var $watermarkstatus;        // 析构函数,兼容PHP4    function image($targetfile, $cfg_thumb, $cfg_watermarktext, $photo_waterpos, $photo_diaphaneity, $photo_wheight, $photo_wwidth, $cfg_watermarktype, $photo_marktrans,$trueMarkimg, $attach = array())    {        $this->__construct($targetfile, $cfg_thumb, $cfg_watermarktext, $photo_waterpos, $photo_diaphaneity, $photo_wheight, $photo_wwidth, $cfg_watermarktype, $photo_marktrans,$trueMarkimg, $attach);    }    // 析构函数    function __construct($targetfile, $cfg_thumb, $cfg_watermarktext, $photo_waterpos, $photo_diaphaneity, $photo_wheight, $photo_wwidth, $cfg_watermarktype, $photo_marktrans,$trueMarkimg, $attach = array())    {        $this->thumbstatus = $cfg_thumb;        $this->watermarktext = $cfg_watermarktext;        $this->watermarkstatus = $photo_waterpos;        $this->watermarkquality = $photo_marktrans;        $this->watermarkminwidth = $photo_wwidth;        $this->watermarkminheight = $photo_wheight;        $this->watermarktype = $cfg_watermarktype;        $this->watermarktrans = $photo_diaphaneity;        $this->animatedgif = 0;        $this->targetfile = $targetfile;        $this->attachinfo = @getimagesize($targetfile);        $this->attach = $attach;        switch($this->attachinfo['mime'])        {            case 'image/jpeg':                $this->imagecreatefromfunc = function_exists('imagecreatefromjpeg') ? 'imagecreatefromjpeg' : '';                $this->imagefunc = function_exists('imagejpeg') ? 'imagejpeg' : '';                break;            case 'image/gif':                $this->imagecreatefromfunc = function_exists('imagecreatefromgif') ? 'imagecreatefromgif' : '';                $this->imagefunc = function_exists('imagegif') ? 'imagegif' : '';                break;            case 'image/png':                $this->imagecreatefromfunc = function_exists('imagecreatefrompng') ? 'imagecreatefrompng' : '';                $this->imagefunc = function_exists('imagepng') ? 'imagepng' : '';                break;        }//为空则匹配类型的函数不存在        $this->attach['size'] = empty($this->attach['size']) ? @filesize($targetfile) : $this->attach['size'];        if($this->attachinfo['mime'] == 'image/gif')        {            $fp = fopen($targetfile, 'rb');            $targetfilecontent = fread($fp, $this->attach['size']);            fclose($fp);            $this->animatedgif = strpos($targetfilecontent, 'NETSCAPE2.0') === false ? 0 : 1;        }    }    /**     *  生成缩略图     *     * @access    public     * @param     int  $thumbwidth  图片宽度     * @param     int  $thumbheight  图片高度     * @param     int  $preview  是否预览     * @return    void     */    function thumb($thumbwidth, $thumbheight, $preview = 0)    {        $this->thumb_gd($thumbwidth, $thumbheight, $preview);        if($this->thumbstatus == 2 && $this->watermarkstatus)        {            $this->image($this->targetfile, $this->attach);            $this->attach['size'] = filesize($this->targetfile);        }    }    /**     *  图片水印     *     * @access    public     * @param     int   $preview  是否预览     * @return    void     */    function watermark($preview = 0)    {        if($this->watermarkminwidth && $this->attachinfo[0] <= $this->watermarkminwidth && $this->watermarkminheight && $this->attachinfo[1] <= $this->watermarkminheight)        {            return ;        }        $this->watermark_gd($preview);    }    /**     *  使用gd生成缩略图     *     * @access    public     * @param     int  $thumbwidth  图片宽度     * @param     int  $thumbheight  图片高度     * @param     int  $preview  是否预览     * @return    void     */    function thumb_gd($thumbwidth, $thumbheight, $preview = 0)    {        if($this->thumbstatus && function_exists('imagecreatetruecolor') && function_exists('imagecopyresampled') && function_exists('imagejpeg'))        {            $imagecreatefromfunc = $this->imagecreatefromfunc;            $imagefunc = $this->thumbstatus == 1 ? 'imagejpeg' : $this->imagefunc;            list($imagewidth, $imageheight) = $this->attachinfo;            if(!$this->animatedgif && ($imagewidth >= $thumbwidth || $imageheight >= $thumbheight))            {                $attach_photo = $imagecreatefromfunc($this->targetfile);                $x_ratio = $thumbwidth / $imagewidth;                $y_ratio = $thumbheight / $imageheight;                if(($x_ratio * $imageheight) < $thumbheight)                {                    $thumb['height'] = ceil($x_ratio * $imageheight);                    $thumb['width'] = $thumbwidth;                }                else                {                    $thumb['width'] = ceil($y_ratio * $imagewidth);                    $thumb['height'] = $thumbheight;                }                $targetfile = !$preview ? ($this->thumbstatus == 1 ? $this->targetfile.'.thumb.jpg' : $this->targetfile) : './watermark_tmp.jpg';                $thumb_photo = imagecreatetruecolor($thumb['width'], $thumb['height']);                imagecopyresampled($thumb_photo, $attach_photo, 0, 0, 0, 0, $thumb['width'], $thumb['height'], $imagewidth, $imageheight);                if($this->attachinfo['mime'] == 'image/jpeg')                {                    $imagefunc($thumb_photo, $targetfile, 100);                }                else                {                    $imagefunc($thumb_photo, $targetfile);                }                $this->attach['thumb'] = $this->thumbstatus == 1 ? 1 : 0;            }        }    }    /**     *  使用gd进行水印     *     * @access    public     * @param     int   $preview  是否预览     * @return    void     */    function watermark_gd($preview = 0)    {        if($this->watermarkstatus && function_exists('imagecopy') && function_exists('imagealphablending') && function_exists('imagecopymerge'))        {            $imagecreatefunc = $this->imagecreatefromfunc;            $imagefunc = $this->imagefunc;            list($imagewidth, $imageheight) = $this->attachinfo;            if($this->watermarktype < 2)            {                $watermark_file = $this->watermarktype == 1 ? DEDEDATA.'/mark/mark.png' : DEDEDATA.'/mark/mark.gif';                $watermarkinfo = @getimagesize($watermark_file);                $watermark_logo = $this->watermarktype == 1 ? @imagecreatefrompng($watermark_file) : @imagecreatefromgif($watermark_file);                if(!$watermark_logo)                {                    return ;                }                list($logowidth, $logoheight) = $watermarkinfo;            }            else            {                $box = @imagettfbbox($this->watermarktext['size'], $this->watermarktext['angle'], $this->watermarktext['fontpath'],$this->watermarktext['text']);                $logowidth = max($box[2], $box[4]) - min($box[0], $box[6]);                $logoheight = max($box[1], $box[3]) - min($box[5], $box[7]);                $ax = min($box[0], $box[6]) * -1;                $ay = min($box[5], $box[7]) * -1;            }            $wmwidth = $imagewidth - $logowidth;            $wmheight = $imageheight - $logoheight;            if(($this->watermarktype < 2 && is_readable($watermark_file) || $this->watermarktype == 2) && $wmwidth > 10 && $wmheight > 10 && !$this->animatedgif)            {                switch($this->watermarkstatus)                {                    case 1:                        $x = +5;                        $y = +5;                        break;                    case 2:                        $x = ($imagewidth - $logowidth) / 2;                        $y = +5;                        break;                    case 3:                        $x = $imagewidth - $logowidth - 5;                        $y = +5;                        break;                    case 4:                        $x = +5;                        $y = ($imageheight - $logoheight) / 2;                        break;                    case 5:                        $x = ($imagewidth - $logowidth) / 2;                        $y = ($imageheight - $logoheight) / 2;                        break;                    case 6:                        $x = $imagewidth - $logowidth - 5;                        $y = ($imageheight - $logoheight) / 2;                        break;                    case 7:                        $x = +5;                        $y = $imageheight - $logoheight - 5;                        break;                    case 8:                        $x = ($imagewidth - $logowidth) / 2;                        $y = $imageheight - $logoheight - 5;                        break;                    case 9:                        $x = $imagewidth - $logowidth - 5;                        $y = $imageheight - $logoheight -5;                        break;                }                $dst_photo = @imagecreatetruecolor($imagewidth, $imageheight);                $target_photo = $imagecreatefunc($this->targetfile);                imagecopy($dst_photo, $target_photo, 0, 0, 0, 0, $imagewidth, $imageheight);                if($this->watermarktype == 1)                {                    imagecopy($dst_photo, $watermark_logo, $x, $y, 0, 0, $logowidth, $logoheight);                }                elseif($this->watermarktype == 2)                {                    if(($this->watermarktext['shadowx'] || $this->watermarktext['shadowy']) && $this->watermarktext['shadowcolor'])                    {                        $shadowcolorrgb = explode(',', $this->watermarktext['shadowcolor']);                        $shadowcolor = imagecolorallocate($dst_photo, $shadowcolorrgb[0], $shadowcolorrgb[1], $shadowcolorrgb[2]);                        imagettftext($dst_photo, $this->watermarktext['size'], $this->watermarktext['angle'],                        $x + $ax + $this->watermarktext['shadowx'], $y + $ay + $this->watermarktext['shadowy'], $shadowcolor,                        $this->watermarktext['fontpath'], $this->watermarktext['text']);                    }                    $colorrgb = explode(',', $this->watermarktext['color']);                    $color = imagecolorallocate($dst_photo, $colorrgb[0], $colorrgb[1], $colorrgb[2]);                    imagettftext($dst_photo, $this->watermarktext['size'], $this->watermarktext['angle'],                    $x + $ax, $y + $ay, $color, $this->watermarktext['fontpath'], $this->watermarktext['text']);                }                else                {                    imagealphablending($watermark_logo, true);                    imagecopymerge($dst_photo, $watermark_logo, $x, $y, 0, 0, $logowidth, $logoheight, $this->watermarktrans);                }                $targetfile = !$preview ? $this->targetfile : './watermark_tmp.jpg';                if($this->attachinfo['mime'] == 'image/jpeg')                {                    $imagefunc($dst_photo, $targetfile, $this->watermarkquality);                }                else                {                    $imagefunc($dst_photo, $targetfile);                }                $this->attach['size'] = filesize($this->targetfile);            }        }    }}//End Class

?

热点排行