分类 Technology 下的文章

冒泡排序

将数组中的相邻元素的比较和交换来把小的数交换到最前面

//冒泡排序
function maopao($num)
{
    for ($i = 0; $i < count($num); $i++) {
        for ($j = 0; $j < count($num) - $i - 1; $j++) {
            if ($num[$j] > $num[$j + 1]) {
                list($num[$j],$num[$j+1]) = [$num[$j+1],$num[$j]];
                //$tmp = $num[$j + 1];
                //$num[$j + 1] = $num[$j];
                //$num[$j] = $tmp;
            }
        }
    }
    return $num;
}

- 阅读剩余部分 -

  1. 在七牛控制台中创建Bucket。
  2. 下载PHP-SDK包。

可以通过composer来安装 composer require qiniu/php-sdk

  1. 获取密钥信息: AccessKey、SecretKey。
  2. 项目中将文件直接传至七牛服务器、通过回调来返回需要的数据、减轻业务服务器压力。

具体逻辑:

-  客户端获取服务器颁发的上传凭证(token)。
-  客户端上传资源至七牛,并带上token作为请求内容的一部分。
-  七牛处理资源、带上参数访问回调地址。
-  回调接口处理数据返回七牛。
-  七牛返回回调接口的处理数据给客户端。

demo:

//laravel中获取上传token
public function qiniu_token ()
    {
        //用户ID加密处理.
        $uid    = $this->hashid_enconde(Auth::user()->id);
        $bucket = env('QINIU_BUCKET');
        $policy = [
            'x:uid'            => $uid,
            //回调域名
            //Laravel中回调地址尽量走api路由、走web路由post过来的数据会因为csrf验证而导致419错误
            'callbackUrl'      => env('QINIU_CALLBACK'),
            //回调中需要传给服务器的数据、其中有七牛的魔法参数、和自定义的参数
            'callbackBody'     => '{"fname":"$(fname)", "fkey":"$(key)", "mimeType":"$(mimeType)","fsize":"$(fsize)", "uid":"'.
                                  $uid.'"}',
            'callbackBodyType' => 'application/json',
            //自定义文件存储路径(七牛中就是一串字符串...)
            'saveKey'          => "tools/".$uid."/$(year)/$(mon)/$(etag)$(ext)",
        ];
        $auth = new \Qiniu\Auth();
        
        return $auth->uploadToken($bucket, null, 3600, $policy);
    }

回调策略详见 文档

Blade 模板

@extends('layouts.app')
@section('content')
    <div class="container">
        <bill :upload-token="{{$token}}"></bill>
    </div>
@endsection

前端upload组件(iviewui)bill.vue

<template>
    <div>
         <Upload
                  ref="upload"
                  multiple
                  :data="uploadToken"
                  :default-file-list="uploadList"
                  :on-success="handleUploadSuccess"
                  :format="['jpg','jpeg','png']"
                  <!-- 此处填写七牛服务器地址 -->
                  action="https://upload.qiniup.com">
            <Button icon="ios-cloud-upload-outline">图片上传</Button>
          </Upload>
        <input v-model="images_url"></input>
    </div>
</template>

<script>
    export default{
        props:{
            uploadToken: Object
        },
        data(){
            return{
                uploadList:[],
                images_url:[],
            }
        },
        methods:{
            handleUploadSuccess(){
                this.$Message.success('图片上传成功');
                this.images_url.push(res.data);
            }
        }
    }
</script>

