ecshop百度编辑器远程下载无后缀的图片,并且加水印

<?php
    /**
     * Created by JetBrains PhpStorm.
     * User: taoqili
     * Date: 11-12-28
     * Time: 上午9:54
     * To change this template use File | Settings | File Templates.
     */
    header("Content-Type: text/html; charset=utf-8");
    error_reporting(E_ERROR|E_WARNING);
    //远程抓取图片配置
    $config = array(
        "savePath" => "../../../bdimages/upload1/" ,            //保存路径
        "allowFiles" => array( ".gif" , ".png" , ".jpg" , ".jpeg" , ".bmp" ) , //文件允许格式
        "maxSize" => 3000                    //文件大小限制,单位KB
    );
    $uri = htmlspecialchars( $_POST[ 'upfile' ] );
    $uri = str_replace( "&amp;" , "&" , $uri );
    getRemoteImage( $uri,$config );

    /**
     * 远程抓取
     * @param $uri
     * @param $config
     */
    function getRemoteImage( $uri,$config)
    {
        $tempimgUrl= '';
        //忽略抓取时间限制
        set_time_limit( 0 ); 
        //ue_separate_ue  ue用于传递数据分割符号
        $imgUrls = explode( "ue_separate_ue" , $uri );
        $tmpNames = array();
        foreach ( $imgUrls as $imgUrl ) {  
            //http开头验证
            if(strpos($imgUrl,"http")!==0){
                array_push( $tmpNames , "error" );
                continue;
            }
            //获取请求头
            $heads = get_headers( $imgUrl );
            //死链检测
            if ( !( stristr( $heads[ 0 ] , "200" ) && stristr( $heads[ 0 ] , "OK" ) ) ) {
                array_push( $tmpNames , "error" );
                continue;
            }
             
            
            //格式验证(扩展名验证和Content-Type验证)
            $ext = strtolower( strrchr( $imgUrl , '.' ) );
            //当文件后缀不能存,并且是图片类型的,自动添加文件后缀
            $imgAttr = get_headers( $imgUrl, true );
            $imgtype = array('image/png', 'image/jpeg', 'image/gif');
            
            if( !in_array( $ext, $config[ 'allowFiles' ] ) && in_array($imgAttr['Content-Type'],  $imgtype)){ 

                switch( $imgAttr['Content-Type'] )
                {
                    case 'image/png' :
                        $ext = '.png';
                        break;
                    case 'image/jpeg' :
                        $ext = '.jpg';
                        break;
                    case 'image/gif' :
                        $ext = '.gif';
                        break;
                    default:
                        $ext = '.jpg';
                }
                
                //读取远程无后缀的图片内容
                $tempimgUrl = @file_get_contents( $imgUrl);
                $imgUrl = $imgUrl.$ext;
            }


            
            $fileType = $ext;
            if ( !in_array( $fileType , $config[ 'allowFiles' ] ) || stristr( $heads[ 'Content-Type' ] , "image" ) ) {
                array_push( $tmpNames , "error" );
                continue;
            }  
            //打开输出缓冲区并获取远程图片
            ob_start();
            $context = stream_context_create(
                array (
                    'http' => array (
                        'follow_location' => false // don't follow redirects
                    )
                )
            );
            //请确保php.ini中的fopen wrappers已经激活
            readfile( $imgUrl,false,$context);
            //当无后缀图片时,用读出来的数据
            $img = !empty($tempimgUrl) ? $tempimgUrl : ob_get_contents();
            ob_end_clean();

            //大小验证
            $uriSize = strlen( $img ); //得到图片大小
            $allowSize = 1024 * $config[ 'maxSize' ];
            if ( $uriSize > $allowSize ) {
                array_push( $tmpNames , "error" );
                continue;
            }
            //创建保存位置
            $savePath = $config[ 'savePath' ].date('Ymd', time()).'/';
            if ( !file_exists( $savePath ) ) {
                mkdir( "$savePath" , 0777 );
            }
            //写入文件
            $tmpName = $savePath . rand( 1 , 10000 ) . time() . strrchr( $imgUrl , '.' );
            try {
                $fp2 = @fopen( $tmpName , "a" );
                fwrite( $fp2 , $img );
                fclose( $fp2 );  
                
                //添加水印,载入水印需要的文件 @author Abner @time 20171221 start
                define('IN_ECS', true);
                define('INIT_NO_USERS', true);
                require_once( '../../init.php');
                require_once( '../../cls_image.php');
                $image = new cls_image(); 
                if (intval($_CFG['watermark_place']) > 0 && !empty($_CFG['watermark']))
                { 
                    $image->add_watermark( $tmpName , '', '../../'.$_CFG['watermark'], $_CFG['watermark_place'], $_CFG['watermark_alpha']);
                    
                }
                //添加水印,载入水印需要的文件 @author Abner @time 20171221 end
                 
                array_push( $tmpNames ,  $tmpName );
            } catch ( Exception $e ) {
                array_push( $tmpNames , "error" );
            }
        }
        /**
         * 返回数据格式
         * {
         *   'url'   : '新地址一ue_separate_ue新地址二ue_separate_ue新地址三',
         *   'srcUrl': '原始地址一ue_separate_ue原始地址二ue_separate_ue原始地址三',
         *   'tip'   : '状态提示'
         * }
         */
        
        echo "{'url':'" . implode( "ue_separate_ue" , $tmpNames ) . "','tip':'远程图片抓取成功!','srcUrl':'" . $uri . "'}";
    }

 

posted @ 2017-12-26 16:31  Abner3721  阅读(475)  评论(0编辑  收藏  举报