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 . "'}"; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2016-12-26 火车头dede采集接口,图片加水印,远程图片本地化,远程无后缀的无图片本地化
2016-12-26 php 远程本地化无后缀图片