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( "&" , "&" , $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 . "'}"; }