noecs 2018-06-26 14:19:13 5466次浏览 8条评论 3 0 0

前后台公用上传目录

RT,在实际用Yii2高级模板进行开发的时候,由于前后台的地址不一致,前后台在上传资源的时候,很是苦恼。
(例如后台发布文章,前台展示。由于前后台区分开,绑定 admin.xxx.com 和 www.xxx.com ,需要拼接域名才能访问,无论是编辑还是修改,都有很大的弊端。)

注意事项

  1. 需要开启php exec()函数,symlink()。
  2. 不管是前台还是后台,上传路径均选择此软链即可。
  3. http访问会自动定位到软链链接的目录下,不用过多考虑。
  4. 此教程只适用于linux,macos。重要的事说三遍,windows不能用!!!

使用软链进行资源共享(大家可以根据自己实际情况进行调整代码)

  1. 在项目根目录创建upload文件夹。(用于共享的目录)
  2. 创建控制台命令
    <?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;
     }
    }
    
  3. 运行命令:./yii init/createlink
  • 评论于 2018-06-27 15:55 举报

    后台使用控制器访问前台图片,php相当于一个图片服务器,不用拼接,不用软连接
    https://www.yiichina.com/tutorial/1642

    1 条回复
    评论于 2018-06-27 17:51 回复

    此方法参考于YII2内置 Asset自带软链。

  • 评论于 2018-06-29 09:42 举报

    呀 牛逼呀嗷嗷

  • 评论于 2018-06-29 09:44 举报

    换个思路也行啊

  • 评论于 2018-07-03 21:41 举报

    资源直接存放在代码之外的独立目录不就行了嘛,并配资源域名进行访问,没域名就在原有域名加虚拟路径。

  • 评论于 2018-07-05 10:09 举报

    其实方案很多,目前我用的方案就是第三方图片存储服务器,当然有自已的机房,配一台图片存储服务器就可以了,
    而我用的是阿里的oss图片存储,优点很多,主要的说下
    1.不管是后端还是前端,对于图片来说,从编辑器上传图片开始,他就是一个URL,不分前后端。
    2.图片可以自定义风格,比如大小,清晰
    3.安全,因为上传的文件就算给绕过上传了非法的可执行文件,就算是木马,也是无解。因为他传到的是第三方oss服务器,并且有严格的安全级别,不会把这些非法的文件上传到你的网站上。

    1 条回复
    评论于 2018-08-03 23:11 回复

    厉害喽,这个可以有

  • 评论于 2018-10-25 18:06 举报

    这个思路不错

  • 评论于 2018-10-30 14:56 举报

    zimg了解下,c编写的图片服务器,不需要花钱在第三方平台上,而且同一个图只会生成一次https://github.com/buaazp/zimg
    还有可以用seafile文件服务器也是基于C,图片和文件都可存储,只不过没有作图片唯一性处理https://github.com/haiwen/seafile;
    这两都是开源,都可自己搭建

  • 评论于 2018-12-21 11:23 举报

    Windows系统也有软连接(非快捷方式,快捷方式不是软连接)和硬链接,所以楼主的方案在Windows上也是可行的。

您需要登录后才可以评论。登录 | 立即注册