<?php
require_once(dirname(__FILE__)."/../../../inc/common.inc.php");
/**
 * Created by JetBrains PhpStorm.
 * User: taoqili
 * Date: 11-12-28
 * Time: 上午9:54
 * To change this template use File | Settings | File Templates.
 */
error_reporting(E_ERROR|E_WARNING);
$uri = htmlspecialchars( $_POST[ 'upfile' ] );
//Ajax提交的网址内容中如果包含了&符号，上述函数会将其转成&amp;导致地址解析不对，这里要转回来
$uri = str_replace( "&amp;" , "&" , $uri );

if(!$lfjid){
	echo "{'url':'$uri','tip':'你还没有登录!','srcUrl':'$uri'}";
	exit;
}

getRemoteImage( $uri );

/**
 * @param $uri
 */
function getRemoteImage( $uri )
{
	global $webdb;

    //忽略抓取时间限制
    set_time_limit( 0 );
    //远程抓取图片配置
    $config = array(
        "savePath" => ROOT_PATH."$webdb[updir]/other/" , //保存路径
        "fileType" => array( ".gif" , ".png" , ".jpg" , ".jpeg" , ".bmp" ) , //文件允许格式
        "fileSize" => 3000 //文件大小限制，单位KB
    );
    //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[ 'fileType' ] ) || 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[ 'fileSize' ];
        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 ,  basename($tmpName) );
        } catch ( Exception $e ) {
            array_push( $tmpNames , "error" );
        }
    }
    /**
     * 返回数据格式
     * {
     *   'url'   : '新地址一ue_separate_ue新地址二ue_separate_ue新地址三',
     *   'srcUrl': '原始地址一ue_separate_ue原始地址二ue_separate_ue原始地址三'，
     *   'tip'   : '状态提示'
     * }
     */
	 ob_end_clean();
    echo "{'url':'" . implode( "ue_separate_ue" , $tmpNames ) . "','tip':'远程图片抓取成功！','srcUrl':'" . $uri . "'}";
}

?>