回调:

    /**
     * 持久化媒体文件
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function qiniuCallback (Request $request)
    {
        //将文件信息存入数据库中
        $media = Media::create([
            'user_id'     => $this->hashid_decode($request->get('uid')),
            'name'        => $request->get('fname'),
            'key'         => $request->get('fkey'),
            'mimeType'    => $request->get('mimeType'),
            'size'        => $request->get('fsize'),
            'description' => $request->get('des'),
        ]);
        //$media->url 使用Eloquent模型访问器功能生成图片路径,回调返回参数可自定义
        return $this->successResponseData(200, $media->url);
    }
  1. 上传资源完成之后可以通过异步数据处理将图片裁剪、添加水印。也是在上传策略中配置。详见

介绍

在接触Docker之前,一直使用自建的开发环境来工作。

对于个人来说就是在换电脑的时候麻烦,换电脑了开发环境就得重新部署一次。差不得得要个半天时间...

对于公司团队来说更加麻烦了,每个同事部署的环境不一致,Windows系统与*nix系统的不兼容等.代码跑起来有差异。

Docker是一个类似于虚拟机的设计,一种新兴化的虚拟化方式。

特性Docker虚拟机
启动秒级分钟级
硬盘使用一般为MB一般为GB
性能接近原生弱于原生
系统支持量单主机支持上千个容器一般几十个

Docker有三个关键概念:镜像(images)、容器(container)、仓库(registry)。其中镜像与容器两者关系类似于面向对象设计中的实例一样

镜像是静态的定义,容器是镜像运行是的实体

镜像加速:官方Docker Hub拉取镜像网络不稳定,推荐两个镜像仓库


- 阅读剩余部分 -

MongoDB 权限配置

MongoDB 默认没有管理员账号,如果需要开启权限必须先添加管理员账号。

  • 切换到 admin (Collection-集合)
> use admin
switched to db admin
> show collections
system.version
  • 创建超级管理员用户
> db.createUser({user:'root',pwd:'root',roles:["root"]})
Successfully added user: { "user" : "root", "roles" : [ "root" ] }
> show users
{
    "_id" : "admin.root",
    "user" : "root",
    "db" : "admin",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ]
}
##  官方例子
use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)
## 官方例子
use reporting
db.createUser(
  {
    user: "reportsUser",
    pwd: "12345678",
    roles: [
       { role: "read", db: "reporting" },
       { role: "read", db: "products" },
       { role: "read", db: "sales" },
       { role: "readWrite", db: "accounts" }
    ]
  }
)
  • 切到所在集合,创建用户
>use mycollections
>db.createUser(
  {
    user: "reportsUser",
    pwd: "12345678",
    roles: [
       { role: "read", db: "reporting" },
       { role: "read", db: "products" },
       { role: "read", db: "sales" },
       { role: "readWrite", db: "accounts" }
    ]
  }
)

MongoDB 开启Auth认证

修改配置文件mongod.conf

security:
  authorization: enabled
  #authorization: disabled

## 网络上很多资料是以下配置,
auth=true

Enable Access Control

MongoDB does not enable access control by default. You can enable authorization using the --auth or the security.authorization setting. Enabling internal authentication also enables client authorization.

官方配置文档

Laravel中使用MongoDB

安装扩展包composer require jenssegers/mongodb.
修改config/database.php配置文件

'mongodb' => [
       'driver'   => 'mongodb',
       'host'     => env('MONGO_DB_HOST', 'localhost'),
       'port'     => env('MONGO_DB_PORT', 27017),
       'database' => env('MONGO_DB_DATABASE'),
       'username' => env('MONGO_DB_USERNAME'),
       'password' => env('MONGO_DB_PASSWORD'),
       'options'  => [
           'database' => env('MONGO_DB_DATABASE') // sets the authentication database required by mongo 3
      ]
],

MongoDB是强类型语言,PHP中对MongoDB操作时要注意类型问题!

以下两个查询会得到不一样的结果:

> db.users.find({user_id:1})
> db.users.find({user_id:"1"})

Reference

  1. https://blog.csdn.net/kk185800961/article/details/45619863
  2. https://www.jianshu.com/p/f5afc6488f9e
  3. https://docs.mongodb.com/manual/core/authorization/

使用-h 命令查看具体参数

[email protected]:~/gogs$ ./gogs -h
NAME:
   Gogs - A painless self-hosted Git service

USAGE:
   gogs [global options] command [command options] [arguments...]

VERSION:
   0.11.43.0330

COMMANDS:
     web      Start web server
     serv     This command should only be called by SSH shell
     hook     Delegate commands to corresponding Git hooks
     cert     Generate self-signed certificate
     admin    Perform admin operations on command line
     import   Import portable data as local Gogs data
     backup   Backup files and database
     restore  Restore files and database from backup
     help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --help, -h     show help
   --version, -v  print the version

- 阅读剩余部分 -