|
|
|
|
<?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/" , //保存路径
|
|
|
|
|
"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 . rand( 1 , 10000 ) . time() . 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 . "'}";
|
|
|
|
|
}
|