什么也不说了,直接找到UeditorController.php文件下的_get_remote_image函数进行修改,下面是这个文件的路径:
/vendor/thinkcmf/cmf-app/src/user/UeditorController.php
下面是我修改好的,你可以直接复制过去替换你的就可以了。
/**
* 获取远程图片
*/
private function _get_remote_image()
{
$source = $this->request->param('source');
$item = [
"state" => "",
"url" => "",
"size" => "",
"title" => "",
"original" => "",
"source" => ""
];
$date = date("Ymd");
$uploadSetting = cmf_get_upload_setting();
//$uploadMaxFileSize = $uploadSetting["image"]['upload_max_filesize'];
$uploadMaxFileSize = $uploadSetting['file_types']["image"]['upload_max_filesize'];
$uploadMaxFileSize = empty($uploadMaxFileSize) ? 2048 : $uploadMaxFileSize;//默认2M
$allowedExts = explode(',', $uploadSetting['file_types']["image"]["extensions"]);
//$strSavePath = ROOT_PATH . 'public' . DIRECTORY_SEPARATOR . "ueditor" . DIRECTORY_SEPARATOR . $date . DIRECTORY_SEPARATOR;
$strSavePath = cmf_get_root() . 'upload'. DIRECTORY_SEPARATOR . "ueditor" . DIRECTORY_SEPARATOR . $date . DIRECTORY_SEPARATOR;
//远程抓取图片配置
$config = [
"savePath" => $strSavePath, //保存路径
"allowFiles" => $allowedExts,// [".gif", ".png", ".jpg", ".jpeg", ".bmp"], //文件允许格式
"maxSize" => $uploadMaxFileSize //文件大小限制,单位KB
];
$storage_setting = cmf_get_cmf_settings('storage');
//$qiniu_domain = $storage_setting['Qiniu']['domain'];
$qiniu_domain = $_SERVER['HTTP_HOST'];
$no_need_domains = [$qiniu_domain];
$list = [];
foreach ($source as $imgUrl) {
$host = str_replace(['http://', 'https://'], '', $imgUrl);
$host = explode('/', $host);
$host = $host[0];
if (in_array($host, $no_need_domains)) {
continue;
}
$return_img = $item;
$return_img['source'] = $imgUrl;
$imgUrl = htmlspecialchars($imgUrl);
$imgUrl = str_replace("&", "&", $imgUrl);
//http开头验证
if (strpos($imgUrl, "http") !== 0) {
$return_img['state'] = $this->stateMap['ERROR_HTTP_LINK'];
array_push($list, $return_img);
continue;
}
//获取请求头
// is_sae()
if (!cmf_is_sae()) {//SAE下无效
$heads = get_headers($imgUrl);
//死链检测
if (!(stristr($heads[0], "200") && stristr($heads[0], "OK"))) {
$return_img['state'] = $this->stateMap['ERROR_DEAD_LINK'];
array_push($list, $return_img);
continue;
}
}
//格式验证(扩展名验证和Content-Type验证)
$fileType = strtolower(strrchr($imgUrl, '.'));
$fileType=(explode('.',$fileType))[1];
if (!in_array($fileType, $config['allowFiles']) || !(stristr($heads[3], "image"))) {
$return_img['state'] = $this->stateMap['ERROR_HTTP_CONTENTTYPE'];
array_push($list, $return_img);
continue;
}
//打开输出缓冲区并获取远程图片
ob_start();
$context = stream_context_create(
[
'http' => [
'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) {
$return_img['state'] = $this->stateMap['ERROR_SIZE_EXCEED'];
array_push($list, $return_img);
continue;
}
$file = uniqid() . strrchr($imgUrl, '.');
$savePath = $config['savePath'];
$tmpName = $savePath . $file;
//创建保存位置
if (!file_exists($savePath)) {
mkdir("$savePath", 0777, true);
}
$file_write_result = cmf_file_write($tmpName, $img);
if ($file_write_result) {
$cmfgetoption=cmf_get_option('storage');
if ($cmfgetoption['type'] == 'Qiniu') {
//todo qiniu code
}
if ($cmfgetoption['type'] == 'Local') {
$file = $strSavePath . $file;
$return_img['state'] = 'SUCCESS';
$return_img['url'] = '/'.$file;
array_push($list, $return_img);
}
} else {
$return_img['state'] = $this->stateMap['ERROR_WRITE_CONTENT'];
array_push($list, $return_img);
}
}
return json_encode([
'state' => count($list) ? 'SUCCESS' : 'ERROR',
'list' => $list
]);
}