关于Yii2高级版本 上传图片资源划分问题。 [ 2.0 版本 ]
前后台公用上传目录
RT,在实际用Yii2高级模板进行开发的时候,由于前后台的地址不一致,前后台在上传资源的时候,很是苦恼。
(例如后台发布文章,前台展示。由于前后台区分开,绑定 admin.xxx.com 和 www.xxx.com ,需要拼接域名才能访问,无论是编辑还是修改,都有很大的弊端。)
注意事项
- 需要开启php exec()函数,symlink()。
- 不管是前台还是后台,上传路径均选择此软链即可。
- http访问会自动定位到软链链接的目录下,不用过多考虑。
- 此教程只适用于linux,macos。重要的事说三遍,windows不能用!!!
使用软链进行资源共享(大家可以根据自己实际情况进行调整代码)
- 在项目根目录创建upload文件夹。(用于共享的目录)
- 创建控制台命令
<?php namespace console\controllers; use Yii; use yii\console\Controller; // class InitController extends Controller { /*创建软链*/ public function actionCreatelink() { echo "Warning message! \n"; echo "-------Do you want create upload dir link?------- \n"; echo "Place enter 'y' or 'n' exec:"; $answer = trim(fgets(STDIN)); echo "\n"; if($answer=='y'){ $original = dirname(dirname(__DIR__)).'/upload'; $backend = dirname(dirname(__DIR__)).'/backend/web/upload'; $frontend = dirname(dirname(__DIR__)).'/frontend/web/upload'; if($this->createln($original,$backend) && $this->createln($original,$frontend)){ echo "original create success :)\n";return 0; } echo "original is not found! :(\n";return 0; } return 0; } }
- 运行命令:
./yii init/createlink
noecs 兰州
注册时间:2017-10-04
最后登录:2018-09-17
在线时长:1小时39分
最后登录:2018-09-17
在线时长:1小时39分
- 粉丝1
- 金钱15
- 威望20
- 积分225
共 8 条评论
后台使用控制器访问前台图片,php相当于一个图片服务器,不用拼接,不用软连接
https://www.yiichina.com/tutorial/1642
此方法参考于YII2内置 Asset自带软链。
呀 牛逼呀嗷嗷
换个思路也行啊
资源直接存放在代码之外的独立目录不就行了嘛,并配资源域名进行访问,没域名就在原有域名加虚拟路径。
其实方案很多,目前我用的方案就是第三方图片存储服务器,当然有自已的机房,配一台图片存储服务器就可以了,
而我用的是阿里的oss图片存储,优点很多,主要的说下
1.不管是后端还是前端,对于图片来说,从编辑器上传图片开始,他就是一个URL,不分前后端。
2.图片可以自定义风格,比如大小,清晰
3.安全,因为上传的文件就算给绕过上传了非法的可执行文件,就算是木马,也是无解。因为他传到的是第三方oss服务器,并且有严格的安全级别,不会把这些非法的文件上传到你的网站上。
厉害喽,这个可以有
这个思路不错
zimg了解下,c编写的图片服务器,不需要花钱在第三方平台上,而且同一个图只会生成一次https://github.com/buaazp/zimg
还有可以用seafile文件服务器也是基于C,图片和文件都可存储,只不过没有作图片唯一性处理https://github.com/haiwen/seafile;
这两都是开源,都可自己搭建
Windows系统也有软连接(非快捷方式,快捷方式不是软连接)和硬链接,所以楼主的方案在Windows上也是可行的。