/** * 远程图片上传到本地 */ 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); }