Exemple #1
0
 /**
  * 远程图片上传到本地
  */
 public function remoteImage($url = '')
 {
     if (!IS_POST) {
         return false;
     }
     @set_time_limit(600);
     $reExt = '(' . implode('|', C('FILE_UPLOAD_IMG_CONFIG.exts')) . ')';
     $config = C('TMPL_PARSE_STRING');
     //base64图片内容上传
     if (substr($url, 0, 10) == 'data:image') {
         if (!preg_match('/^data:image\\/' . $reExt . '/i', $url, $sExt)) {
             $this->error('不支持的格式');
         }
         $sExt = $sExt[1];
         $imgContent = base64_decode(substr($url, strpos($url, 'base64,') + 7));
         //图片地址上传
     } else {
         preg_match("/\\.{$reExt}\$/i", $url, $sExt);
         if (!$sExt) {
             continue;
         }
         $sExt = $sExt[1];
         //先验证链接地址是否正确
         if (!file_exist_remote($url)) {
             $this->error('无效的链接');
         }
         $imgContent = file_read_remote($url);
     }
     $filename = date('Y/m/d/') . uniqid() . '.' . strtolower($sExt);
     file_write(UPLOAD_PATH . $filename, $imgContent);
     $this->water($filename);
     $this->success($config[UPLOAD_PATH] . $filename);
 }
 private function ueCacheImage()
 {
     @set_time_limit(600);
     $dict = dict('', 'Ueditor');
     $field = $dict['catcherFieldName'];
     $source = I("param.{$field}");
     $exts = '(' . implode('|', C('FILE_UPLOAD_IMG_CONFIG.exts')) . ')';
     $list = array();
     foreach ($source as $imgUrl) {
         $info = array("state" => 'ERROR', "url" => '', "size" => 0, "title" => '', "original" => '');
         $check = true;
         //http开头验证
         if ($check && strpos($imgUrl, "http") !== 0) {
             $info['state'] = "链接不是http链接";
             $check = false;
         }
         if ($check && !file_exist_remote($imgUrl)) {
             $info['state'] = "链接不可用";
             $check = false;
         }
         if ($check) {
             //格式验证(扩展名验证和Content-Type验证)
             $fileType = file_ext($imgUrl);
             preg_match("/\\.{$exts}\$/i", $imgUrl, $ext);
             if ($ext) {
                 $ext = $ext[1];
                 //打开输出缓冲区并获取远程图片
                 ob_start();
                 $context = stream_context_create(array('http' => array('follow_location' => false)));
                 readfile($imgUrl, false, $context);
                 $img = ob_get_contents();
                 ob_end_clean();
                 $filename = date('Y/m/d/') . uniqid() . '.' . strtolower($ext);
                 file_write(UPLOAD_PATH . $filename, $img);
                 $info = array_merge($info, array('state' => 'SUCCESS', 'url' => $filename, 'title' => basename($filename), 'size' => strlen($img), 'original' => basename($imgUrl)));
             }
         }
         array_push($list, array("state" => $info["state"], "url" => $info["url"], 'title' => '', "size" => $info["size"], "title" => htmlspecialchars($info["title"]), "original" => htmlspecialchars($info["original"]), "source" => htmlspecialchars($imgUrl)));
     }
     /* 返回抓取数据 */
     return array('state' => count($list) ? 'SUCCESS' : 'ERROR', 'list' => $list);
 }