range

If there were you, the world would be just right

给硬盘分区

fdisk -l 先查看磁盘情况,找到新硬盘,这里以一整块硬盘作为一个分区来使用
fdisk /dev/sdb
## 增加一个分区
Command(m for help): n 
Command action
   e extended
   p primary partition (1-4)
#输入p,添加主分区
Partion number(1-4):主分区的编号
#两次回车
Command(m for help): w
现在fdisk -l 查看,发现多了一个/dev/sdb1分区,但是还没有格式化

格式化分区

#-t 制定要把磁盘格式化成什么类型
mkfs -t ext4 /dev/sdb1

挂载硬盘

mkdir /data
#把新硬盘挂载上去
mount /dev/sdb1 /data
#还差一步,让系统开机自动挂载这块硬盘
echo "/dev/sda1 /data ext4 defaults 0 0">>/etc/fstab

<?php

/**
 * 链式调用方式
 * Class Myreques
 */
class Myreques{

    private $do = false;

    private $resul;

    public function if($bool=false)
    {
        $this->do = $bool;
        return clone $this;
    }

    public function then(callable $func)
    {
        if($this->do){
            $this->resul = $func();
            $this->do = !$this->do;
        }
        return clone $this;
    }

    public function getResul()
    {
        return $this->resul;
    }
}
$req = new Myreques();
$true = true;
$p = json_decode('{"name":"Chinese"}');
$res = $req->if($true)
            ->then(function () use($p){
                return $p->name;
            })
            ->getResul();
print_r($res);

使用闭包

  1. 减少foreach的循环的代码
  2. 减少函数的参数
  3. 解除递归函数

基础使用示例

// 例一: 闭包:匿名函数赋予变量
$clos = function (){
    return 111;
};
var_dump($clos); // object(Closure)#1 (0) { }
die;

//例二:也可以直接将匿名函数进行传递。
$clos = function($a){
    return $a;
};
var_dump($clos(2)); // int(2)
die;

//例三 :连接闭包和外界变量的关键字:USE
function getMoney() {
 $rmb = 1;
 $dollar = 6;
 $func = function() use ( $rmb ) {
  echo $rmb;
  echo $dollar;
 };
 $func();
}
getMoney();
die;
//输出:1
//报错,找不到dorllar变量


//例四:在匿名函数中改变上下文的变量
function getMoney2() {
  $rmb = 1;
  $func = function() use ( &$rmb ) {
   echo $rmb . "<br>";
     //把$rmb的值加1
   $rmb++;
 };
 $func();
 echo $rmb;
}
getMoney2();
die;
//输出:
//1
//2

// 例5
$arr = [1, 2, 3, 4, 5, 6];

//使用array_reduce求和
function sum($arr)
{
    return array_reduce($arr, function ($x, $y) {
        return $x + $y;
    });
}
var_dump(sum($arr)); //int(21)

实际应用

# 实现容器
class Di
{
    private $factory;
 
    public function set($id, $value)
    {
        $this->factory[$id] = $value;
    }
 
    public function get($id)
    {
        $val = $this->factory[$id];
        return $val();//如果不加括号,仅仅返回的是闭包类,并不是User实例
    }
}
 
class User
{
    private $username;
 
    public function __construct($username = '')
    {
        $this->username = $username;
    }
 
    public function getUserName()
    {
        return $this->username;
    }
}
 
$di = new Di();
 
// 在此使用了闭包,所以实际上并不会实例化User类,只有在后面get的时候才会实例化
$di->set('a', function(){
    return new User('张三');
});
 
var_dump($di->get('a')->getUserName());

配置修改

vim /etc/my.cnf

查找sql_mode,如果没有该字段,在[mysqld]标签里新增:

sql_mode = NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

重启mysql

service mysql restart

因为yum安装mysql的时候,数据库的data目录默认是在/var/lib下,出于数据安全性的考虑需要把它挪到/data分区,原ubuntu环境更换centos环境,在数据库迁移这里卡住(个人菜),记录一下
安装mysql5.7

wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
rpm -ivh mysql57-community-release-el7-8.noarch.rpm
yum -y install mysql-server
service mysqld restart

临时密码查看:

grep 'temporary password' /var/log/mysqld.log

更改密码(mysql命令):

ALTER USER 'root'@'localhost' IDENTIFIED BY 'your password'

1.停止mysql

service mysqld stop

2.拷贝原数据目录(cp -aR 保留原文件权限)

cp -aR /var/lib/mysql /data/mysql

3.修改 /etc/my.cnf

把/var/lib/mysql 目录相关改为,/data/mysql

4.关键一步,关闭selinux

# 临时关闭
setenforce 0

# 永久关闭,把 /etc/selinux/config 中
SELINUX=enforcing 修改为 SELINUX=disabled

5.启动mysql

service mysqld start

6.查看数据目录

mysql> select @@datadir;
+--------------+
| @@datadir    |
+--------------+
| /data/mysql/ |
+--------------+

我的是yum安装,迁移问题解决。如果启动不成功,请查看日志(位置在my.cnf中有配置),自行百度答案