这里记录下 百度ueditorPHP版本编辑器将图片上传到非项目根路径
通俗点解释就是:
UEditor 的页面在 a.com 下,serverUrl指向域名在 b.com 域下
这个官方文档是有介绍的:跨域上传,这个我就不废话了。
下边是链接:
http://fex.baidu.com/ueditor/#dev-crossdomain
说实话,我没看懂……主要是麻烦(我懒)
我就想,我先把图片传到A下,成功之后,再将A下的图片剪切到B下。
然后再将config.php下的imageUrlPrefix(图片访问路径前缀)修改成B的域名。
这应该是可行的吧。
嗯,实践出真知。开始我漫长的调试之路
最开始,尝试了一下move_upload_file() 函数。
结果,报错。
百度了一下 move_upload_file() 函数作用的是 HTTP POST 上传的图片。
又百度了一下。Php把一个文件复制剪切到另一个文件夹的函数还有
copy() rename()
这两个试了一下,但是有点麻烦。copy复制成功之后,还需要删除源文件。
Emmmmm……这可如何是好。
这个时候,我想到了万能的linux命令。
mv /www/1.txt /aaa/ 将www目录下的1.txt文件移动到aaa目录下
不多废话了,上代码
<?php //header('Access-Control-Allow-Origin: http://www.baidu.com'); //设置http://www.baidu.com允许跨域访问 //header('Access-Control-Allow-Headers: X-Requested-With,X_Requested_With'); //设置允许的跨域header date_default_timezone_set("Asia/Chongqing"); error_reporting(E_ERROR); header("Content-Type: text/html; charset=utf-8"); header("Access-Control-Allow-Origin"); $CONFIG = json_decode(preg_replace("//*[sS]+?*//", "", file_get_contents("config.json")), true); $action = $_GET['action']; switch ($action) { case 'config': $result = json_encode($CONFIG); break; /* 上传图片 */ case 'uploadimage': /* 上传涂鸦 */ case 'uploadscrawl': /* 上传视频 */ case 'uploadvideo': /* 上传文件 */ case 'uploadfile': $result = include("action_upload.php"); break; /* 列出图片 */ case 'listimage': $result = include("action_list.php"); break; /* 列出文件 */ case 'listfile': $result = include("action_list.php"); break; /* 抓取远程文件 */ case 'catchimage': $result = include("action_crawler.php"); break; default: $result = json_encode(array( 'state'=> '请求地址出错' )); break; } //********************************* 移动图片start ************************************ $date = date("Ymd",time()); $dir = "/var/www/html/aaa/public/ueditor/".$date;//目标文件夹(如果不存在,就创建) if(!is_dir($dir)){ mkdir($dir); } $a = json_decode($result,true);//对上传成功之后的结果进行解析(如果图片上传成功) if($a['url'] != null && $a['url'] != ''){ $url = "/var/www/html/bbb/public".$a['url'];//这是上传图片路径 $new_url = $dir.'/';//这是剪切目标路径 $linux = "mv ".$url.' '.$new_url;//拼接linux命令 exec($linux);//执行命令 $a['url'] = '/ueditor/'.$date.'/'.$a['title'];//给解析的结果集重新赋值 $result = json_encode($a);//再将其转成json串,输出到前台 } //********************************* 移动图片end ************************************ /* 输出结果 */ if (isset($_GET["callback"])) { if (preg_match("/^[w_]+$/", $_GET["callback"])) { echo htmlspecialchars($_GET["callback"]) . '(' . $result . ')'; } else { echo json_encode(array( 'state'=> 'callback参数不合法' )); } } else { echo $result; }
我后添加的代码都有对应的注释。将上边的路径换成你自己的应该就好用了。
注意:json_decode() 括号内需要 添加一个true,不然会报错。