LOADING

王思彤 发布的文章

brew tap tigerstrikemedia/homebrew-phalconphp
brew install php72-phalcon    (按照自己需要的版本 php7就是 php70-phalcon)
vim /Applications/MAMP/bin/php/php7.2.20/conf/php.ini
添加扩展
extension=/usr/local/Cellar/php72-phalcon/3.4.2/phalcon.so
重启MAMP
在phpinfo中发现phalcon 就说明安装成功

接下来安装phalcon 官方命令行工具
进入htdocs git clone https://github.com/phalcon/phalcon-devtools.git
获得phalcon-devtools文件夹
cd phalcon-devtools 复制phalcon 为phalcon.php
设置环境变量
ln -s /Applications/MAMP/htdocs/phalcon-devtools/phalcon.php /usr/local/bin/phalcon
设置权限

chmod +x /usr/local/bin/phalcon
重启终端
phalcon commands 查看是否安装成功

接下来是大坑 如果你用的是集成环境 并且没有把mac自带的php环境变量指向mamp中的时候就会报
ERROR: Phalcon extension isn't installed, follow these instructions to install it:
执行
brew link php@7.2
echo 'export PATH="/usr/local/opt/php@7.2/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/opt/php@7.2/sbin:$PATH"' >> ~/.bash_profile
需要把如上两行写入 ~/.bash_profile文件 (如果没有就新建)
修改后执行source ~/.bash_profile  (如果不可以就先切换到~ 然后执行source bash_profile)
执行 php -v 和 which php检测是否成功
phalcon project demo --enable-webtools

public function collectionPage($datas,$filters){
        $datas_count = $datas->count();
        switch ($filters['sort_by']){
            case "DESC":
                $datas = $datas->sortByDesc($filters['sort'])->forPage($filters['page'],$filters['limit']);
                break;
            case "ASC":
                $datas = $datas->sortBy($filters['sort'])->forPage($filters['page'],$filters['limit']);
                break;
            default:
                $datas = $datas->sortBy($filters['sort'])->forPage($filters['page'],$filters['limit']);
                break;
        }
        $datas = $datas->values()->all();
        $option = [
            "path" => URL::full(),
            "pageName" => "page",
        ];
        return new LengthAwarePaginator($datas,$datas_count,$filters['limit'],$filters['page'],$option);
    }

Redis 密码设置和查看密码

redis没有实现访问控制这个功能,但是它提供了一个轻量级的认证方式,可以编辑redis.conf配置来启用认证。

1、初始化Redis密码:

在配置文件中有个参数: requirepass 这个就是配置redis访问密码的参数;

比如 requirepass test123;

(Ps:需重启Redis才能生效)

redis的查询速度是非常快的,外部用户一秒内可以尝试多大150K个密码;所以密码要尽量长(对于DBA 没有必要必须记住密码);

2、不重启Redis设置密码:

在配置文件中配置requirepass的密码(当redis重启时密码依然有效)。

redis 127.0.0.1:6379> config set requirepass test123

查询密码:

redis 127.0.0.1:6379> config get requirepass
(error) ERR operation not permitted

密码验证:

redis 127.0.0.1:6379> auth test123
OK

再次查询:

redis 127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "test123"

PS:如果配置文件中没添加密码 那么redis重启后,密码失效;

3、登陆有密码的Redis:

在登录的时候的时候输入密码:

redis-cli -p 6379 -a test123

先登陆后验证:

redis-cli -p 6379

redis 127.0.0.1:6379> auth test123
OK

AUTH命令跟其他redis命令一样,是没有加密的;阻止不了攻击者在网络上窃取你的密码;

认证层的目标是提供多一层的保护。如果防火墙或者用来保护redis的系统防御外部攻击失败的话,外部用户如果没有通过密码认证还是无法访问redis的。

今天重启游戏服务器在连接redis数据库时突然报错:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.

究其原因是因为强制把redis快照关闭了导致不能持久化的问题,在网上查了一些相关解决方案,通过stop-writes-on-bgsave-error值设置为no即可避免这种问题。

命令行修改方式示例:

127.0.0.1:6379> config set stop-writes-on-bgsave-error no

    /**
     * 递归树形结构分类函数
     * $data 数组记录
     * $pid 父id
     * $level 级别
     * $pre 前置html(可以是空格)
     */
    function getArrArea($data,$pid=0,$level=1,$left=" ┗━") {
        $catArr = array();
        foreach($data as  $cat) {
            if ($cat['pid']==$pid) {
                $cat['level'] = $level;
                if($level>1)
                    $cat['name'] = $left.$cat['name'];
                $catArr[] = $cat;
                $catArr = array_merge($catArr,$this->getArrArea($data,$cat['new_category_id'],$level+1," ".$left));
            }
        }
        return $catArr;
    }

可以简单用scp 命令来实现

查看scp帮助:sup -h

输出信息如下:usage: scp [-12346BCEpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] -S programhost1:]file1 … [[user@]host2:]file2

OPTIONS:

-v 显示进度。可以用来查看连接、认证、或是配置错误

-P 选择端口

-r 复制目录

1、从本地将文件传输到服务器
scp[本地文件的路径] [服务器用户名]@[服务器地址]:[服务器上存放文件的路径]

scp /Users/mac/Desktop/test.txt root@192.168.1.1:/root

2、从本地将文件夹传输到服务器
scp -r[本地文件的路径] [服务器用户名]@[服务器地址]:[服务器上存放文件的路径]

scp -r /Users/mac/Desktop/test root@192.168.1.1:/root

3、将服务器上的文件传输到本地
scp [服务器用户名]@[服务器地址]:[服务器上存放文件的路径] [本地文件的路径]

scp root@192.168.1.1:/root/default/test.txt /Users/mac/Desktop

4、将服务器上的文件夹传输到本地
scp -r [服务器用户名]@[服务器地址]:[服务器上存放文件的路径] [本地文件的路径]

scp -r root@192.168.1.1:/root/default/test /Users/mac/Desktop