分类 技术 下的文章

1.base64_encode可以替代rawurlencode吗?为什么?

不能,因为base64生成的结果包含字母数字+/=,而rawurlencode需要转义+=/

2. echo json_encode([]) 和 echo json_encode(['a'=>'b'])的区别是什么?

如果json_encode 传递空数组,返回的是json数组,否则返回的是json对象,但是这个在前端解析的时候是致命的,尤其在ios的解析库中,可能由于开发者不注意留意这个而造成app的崩溃,所以推荐使用 JSON_FORCE_OBJECT 参数来encode数组

1.进入一个已经start的container

#如果没有安装bash,需要apk add bash
docker exec -it <container_id> /bin/bash

2.根据Dockerfile构建镜像

docker build -t <image_name:tag_id> .

3.运行构建好的镜像为容器

#d为demon
docker run -itd <image_id>

4.删除容器

docker rm -f <container_id>

5.docker访问宿主

docker如果在windows下,那么在docker容器内ifconfig,假设:172.17.0.3,则宿主为:172.17.0.1
docker如果在mac下, `docker.for.mac.host.internal` 则为宿主域名

  1. 我们用php-cli写一些业务常用逻辑,然后需要打印一些有用信息到终端时,通常的 echo var_dump往往在显示数据较多多时滚动显示,这样不方便肉眼盯数据,此时可以用如下逻辑实现 wget 下载文件滚动条的实现:
    <?php
    for($n = 1; $n < 100; $n++) {

      echo chr(3); // 输出文本结束控制字符,这样可以清除之前输出的文本内容
      echo chr(8); // 将前一个控制字符删掉,避免在控制台留下控制字符的标记
      echo "inserting row $n\r";
      sleep(1); // 延时一秒是为了看清楚文字变化

    }

  2. model中有很多常量,建议开发者以 group 的方式设置:
    例如 : STATUS_ON , STATUS_OFF,
  3. windows下面添加服务
    首先需要定义一个可执行的bat文件,大致如下

    @echo off  
    start  "C:\Windows\System32\cmd.exe"   
    cd C:\xxxx\bbbb
    ## 这里是执行的具体内容
    exit

    添加服务

    sc create frp binPath= C:\Users\Administrator\Desktop\frp.bat start= auto

    然后到ctrl+shift+esc 找到服务,启动

  4. 当你对一个数组元素unset之后,你一定要小心,这个时候php由于中间缺了一个不连续的key,在json_encode的时候就会有key参与到json中,需要用array_values 重新构建索引

5.放弃ps -ef | grep nginx这种丑陋的做法吧,请使用pgrep
6.通过终端写入多行数据到一个文件

cat <<EOF > hello.php
<?php
echo "xueshop.cn";
EOF

这里整理一些有意思的linux命令,方便忘记命令查看

  1. 查找某个目录最大的文件
  2. 删除某个目录下的6个月之前修改的文件
  3. 统计文件夹内部文件总大小
  4. 查看端口占用情况,以及被谁占用
  5. 同步目录到另一台服务器指定目录
  6. 替换指定几行的字符串
  7. 替换当前目录下匹配文件的字符串为另一个字符
  8. 查看LINUX发行版的名称及其版本号的命令
  9. 根据nginx日志统计最大qps
  10. ssh登陆使用指定密钥登陆
  11. 查看linux占用的端口号
  12. 指定文件列宽(给你一长串不换号文本转换后方便查看)
  13. 查看文件夹的容量大小
  14. 从id.pub文件计算指纹fingerprint

1.查找某个目录最大的文件

思路:先find+f(文件),然后对每个文件stat(-c=format),然后sort(n自然r逆序)

find -type f -exec stat -c "%s %n" {} \; | sort -nr | head -1

2.删除某个目录下的6个月之前修改的文件

find ./ -name "*.log" -mtime +180 -exec rm -rf {} \;

3.统计文件夹内部文件总大小(s=summary h=human)

du -sh

4.查看端口占用情况,以及被谁占用

/usr/sbin/lsof -i:80

5.同步目录到另一台服务器指定目录

rsync -r /opt root@10.10.10.11:/opt

6.替换指定几行的字符串

:2,10s/aaa/bbb/g #从第2行到第10行替换aaa到bbb

7.替换当前目录下匹配文件的字符串为另一个字符(经常用来修改配置文件)

sed -i "s/10.11.12.115/10.16.10.12/g" /opt/projects/deploy/config/base.php

8.查看LINUX发行版的名称及其版本号的命令

cat /etc/issue

9.根据nginx日志统计最大qps

awk -F"," '{print $1}' nginx.log | sort | uniq -c | sort -n -r | head -n 1

10.ssh登陆使用指定密钥登陆

ssh -i <identity_file> root@123.134.23.43

11.查看linux占用的端口号

netstat -an | grep "LISTEN"

12.指定文件列宽(给你一长串不换号文本转换后方便查看)

cat fileData | fold -w 64
fold -w 64 fileData

13.查看文件夹的容量大小

//这里的m可以替换为k,g(kb,mb)
du -sm ./

14.从id.pub文件计算指纹fingerprint

ssh-keygen -E md5 -lf ~/.ssh/id_rsa.pub