123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- <?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" => "upload/". date("Ymd") .'/' , //保存路径
- "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)
- {
- //忽略抓取时间限制
- 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验证)
- $fileType = strtolower( strrchr( $imgUrl , '.' ) );
- 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 = ob_get_contents();
- ob_end_clean();
- //大小验证
- $uriSize = strlen( $img ); //得到图片大小
- $allowSize = 1024 * $config[ 'maxSize' ];
- if ( $uriSize > $allowSize ) {
- array_push( $tmpNames , "error" );
- continue;
- }
- //创建保存位置
- $savePath = $config[ 'savePath' ];
- if ( !file_exists( $savePath ) ) {
- mkdir( "$savePath" , 0777 );
- }
- //写入文件
- $tmpName = $savePath . time() . rand( 1 , 10000 ) . strrchr( $imgUrl , '.' );
- try {
- $fp2 = @fopen( $tmpName , "a" );
- fwrite( $fp2 , $img );
- fclose( $fp2 );
- 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 . "'}";
- }
|