Home avatar

这是我的个人网站

nginx相关

关闭 nginx nginx -s stop

重新加载 nginx -s relaod

  1. 全局配置

    影响 nginx 服务器整体运行的配置指令

    eg:worker_processes 1; // 越大 并发越大

  2. event 块

    nginx 服务器与用户的网络连接

git 常用命令

git log --since=midnight --author="$(git config user.name)" --pretty=tformat: --numstat  | awk '{add += $1; del += $2; loc += $1 - $2} END {print "新增:", add, "删除:", del, "净增:", loc}'
git log --since="1 week ago" --author="$(git config user.name)" --pretty=format:"%ad" --date=short --numstat | awk '
/^[0-9]{4}-[0-9]{2}-[0-9]{2}/ {
    date = $0; next
}
NF == 3 {
    add[date] += $1
    del[date] += $2
    loc[date] += $1 - $2
}
END {
    for (d in add)
        print d, "新增:", add[d], "删除:", del[d], "净增:", loc[d]
}' | sort
git clone -b v5.12 git@gitee.com:xxx/xxx.git
 git ck -b feature-tszz_iter1.0 origin/feature-tszz_iter1.0
git log --graph --pretty=oneline --abbrev-commit
git remote add origin git@github.com:michaelliao/learngit.git
git push -u origin master
git diff readme.txt
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
git config --global alias.lg "log --graph --pretty=oneline --abbrev-commit"
git config --global alias.st "status"
git config --global alias.ck "checkout"
git config --global alias.br "branch"
  • 命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
  • 命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;
  • 命令git tag可以查看所有标签。
  • 命令git push origin <tagname>可以推送一个本地标签;
  • 命令git push origin --tags可以推送全部未推送过的本地标签;
  • 命令git tag -d <tagname>可以删除一个本地标签;
  • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
git log --since="6am"
# 暂存包含新增的文件(即未跟踪)并注释 msg
git stash save -u "msg"

# 应用指定暂存
git stash apply stash@{1}

fatal: refusing to merge unrelated histories

PHP webhook 部署码云

有一个仓库(可以自建,也可以用线上的),将开发者本地的代码每次修改管理起来,可以查看修改记录,回滚等,常用的管理工具有svn 、git等,主流 git。

简要流程:

  1. 修改代码
  2. 提交修改到仓库

当然反过来也可以: 从仓库下载代码到本地  svn: 叫检出( svn checkout path); git 叫 拉取(git pull)

本地修改的代码要上传服务器,才能生效

composer

composer require “mk-j/php_xlsxwriter” –no-update

“require”: { “vendor/package”: “1.3.2”, // exactly 1.3.2

// >, <, >=, <= | specify upper / lower bounds
"vendor/package": ">=1.3.2", // anything above or equal to 1.3.2
"vendor/package": "<1.3.2", // anything below 1.3.2

// * | wildcard
"vendor/package": "1.3.*", // >=1.3.0 <1.4.0

// ~ | allows last digit specified to go up
"vendor/package": "~1.3.2", // >=1.3.2 <1.4.0
"vendor/package": "~1.3", // >=1.3.0 <2.0.0

// ^ | doesn't allow breaking changes (major version fixed - following semver)
"vendor/package": "^1.3.2", // >=1.3.2 <2.0.0
"vendor/package": "^0.3.2", // >=0.3.2 <0.4.0 // except if major version is 0

}

linux发udp包

Linux 直接发送UDP包

如果往本地UDP端口發送數據,那麼可以使用以下命令:

echo "hello" > /dev/udp/192.168.1.81/5060

意思是往本地192.168.1.81的5060端口發送數據包hello。

Mysql 范式 事务 锁

  1. 非标准化形式: 主键不能重复;不出现重复记录

  2. 字段原子性,不能再分

反例: 联系方式  =》(电话,邮箱)

  1. 不能存在部分依赖。 随着主键值的变化,其它列名也必须随之而变化,如果主键是几个列名的组合,其它列名(副键)必须同时被这几个列名影响,少一个的话,不行。

反例:   组件id,价格,供应商id,供应商名称,供应商地址。 同一个组件有可能由不同的供应商提供,故 组件 id 和 供应商 id 组成主键, 价格 和 主键  完全依赖; 供应商名称和地址 只依赖于 供应商 id, 部分依赖

PHP 和 Nginx 通信

启动 php-fpm,通信模式, TCP socket, Unix scoket。

PHP-FPM 启动两种进程, master:监控端口、分配任务,管理 worker 进程, worker: 就是 php 的cgi 程序,解释和编译执行 php 脚本。

PHP 基础

  1. 当 $a 是以下 值时候 (boolean) $a  为假 false:
  • 未设置的变量
  • var $a;  未初始化 $a 的值
  • $a = null;
  • false
  • 0
  • ''
  • ‘0’
  • []
  1. 以上值 empty() 是均为 true 。
  2. isset() 检测 一个变量设置了,且不为 null ,所以仅仅前 3 条 为 false 。
  3. is_null() 正好与 isset() 相反, 仅仅 前 3 条 为 true 。
  4. gettype() 前3条 ,均返回 null,即 类型 未知。

相同点 都是利用回调函数对数组中每个元素进行操作。

PHP 垃圾回收机制

众所周知,php 是用 c 语言写的,所以其变量存储也依赖于 c 语言。php 的变量的内部是使用一种 zval 的数据结构来保存的。

// php源码 Zend/zend.h 文件中
typedef struct _zval_struct zval;
// ...
struct _zval_struct {
    zvalue_value value;     /* 变量的值 */
    zend_uint refcount__gc; /* 指向该变量容器的变量(也称符号即symbol)个数 */
    zend_uchar type;    /* 变量的类型 */
    zend_uchar is_ref__gc; /* 是否是引用 默认 false */ 
};

refcount__gc 为 0 表示没有变量指向这个内存容器, 就可以被释放。

Unix 过滤器

过滤器可以用于管道,通过组合,解决实际问题,优雅而强大。

常用过滤器

cat name.txt mobile.txt > data # 合并文件

# -n 显示行号
split [-d] [-a num] [-l lines] [file [prefix]]

split data # 默认每个文件1000行 命名 xaa xab ...

# -l 100 : 指定每个文件行数
# -d :改命名为 00 01 02
# -a 2 : 命名改为 3 位 aaa aab / 001 002

和 cat 类似, 写入标准输出前将文本行反转,适用于日志文件等。