啥也搜不到👀,再试试别的词吧。
# 本地分支操作
git branch # 查看本地分支
git branch -r # 查看远程分支
git branch -a # 查看所有分支
git branch [name] # 创建本地分支
git branch -d [name] # 删除分支
git checkout [name] # 切换分支
git checkout -b [name] # 创建新分支并立即切换到新分支
git merge [name] # 合并name分支到当前分支
# 远程分支操作
git push origin [name] # 创建远程分支(本地分支push到远程)
git push origin :heads/[name] # 删除远程分支
git push origin test:master # 提交本地test分支作为远程的master分支,远程的github就会自动创建一个test分支
git push origin test:test # 提交本地test分支作为远程的test分支
git push origin :test # 删除远程分支,刚提交到远程的test将被删除,但是本地还会保存的,不用担心
# 修改默认HEAD指向分支
vim .git/refs/remotes/origin/HEAD
`ref: refs/remotes/origin/master`
------
* 整形长度
| 数据类型 | 字节数*8=二进制位数b | 带符号 -2^(b-1) ~ 2^(b-1)-1 | 不带符号 0 ~ 2^b-1 |
|:---------:|-------------------|--------------------------------------------|-------------------------------|
| TINYINT | 1byte * 8 = 8bit | -128 ~ 127 | 0 ~ 2^8-1=255 |
| SMALLINT | 2byte * 8 = 16bit | -32768 ~ 32767 | 0 ~ 2^16=65535 |
| MEDIUMINT | 3byte * 8 = 24bit | -8388608 ~ 8388607 | 0 ~ 2^24=16777215 |
| INT | 4byte * 8 = 32bit | -2147483648 ~ 2147483647 | 0 ~ 2^32=4294967295 |
| BIGINT | 8byte * 8 = 64bit | -9223372036854775808 ~ 9223372036854775807 | 0 ~ 2^64=18446744073709551616 |
------
* 浮点型长度
| 数据类型 | 字节数 | 备注 |
|:------:|-----|--------|
| float | 4 | 单精度浮点型 |
| double | 8 | 双精度浮点型 |
------
* 字符串长度
| 特性 | CHAR | VARCHAR |
|--------|----------------------------------------------|----------------------------------------|
| 长度 | 定长,固定字符数
最大255个字符
数据长度不足声明值时,在尾部自动填充空格 | 长度可变,可设置
最大存储字符数最大不超过行大小(默认65535字节) |
| 前缀 | 无 | 1~2字节 |
| 有否尾部空格 | 长度不足默认用空格填满
检索和获取时会自动去除 | 不会自动填充空格输入值就包含空格,则会存储,检索和获取数据都会体现 |
| 超长处理 | 超长部分如果是空格自动截断
如果是字符,严格模式下会报错 | 超长部分如果是空格自动截断,并生成警告
如果是字符,严格模式下会报错 |
| 存储开销 | 数据值的字节和 + 补位空格数 | 数据值的字节和 + 长度标识字节数 |
`varchar`最长占用 65535 byte。
* 字符类型若为 gbk,每个字符最多占2个字节,最大长度不能超过32766字符
* 字符类型若为 utf8,每个字符最多占3个字节,最大长度不能超过21845字符
* 字符类型若为 utf8mb,每个字符最多占4个字节,最大长度不能超过16383字符
MySQL 5.0版本之后,`varchar(n)`是几,就能存几个中文字。
* `InnoDB` 单列索引长度最大 `767 bytes`,实际上联合索引还有一个限制是 3072 bytes。
所以建立索引`varchar`最大长度 `gbk=767/2=383`,`utf8=767/3=255`,`utf8mb=767/4=191`。
所以好多人默认`varchar(255)`,其实就是 utf8 编码下 varchar 能建索引的最大长度。
------
* 日期和时间长度
| 类型 | 大小(字节) | 范围 | 格式 | 用途 |
|-----------|--------|-----------------------------------------|---------------------|--------------|
| DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
| TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
| YEAR | 1 | 1901/2155 | YYYY | 年份值 |
| DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
| TIMESTAMP | 4 | 1970-01-01 00:00:00/2038 等于int(4) | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
不能给MySQL的date类型的列设置默认值。
TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储
# centos 6.8
rpm -Uvh http://ftp.riken.jp/Linux/fedora/epel/6Server/x86_64/epel-release-6-8.noarch.rpm
yum -y install docker-io
:set encoding=utf-8 # 更改编码
:set nu! # 显示行号
:set wrap # 自动换行
:set no|nc # 忽略大小写,[no]ignorecase,
# 如果只是想在搜索或者替换的时候偶尔忽略大小写,而不更改全局变量,加 \c即可: /nancy\c
vim .git/config # 查看项目皮配置
git status # 项目目录里
git branch -a # 查看所有分支,*代表本地
git diff 文件 # 当期文件修改
git log # 查看提交日志
git log -p # 查看提交日志,包含代码
git log --graph # 以图表形式查看分支提交日志
git show # 查看最近一次提交代码
git show commit_id # 查看某一次提交代码
git remote -v # 查看远程仓库
git remote add [name] [url] # 添加远程仓库
git remote rm [name] # 删除远程仓库
git remote set-url --push[name][newUrl] # 修改远程仓库
git pull [remoteName] [localBranchName] # 拉取远程仓库
git push [remoteName] [localBranchName] # 推送远程仓库
* # 根据 minimum-stability 的值情况来决定安装最新的 dev
dev-master # 指定分支下最新代码
~1.2 # ~ 的作用是允许表达式中最后一位变到最大值,1.0 - 1.99
~0.2.3 # ~ 表示最后一位可变,0.2.0 - 0.2.99
^1.2 # ^ 锁定不允许变的第一位,1.xx - 1.99.99
>= 1.3 <1.6、>=1.3 | >=1.7 、3.0|4.0 # 版本控制在某些范围
=1.2.34 或者 1.2.34 # 指定了具体的版本号
composer show # 显示当前安装的包及版本
composer update # 会根据 composer.json 更新最新版,开发时使用
composer install # 会根据 composer.lock 安装指定版本,生产环境使用,最好提交到 git 库,使项目保持一致
https://help.github.com/en/articles/about-searching-on-github
user: USERNAME 按用户搜代码
org: ORGNAME 按组织搜代码
repo: USERNAME/REPOSITORY 按项目搜代码
define('IN_DISCUZ', true);
require_once './source/function/function_core.php';
require_once './source/class/discuz/discuz_database.php';
require_once './config/config_global.php';
class DB extends discuz_database {}
$driver = function_exists('mysql_connect') ? 'db_driver_mysql' : 'db_driver_mysqli';
require_once \"./source/class/db/$driver.php\";
DB::init($driver, $_config['db']);
【model】/【preg】/[【str】]/【action】
# 【model】
g # 匹配所在行
v # 不匹配
【line】s # 匹配line
s # 匹配当前行
9s # 第9行
9,20s # 9-20行
.,20s # 当前行-20行
%s # 所有行
9,$s # 9行到底部
.,$s # 当前行到底部
# 【preg】
\c 忽略大小写
# 【action】默认操作第一个
d # 删除
g # 全部操作
i # ignore,忽略大小写
# 删除示例
[num]dd # 向下删除[num]1行
:g/INSERT.*99cms_news\c/d # 删除包含[不包含]字串‘INSERT.*99cms_news’的行 \c忽略大小写
:v/INSERT.*99cms_news\c/d # 删除不包含字串‘INSERT.*99cms_news’的行 \c忽略大小写
:g/^\s*$/d # 删除空行
:g/^\(.*\)$\n\1$/d # 删除重复行( 需先 :sort )
:%s/\s\+$//g # 删除行尾空格
# 替换示例
:n,$s/vivian/sky/g # 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
:%s/,/\r/g
var tips = [
'在【操作详细】里搜“API”,可以查看日志',
'在【操作详细】里搜IP地址如“192.168.80”,可以查看该IP日志',
'限制IP里 * 代表所有',
];
var dd = parseInt(Math.random() * tips.length);
$scope.tips = tips[dd];
:tabe /file # 新标签打开文件,不输入file则打开空标签
gt # 切换到下一个标签
gT # 切换到上一个标签
:tabfir # 切换到第一个标签
:tabl # 切换到最后一个标签
Ngt # 切换到N号标签
max(array_keys($descArr)); // 获取数组最大的key
array_filter([1, 0, 2, null, 3, 6, 7]); // 去取数组( == false )的值,保留键值
array_unique([1, 0, 2, true, '1', false, null, 2, 7]); // - 去除数组中重复的元素值 res: [0]=> int(1) [1]=> int(0) [2]=> int(2) [5]=> bool(false) [8]=> int(7)
shuffle(array); # 打乱数组排序
printf("%b", 250); //将250转成二进制: 11111010
printf("%o", 250); //将250转成八进制: 0372
printf("%x", 250); //将250转成十六进制: 0xfa
sprintf("%04d", 13); // 补全4位:0013
# install
yum -y install nodejs
yum -y install npm
npm install gulp -g # global
npm install gulp --save # save to package.json
# Ubuntu install last nodejs
curl -sL https://deb.nodesource.com/setup_6.x | sudo bash - # source
sudo apt-get install nodejs
# other
npm install -g # 没有包则下载,有则更新包依赖
npm config set registry https://registry.npm.taobao.org # taobao 镜像
sudo ln -s /usr/bin/nodejs /usr/bin/node # Ubuntu
// 截取
echo substr('我是王伟龙', -3); // 取最后一个汉字
substr('ifeng.com.txt', -4) == '.txt' && echo 'yes'; // 判断最后四位是不是 .txt
// 小数处理
# 倒计时界面enter安装,一直下一步
chkconfig iptables off # 开机关闭iptables
service iptables stop # 立即关闭iptables
# 设置网络连接为【NAT】
service sshd start # 开启ssh
GRANT ALL PRIVILEGES ON *.* TO 'weilong'@'192.168.3.94' IDENTIFIED BY 'mypwd' WITH GRANT OPTION;
GRANT Select ON *.* TO 'weilong'@'172.30.%' IDENTIFIED BY "Wwl_Jumpbox_666";
flush privileges;
service docker start # 启动服务
systemctl enable docker # Centos 开机启动
# docker CONTAINER 镜像
docker pull
docker images # 查看安装的镜像
docker run # 在容器内运行镜像
docker rmi
# 删除镜像
# docker CONTAINER 容器
docker ps -a # 查看所有容器
docker start # 开始该容器
docker stop # 停止该容器
docker rm # 删除该容器
docker attach # 进入正在运行的容器
docker exec -it /bin/bash # 以bash进入容器
# Dockerfile
docker build -t
.
# ⌘ mac command; win win
⌘ shift [ # 切换到左边的标签
alt shift ↓ # 重复当前行
⌘ k ⌘ s # 设置快捷键
# 光标移动
On Windows:
Alt+← .. navigate back
Alt+→ .. navigate forward
On Mac:
Ctrl+- .. navigate back
Ctrl+Shift+- .. navigate forward
On Ubuntu Linux:
Ctrl+Alt+- .. navigate back
Ctrl+Shift+- .. navigate forward
:di # 查看所有寄存器信息
"Ny # 将匹配内容放入N号寄存器
"Np # 粘贴N号寄存器信息
yum -y install zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/wilon/oh-my-zsh/master/tools/install.sh)"
chsh -s /bin/zsh # 修改默认zsh,需重启。或修改 /etc/passwd
zsh # 手动切换
sh -c "$(curl -fsSL https://raw.githubusercontent.com/wilon/oh-my-zsh/master/tools/simple_install.sh)" # bash config
wget https://raw.githubusercontent.com/wilon/oh-my-zsh/master/templates/inputrc.zsh-template -O ~/.inputrc # inputrc config
😍🎍😍7f73045a2a935774😍🎍😍
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup # 备份
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo # 下载相应的yum源
yum clean all # 运行yum
yum makecache # makecache生成缓存
注意重复加双杠 (\\d)\\\\1
按 t 键会打开一个文件浏览器
按 l 键会显示跳转到行的工具
按 s 键会激活顶端的搜索栏
git clean -n # 是一次clean的演习, 告诉你哪些文件会被删除. 记住他不会真正的删除文件, 只是一个提醒
git clean -df # 删除当前目录下没有被track过的文件和文件夹
git clean -xf # 删除当前目录下所有没有track过的文件. 不管他是否是.gitignore文件里面指定的文件夹和文件
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
wget https://raw.githubusercontent.com/wilon/oh-my-zsh/master/templates/vimrc.zsh-template -O ~/.vimrc
vim +PluginInstall +qall
vim +PluginUpdate +qall
# 以xx配置操作
vim -u ~/.wvimrc 文件
vim -u ~/.wvimrc +PluginInstall +qall
vim -u ~/.wvimrc +PluginUpdate +qall
# 一键脚本
已集成到 https://raw.githubusercontent.com/wilon/oh-my-zsh/master/templates/vimrc.zsh-template
# 重启电脑
shutdown -h|-r now # 安全关机|重启,now可以更改为时间
reboot # 重启
# 重启\服务:
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
/etc/rc.d/init.d/nginx restart
service nginxd reload
date_default_timezone_set('PRC'); // 同php.ini设置 date.timezone = PRC
file_put_contents(dirname(__FILE__) . '/params.log', json_encode($data), FILE_APPEND);
cp LOCAL_FILE REMOTE_USERNAME@REMOTE_IP:REMOTE_FOLDER
echo $PATH # 查看可以PATH,按优先级排列
echo 'aaaaaa' > test.htm
echo -n 'aaaaaa' > test.htm # 没有换行
# setting: "terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe",
# win-git 安装时需选上允许credential,win git 允许凭证
sh -c "$(curl -fsSL https://raw.githubusercontent.com/wilon/oh-my-zsh/master/tools/win_gitbash_install.sh)"
# PATH
php -i | grep configure # 可以查看【PHP安装目录】位置
php -i | grep php.ini # 可以查看【php.ini】位置
php -i | grep -i extension # 查看php扩展信息
ps aux | grep php-fpm.conf # 可以查看【php-fpm.conf】位置
php-fpm -t # 可以查看【php-fpm.conf】位置
export PATH=$PATH:PHP安装目录/php/bin # php命令加入path
# CONFI 配置文件
php -v
# TEST
wget https://wilon.github.io/static/p.php # 雅黑PHP探针
* like %keyword 不走索引,使用全表扫描。但可以通过翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全表扫描。
* like keyword% 索引有效。即支持前缀索引。
* like %keyword% 不走索引,也无法使用反向索引。
* int float 都可以 like,但就不走索引了,keyword% 索引也失效
------
* where 条件等号两边字段类型不同,不走索引
* 对字段进行函数运算,如sum,不走索引
* 组合索引 只使用后面的字段不走索引,使用前后的字段走索引. 第一个字段有参于(而且字段类型匹配 没有函数运算),那么会走索引,第一个字段可以在sql中的任意位置
* 组合索引遇到第一个不等值条件 即中断后面字段使用索引
------
* in、not in、>、< 等通常是走索引的,但走不走索引和筛选后的数据有关系。当后面的数据在数据表中超过30%的匹配时,会走全表扫描,即不走索引。
------
* 全表扫描会比使用索引更快
// usort更新索引为0123,uasort为保持索引
$arr['a'] = ['name' => 'weilong', 'num' => 3, 'volume' => 98];
$arr['b'] = ['name' => 'weimong', 'num' => 2, 'volume' => 88];
$arr['c'] = ['name' => 'weicong', 'num' => 1, 'volume' => 77];
uasort($arr, function($a, $b) {
if ($a['num'] == $b['num']) return 0;
return ($a['num'] > $b['num']) ? 1 : -1;
});
# 凌晨备份数据库
0 2 * * * /usr/bin/mysqldump -uDUMPUSER -pDUMPUSERPWD DATABASE | gzip > /data/backup/mysql/TABLE_$(date +"\%Y\%m\%d").sql.gz
# 只保留最近5天
0 2 * * * find /data/backup/mysql/ -name "TABLE_*.sql.gz" -type f -mtime +5 -exec rm {} \; > /dev/null 2>&1
# Mac、Linux 更新host,科学上网
*/10 * * * * /usr/bin/curl -o /private/etc/hosts https://raw.githubusercontent.com/googlehosts/hosts/master/hosts-files/hosts
# 检测服务
if test `pgrep nginx | wc -l` -eq 0; then /usr/sbin/service nginx start > /dev/null; fi;
if test `pgrep php-fpm | wc -l` -eq 0; then /usr/sbin/service php7.0-fpm start > /dev/null; fi;
if test `pgrep mysql | wc -l` -eq 0; then /usr/sbin/service mysql start > /dev/null; fi;
# 检测 URL
*/10 7-23 * * * (/usr/bin/wget -O /tmp/wechat.check http://wx.baitongshiji.com/wechat/check || /usr/sbin/service docker restart) >> /tmp/wechat.check.log 2>&1
# Doc: https://cs.laravel-china.org/#db
$table = DB::table('user');
$table->get() # 对应类:illuminate/support/Collection.php
$table->pluck('ipgroup_id')->all(); # 获取单个字段的数组
$table->where([ # 多个where条件1种写法
'uid' => 'xiaoming',
'ip' => '192.90.1.140',
])->all();
$table->where([ # 多个where条件2种写法
['uid', 'xiaoming'],
['ip', '192.90.1.140'],
])->all();
$table->where('uid', 'xiaoming') # 多个where条件3种写法
->where('ip', '192.90.1.140')
->all();
awk ‘!a[$0]++’ path/to/file # 去除重复行
cat cache/smtp.log | grep "To" | awk '{print $9;}' | sort | uniq -c # 查看邮件日志 | 有“To”的行 | 列出用户 | 排序 | 统计用户出现次数
awk '{print length($0), $0}' /tmp/awords.log | sort -nr | head -n 7 # 统计出文件内字符最多的7行
for i in `ls`; do cp -f $i `echo $i | sed 's/^\([0-9]\..*md\)$/0\1/'`; done # 目录下 1.xx.md 2.xx.md 复制为 01.xx.md 02.xx.md
for i in `ls`; do cp -f $i `echo $i | sed 's/\..*px_.*_.*.net.png$/.png/'`; done # 批量修改多余文件后缀
sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir` # 把目录下所有文件的 oldstring 替换为 newstring
sed -i "s/garden/mirGarden/g" ./readme.md # 将文件内的字符替换
sed -i "s/garden/mirGarden/g" `ls` # 将当前文件夹下所有文件内的字符替换
ed 's/=.*/=xxx/' .env > .env.example # 生成.env的.env.example
CTRL-G :f :fi :file # 查看文件具体位置
ctrl+o # 上一个编辑位置
ctrl+i # 下一个编辑位置
ctrl+w gf # 新标签打开光标所在文件
:marks # 可以查看有哪些标记文件
'N # 打开N号标记文件'
:ls # 查看缓冲区文件,同buffers、files
:bn # 打开n号缓冲区文件
// 1. PHP文件的编码格式, gbk->utf-8
$content = iconv('GBK', 'UTF-8', $content); // 推荐
$content = mb_convert_encoding($content, 'UTF-8','GBK');
$data = eval('return ' . iconv('GBK', 'UTF-8', var_export($data, true)) . ';'); // 数组
2. PHP文件中:header('Content-type:text/html;Charset=utf-8');
3. 浏览器的查看编码
4. <meta charset='utf-8'/>
5. mysql_set_charset('utf8');
6. mysql> set names utf8;
import (
// 可以省略前缀 fmt.Println() => Println()
. "fmt"
// 不使用此包,只调用 pprof.init()
_ "net/http/pprof"
// export GO111MODULE=on 引入本地包
// go.mod 设置 local/package
// 如下则引入了当前目录下 libs 包
"local/package/libs"
)
echo print die isset unset include require array list empty
// 注意,include_once()是函数;
// 注意,require_once()是函数;
$var1 = new stdClass();
$var2 = (object)[];
$var3 = json_decode('{}');
# 配置项目
svnadmin create /home/svn/newproject # 新建项目newproject
vim /home/svn/newproject/config/svnserve.conf
anon-access = read
auth-access = write
# 默认为/home/svn/newproject/config下,可定义
authz-db = authz # 权限管理文件
password-db = passwd # 用户名密码文件
# 配置权限组
vim /home/svn/newproject/config/authz
[groups] # 分组
developer = weilong
[/] # 分组权限
@developer = rw
# 配置用户=密码
vim /home/svn/newproject/config/passwd
[users]
weilong = 123456
# 能识别的目录!直接service httpd start
/etc/rc.d/init.d/
· redis、memcached区别
· cookie、session区别
· 手写冒泡排序、快速排序
· 手写单例模式、工厂模式
Ctrl (Command) + Shift + p # 打开命令面板
Package Control: Add Channel # 找到并打开
# 添加
https://wilon.github.io/static/channel_v3.json # github
http://wilon.oschina.io/static//channel_v3.json # oschina 国内比较快
# 主分支master下
git add file/* # 添加文件
git commit [-a] -m '说明' # 提交到本地库,-a所有改动
git pull # 从远程库拉取
# 解决冲突
git push [origin master] # 提交到远程库,默认master
// 静态方法没有实例化类,没有$this,没有调用 function __construct()
static function someFunc(){
echo self::$country;
// echo $this->name; ❌错误
}
// const 一旦定义不能更改
// 静态变量魔术方法不起作用
# 用反射获取类的信息
$ref = new \ReflectionClass($class);
print_r($ref->getConstants());
print_r($ref->getProperties());
print_r($ref->getMethods());
# 使用代理
export http_proxy=http://127.0.0.1:51967
export https_proxy=http://127.0.0.1:51967
go get ...
# 参数
go get -u abc # 下载丢失的包,但不会更新已经存在的包
go get -t abc # 同时也下载需要为运行测试所需要的包
go get -d abc # 只下载,不安装
go get -v abc # 显示操作流程的日志及信息,方便检查错误
echo alias ws=\\'cd /home/wwwroot/default/\\' >> ~/.bashrc && source ~/.bashrc
activate-power-mode # 敲代码动态炫效果 —— SETTING: 屏幕关,按键关;CONTROL: ActivatePowerPode-Toggle
pigments # 文件颜色即时显示
minimap # 代码缩略图
/**
*|————————————————————————————————————————————————————————————|
*| | a | 王伟龙 |
*| ASCII | 97 | 231 142 139 228 188 159 233 190 153 |
*| Unicode | \\u0061 | \\u738b\\u4f1f\\u9f99 |
*| UrlEncode | a | %e7%8e%8b%e4%bc%9f%e9%be%99 |
*|————————————————————————————————————————————————————————————|
*/
// 函数
string chr ( int $ascii ) // 返回相对应于 ASCII 所指定的单个字符
int ord ( string $string ) // 返回第一个字符的ASCII码值
ma # 设定标记a
`a # 跳到标记a
`` # 跳转前的位置
`[ # 最后修改的位置的开头
`] # 最后修改的位置的结尾
:delmarks a # 删除标签a;
:delmarks! # 删除所有标签,不包括[A-Z]和[0-9]标签。
# 安装配置
yum -y install vixie-cron # 软件包是cron的主程序;
yum -y install crontabs # 软件包是用来安装、卸装、或列举用来驱动cron守护进程的表格的程序。
service crond start # 启动服务
chkconfig --level 345 crond on # 配置开机启动
# 参数
crontab [ -u user ] -l # 列出当前用户(指定用户)的任务
crontab [ -u user ] -e # 编辑当前用户(指定用户)的任务
crontab [ -u user ] -r # 清除当前用户(指定用户)的任务
# 配置命令行
MAILTO=""
SHELL=/bin/sh
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin # echo $PATH查看
# 日志
30 21 * * * php -v > /dev/null 2>&1 # 不保留输出
30 21 * * * php -v >> /tmp/test.log # 保存日志
*/1 * * * * (echo $(date +"\%Y-\%m-\%d \%H:\%M:\%S") && echo 1233333) >> /tmp/crond.log 2>&1 # 测试服务是否正常
# 定时任务: 分 时 日 月 周 命令
30 21 * * * /usr/local/etc/rc.d/lighttpd restart # 每晚的21:30重启apache。
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart # 每月1、10、22日的4 : 45重启apache。
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart # 每周六、周日的1 : 10重启apache。
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart # 在每天18 : 00至23 : 00之间每隔30分钟重启apache。
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart # 每星期六的11 : 00 pm重启apache。
* */1 * * * /usr/local/etc/rc.d/lighttpd restart # 每一小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart # 晚上11点到早上7点之间,每隔一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart # 每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart # 一月一号的4点重启apache
*/30 * * * * /usr/sbin/ntpdate 210.72.145.44 # 每半小时同步一下时间
# 查看网卡信息
控制面板 -> 网络 -> 更改适配器配置 -> 状态 -> 详细信息
# 设置eth0
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
IPADDR={ip}.{ip}.{ip}.188 # 即为连接IP
NETMASK=255.255.255.0
GATEWAY={ip}.{ip}.{ip}.2
DNS1=114.114.114.114
BROADCAST={ip}.{ip}.{ip}.255
ONBOOT=yes
NAME=loopback
# 设置临时 dns
echo "nameserver 114.114.114.114" >> /etc/resolv.conf
git clone https://github.com/Wilon/mynote.git # 克隆一个项目
git reset --hard HEAD~1 # 回退所有内容到上N个版本,数字可变
git config user.name "Travis CI" && git config user.email "travis@travis-ci.org" && date > data/pushdata && git commit -a -m "$(date)" && git push # 自动提交且不产生activity
# TortoiseGit 使用 id_rsa
# 1. 生成Putty key:puttygen工具,Conversions -> Import key -> Save private key;
# 2. clone时使用
ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa -q -b 2048 # 生成公私钥
ssh-keygen -l -f ~/.ssh/id_rsa.pub # 查看公钥指纹
df -h # 查看磁盘空间
du -sh * # 查看当前目录下个文件(夹)大小
du -sh * | sort -rn | grep "M\s" # sort
ls | wc -l # 查看当前文件夹下文件(夹)的个数
ls -l | grep "^-" | wc -l # 查看当前文件夹下文件的个数
ls -lR | grep "^-" | wc -l # 查看某目录下文件的个数,包括子目录里的。
ls -lR | grep "^d" | wc -l # 查看某文件夹下目录的个数,包括子目录里的。
ll --full-time # 查看文件的完整时间信息
ll -t | head -n 5 # 查看最新的5个文件
find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo -e $(find {} | wc -l) {}' | sort -n # 统计当前目录下每个文件夹包含的文件数
ctrl+a 跳转至行首,ctrl+e 跳转至行尾
ctrl+k 快清至行首,ctrl+u 快清至行尾
ctrl+w 清除当前光标位置之前的一个单词
ctrl+c 强制终止,ctrl+l 清屏
cmd !! 双惊叹号表示上一行命令
!cmd 执行最近的已cmd开头的命令
# 添加
ctrl+v j # 选中多行
I # 大写,插入模式,进行输入
Esc # 多行起作用
# 删除
ctrl+v j # 选中多行
d [x] # 删除模式
redis-cli -h 127.0.0.1 -a passwd123 monitor # 查看实时操作
构建镜像时会执行Dockerfile中的RUN命令
容器启动的时候会执行Dockerfile中的CMD命令
empty($a['a']); // 若$a['a']所等于的值是0或null,则为真!
isset($b['b']); // 若$b['b']存在'b'这个键,则为真!
第一行,任务队列信息 — 当前系统时间 — 系统运行时间 — 当前用户登录数 - 负载情况
第三行,CPU状态信息 - 用户空间占用CPU的百分比 — 内核空间占用CPU的百分比, id — 空闲CPU百分比
第四行,内存状态 - 物理内存总量 — 使用中的内存总量 — 空闲内存总量 — 缓存的内存量 # 8,000,000 = 8G
第五行,SWAP交换分区信息 — 交换区总量 — 使用的交换区总量 — 空闲交换区总量 — 缓冲的交换区总量
第七行以下:各进程(任务)的状态监控
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
-d # 使用于服务型,containter将会运行在后台模式(Detached mode)。此时所有I/O数据只能通过网络资源或者共享卷组来进行交互。注意:--rm 和 -d不能共用!
--rm # 使用执行命令型,在container结束时自动清理其所产生的数据。注意:--rm 和 -d不能共用!
--restart=always # 随docker服务自启动
[num] t [character] # 匹配到单个字符光标前;f光标后
[num] w|b # 上[下]N个单词
/string # 匹配到string(不包含)
H|M|L # 匹配到窗口的顶部、中间、和底部
[num]( # 匹配到句首 )句尾 {段首 }段尾 ]]下一个方法名 [[上一个方法名
# SQLyog
1. 永久试用:HKEY_CURRENT_USER\\SOFTWARE 对应的权限锁死;
2. 字体改为Consolas,14px;
WHERE 在数据分组前进行过滤,HAVING 在数据分组后进行过滤。
WHERE 排除的行不包括在分组中。这可能会改变计算值,从而影响 HAVING 子句中基于这些值过滤掉的分组。
例:学生表 id,name,class,math_score 筛选出数学及格人数大于30的班级
`select id, count(*) as c from users where math_score >= 60 group by class having c > 30`
------
ON 在 join 前过滤,WHERE 在 select t1 join t2 后过滤。
流程:`select * from table1 left join table2 on (c1 and c1) where w1 and w2`
按条件 w1 筛选出table1 => 左联按 c1 and c1 筛选后的 table2 => 最终结果按 w2 筛选
原子是组成正则表达式的基本单位,在分析正则表达式时,应作为一个整体。
原子包括以下内容:
> 单个字符、数字,如a-z,A-Z,0-9。
> 模式单元,如(ABC)可以理解为由多个原子组成的大的原子。
> 原子表,如 [ABC]。
> 重新使用的模式单元,如:\\1
> 普通转义字符,如:\d, \D, \w
> 转义元字符,如:\*,\.
*> 元字符
php -v > /dev/null 2>&1 # 不保留所有输出
php -v 2>/dev/null # 不保留错误输出
print_r($_FILES);
// Array (
// [pic] => Array ( //picname为前端表单name:<input type=\"file\" name=\"pic\"/>
// [name] => iphone5.jpg
// [type] => image/jpeg
// [tmp_name] => C:\\Windows\\Temp\\phpA6ED.tmp
// [error] => 0
// [size] => 89470
// )
// );
# 如果光标下为目录,则进入该目录;如果光标下是文件,则用vim打开该文件
- # 返回上级目录
c # 切换vim的当前工作目录为正在浏览的目录
i # 在瘦、长、宽和树形的各种列表方式间切换
s # 选择排序方式
p # 预览文件
t # 在新标签页里打开光标所在的文件/目录
ci{ # 删除{}内容,为插入模式
di] # 删除[]内容
di( # 删除()内容
yi' # 复制''内容
vi" # 选中""内容
console.log('wait 1s')
await new Promise(resolve => setTimeout(resolve, 1000));
console.log('wait 1s again')
await new Promise(resolve => setTimeout(resolve, 1000));
console.log('wait done')
/ # 根目录
/bin # 命令保存目录(普通用户就可以读取的命令)
/boot # 启动目录,启动相关文件
/dev # 设备文件保存目录
/etc # 配置文件保存目录
/home # 普通用户的家目录
/lib # 系统库保存目录
/mnt # 系统挂载目录
/media # 挂载目录
/root # 超级用户的家目录
/tmp # 临时目录
/sbin # 命令保存目录(超级用户才能使用的目录)
/proc # 直接写入内存的
/sys
/usr # 系统软件资源目录
/usr/bin/ # 系统命令(普通用户)
/usr/sbin/ # 系统命令(超级用户)
/var # 系统相关文档内容(系统可变数据保存目录)
/var/log/ # 系统日志位置
/var/spool/mail/ # 系统默认邮箱位置
/var/lib/mysql/ # 默认安装的mysql的库文件目录
pa aux
ps -ef | grep lantern | grep -v grep | awk '{print $2}' | xargs kill -9 # 杀死‘lantern’的进程
nohup php colloct.php & # 在后台运行
公众号验证token方法: https://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html
头像地址(大): http://wx.qlogo.cn/mmopen/PZI7pLaVibDOjmMHibk6NialWiaLru5XVlTfV207cH6bszhHHicE1Tr4tkF3wyZTvnYdbB2bbhtHxeN77icDalTJ1fOgfye44UUw7a/0
头像地址(小): 😍🎍😍85d4bcabeb5cd82f😍🎍😍
Chrome 打开 Lantern 主页
看[审查元素]:主页的 Remote Address 端口
修改代理设置:PROXY 127.0.0.1:端口; DIRECT
-- MyISAM 不支持事务
-- 事务内insert,未提交,但表id自增了
-- 事务内update,未提交前,表行锁了
show processlist; -- 查看连接线程
kill 12443827; -- 杀掉线程,锁解除
\"VMware安装目录\\vmrun\" start \"虚拟机文件目录\\xxxx.vmx\" nogui > vmrun.cmd
将vmrun.cmd放入开机启动目录startup\\
svn log # 查看提交日志
svn log -r 95 # 查看某次提交日志
svn log -l 2 # 查看最近2次提交日志
svn info [/project/path] # 查看项目信息
grep [-acinv] [--color=auto] 'string/preg' FILENAME/FILE_DIR
-a # 将 binary 文件以 text 文件的方式搜寻数据
-i # 忽略大小写的不同,所以大小写视为相同
-r # 递归查找 FILE_DIR
-n # 顺便输出行号
-c # 计算找到 '搜寻字符串' 的次数
-v # 反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
-o # 只输出文件中匹配到的部分。
-E # 匹配正则表达式
--color=auto # 可以将找到的关键词部分加上颜色的显示喔!
# 管道符 grep,适配 sed、awk 的正则
## 正则 . [] \(\) \{3\} \+ * \| [0-9] \s
## 字符 \. \[\] () {} + \* |
cat cache/smtp.log | grep '\([0-9]\+\.\)\{3\}[0-9]\+' # ip
# zgrep 在Gzip压缩文件中搜索
zgrep -i error /var/log/syslog.2.gz
git tag # 列出所有 tag
git tag v1.0.1 # 创建 tag: v1.0.1
git push origin --tags # 将 tag 推送到远库
git tag -d v1.0.1 # 删除本地 tag
git push origin :refs/tags/v1.0.1 # 删除远程仓库 tag
gulp.task('rev', ['js', 'css', 'md'], function() {});
// 同步执行:js, css, md,写 return 的会等待执行完才执行 rev
// 若:js 没写 return,css, md 写了,
// 则:css, md 执行完,js 仍在执行,同时开始执行 rev
svn merge -r 28:25 something # 回滚到版本号
1. 查看phpinfo —— PHP Version、Architecture、PHP Extension Build
2. 根据(1)的信息下载dll:http://pecl.php.net 搜索 打开链接
3. dll放入 php\\ext\\ ,php.ini 添加 extension=php_xxx.dll
# test.epub
mv test.epub test.zip
unzip test.zip -d test
cd test # some change
zip -r ../test_new.epub .
[] 表示单个字符的原子表
例如:[aoeiu] 表示任意一个元音字母
[0-9] 表示任意一位数字
[a-z][0-9]表示小写字和一位数字构成的两位字符
[a-zA-Z0-9] 表示任意一位大小字母或数字
[^] 表示除中括号内原子之外的任何字符 是[]的取反
例如:[^0-9] 表示任意一位非数字字符
[^a-z] 表示任意一位非小写字母
{m} 表示对前面原子的数量控制,表示是m次
例如:[0-9]{4} 表示4为数字
[1][3-8][0-9]{9} 手机号码
{m,} 表示对前面原子的数量控制,表示是至少m次
例如: [0-9]{2,} 表示两位及以上的数字
{m,n}表示对前面原子的数量控制,表示是m到n次
例如: [a-z]{6,8} 表示6到8位的小写字母
* 表示对前面原子的数量控制,表示是任意次,等价于{0,}
+ 表示对前面原子的数量控制,表示至少1次,等价于{1,}
? 表示对前面原子的数量控制,表示0次或1次(可有可无) 等价于{0,1}
例如:正整数:[1-9][0-9]*
整数:[\-]?[0-9]+
email:
() 表示一个整体原子。
也可以使用?:来拒绝子存储。 (?:.*?)
例如:(red) 字串red
(red|blue) 字串red或blue
(abc){2} 表示两个abc
【还有一个子存储单元的作用】
\1 读取第一个子存储单元
\2 读取第二个子存储单元
...
php里preg函数需要\\1
例:匹配ABAB格式数字 (\d\d)\\1|(\d)\\2(\d)\\3
| 表示或的意思
(rea|blue) 字串red或blue
^ 用在正则单元块的开头处,表示必须以指定的开头
$ 用在正则单元块的结尾处,表示必须以指定的结尾
. 表示任意一个除换行符之外的字符
常用组合: .*? 或 .+? 表示最小匹配所有字符(拒绝贪婪匹配)
# 1. 依赖
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev
# 2. 下载 tar 包,https://github.com/git/git/releases 解压
wget https://github.com/git/git/archive/v2.15.0.tar.gz
tar -zxvf v2.15.0.tar.gz
cd git-2.15.0/
# 3. 安装
make prefix=/usr/local all
make prefix=/usr/local install
# 4. 加入到环境变量,或者覆盖旧的git
/usr/local/bin/git version
varr colors = ['red', 'green', 'blue'];
var countColor = colors.length;
var colorsStr = colors.join(', '); // 拼接数组
var countColor = colors.push('black'); // 栈:末尾推入一项
var endColor = colors.pop(); // 栈:去除末尾项
var startColor = colors.shift(); // 队列:去除首项
var countColor = colors.unshift('red'); // 队列:首部推入一项
var colors = colors.sort(); // 从小到大排序
var colors = colors.reverse(); // 从大到小排序
var colors = colors.sort(function (v1, v2) {
if (v1.length > v2.length) {
return 1; // 前面的长就交换
} else {
return -1;
}
}); // 字符串由短到长排序
var colorsNew = colors.concat('yellow', ['brown', 'blue']); // 数组拼接
var colorsNew1 = colors.slice(2); // 返回去掉数2项后所有项的数组
var colorsNew2 = colors.slice(2, 4); // 返回去掉第2-4项的数组
var removedColors = colors.splice(2); // 返回去掉数2项后所有项的数组,colors为剩下值
var removedColors1 = colors.splice(2, 4); // 返回去掉第2项后数4项的数组,colors为剩下值
var removedColors2 = colors.splice(2, 4, 'white'); // 返回去掉第2项后数4项的数组,colors为剩下值,第2项+white
var removedColors2 = colors.splice(2, 0, 'white'); // 返回去掉第2项后共0项的数组,colors为剩下值,第2项+white
var index = colors.indexOf('red'); // red位置
var index1 = colors.lastIndexOf('red'); // red最后出现的位置
var index2 = colors.indexOf('red', 'black'); // red位置为-1后数black位置
var everyIsRed = colors.every(function (item, index, array) {
return item == 'red';
}); // 每一项都为red则返回true
var someIsRed = colors.some(function (item, index, array) {
return item == 'red';
}); // 有一项为red则返回true
var mapRes = colors.map(function (item, index, array) {
return item.toLocaleUpperCase();
}); // 每一项做操作,返回操作后数组
var joinRes = colors.reduce(function (prev, cur, index, array) {
return prev + index + ',' + cur; // index为cur键
}); // 并归对数组正序操作,返回操作后返回值
var joinRes = colors.reduceRight(function (prev, cur, index, array) {
return prev + index + ',' + cur; // prev为上次返回值
}); // 并归对数组反序操作,返回操作后返回值
# 用户操作
su weilong # 切换用户
sudo -i # 切换到root
useradd -G {group-name} weilong # 新建用户[到组]
# 密码操作
passwd weilong # 修改用户密码
userdel [-r|f] weilong # 删除用户[及目录|强制删除]
vim /etc/passwd[group|shadow] # 查看所有用户[组|密码]信息
# /etc/passwd 用户名:口令:用户标识号:组标识号:描述:主目录:登录Shell
# 组操作
gpasswd -a [-d] 用户名 组名 # 把用户加入[删除]到组
usermod -a -G groupA user # 将用户添加到组groupA中,而不必离开其他用户组
# 给用户添加sudo,需root操作
chmod 600 /etc/sudoers
echo 'weilong ALL=(ALL) ALL' >> /etc/sudoers
chmod 400 /etc/sudoers # 收起写权限
# 禁止用户登陆
usermod -L weilong # Lock 帐号weilong
usermod -U weilong # Unlock 帐号weilong
# ssh秘钥登陆服务端配置:/etc/ssh/sshd_config
RSAAuthentication yes # 使用RSA认证
PubkeyAuthentication yes # 允许Pubkey Key
AuthorizedKeysFile .ssh/authorized_keys # id_rsa.pub放入【该用户】下此文件
PasswordAuthentication no # 不允许密码登陆
PermitEmptyPasswords no # 不允许无密码登陆
PermitRootLogin no # 不允许root直接登陆
AllowUsers weilong # 允许用户
# sftp登陆服务器
Subsystem sftp internal-sftp # sftp配置
X11Forwarding no
AllowTcpForwarding no
Match user[Group] weilong # 配置用户[组]——start
ForceCommand internal-sftp
ChrootDirectory /home # 所属用户必须为root——end
mysql -u root
mysql> use mysql;
mysql> UPDATE user SET Password = PASSWORD('newpass') WHERE user = 'root';
mysql> FLUSH PRIVILEGES;
var string = 'Hello World!Hello World!2333'
// string 转成对象处理
var divEle = $('');
divEle.html(string);
divEle.find('.div2').html('Hello World!2333
');
console.log(divEle.html());
svn revert [--recursive] 文件名 # 恢复文件为最新版
svn propset svn:ignore 'vendor' # 忽略,加入到ignore
mysql> use mysql;
mysql> UPDATE user SET host='%' WHERE user='root';
mysql> FLUSH PRIVILEGES;
function array_all_keys($array) {
foreach ($array as $k => $v) {
$keys[] = $k;
if (is_array($v)) $keys = array_merge($keys, array_all_keys($v));
}
return $keys;
}
一、校验数字的表达式
1. 数字:`^[0-9]*$`
2. n位的数字:`^\d{n}$`
3. 至少n位的数字:`^\d{n,}$`
4. m-n位的数字:`^\d{m,n}$`
5. 零和非零开头的数字:`^(0|[1-9][0-9]*)$`
6. 非零开头的最多带两位小数的数字:`^([1-9][0-9]*)+(.[0-9]{1,2})?$`
7. 带1-2位小数的正数或负数:`^(\-)?\d+(\.\d{1,2})?$`
8. 正数、负数、和小数:`^(\-|\+)?\d+(\.\d+)?$`
9. 有两位小数的正实数:`^[0-9]+(.[0-9]{2})?$`
10. 有1~3位小数的正实数:`^[0-9]+(.[0-9]{1,3})?$`
11. 非零的正整数:`^[1-9]\d*$` 或 `^([1-9][0-9]*){1,3}$` 或 `^\+?[1-9][0-9]*$`
12. 非零的负整数:`^\-[1-9][]0-9"*$` 或 `^-[1-9]\d*$`
13. 非负整数:`^\d+$` 或 `^[1-9]\d*|0$`
14. 非正整数:`^-[1-9]\d*|0$` 或 `^((-\d+)|(0+))$`
15. 非负浮点数:`^\d+(\.\d+)?$` 或 `^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$`
16. 非正浮点数:`^((-\d+(\.\d+)?)|(0+(\.0+)?))$` 或 `^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$`
17. 正浮点数:`^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$` 或 `^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$`
18. 负浮点数:`^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$` 或 `^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$`
19. 浮点数:`^(-?\d+)(\.\d+)?$` 或 `^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$`
二、校验字符的表达式
1. 汉字:`^[\u4e00-\u9fa5]{0,}$`
2. 英文和数字:`^[A-Za-z0-9]+$` 或 `^[A-Za-z0-9]{4,40}$`
3. 长度为3-20的所有字符:`^.{3,20}$`
4. 由26个英文字母组成的字符串:`^[A-Za-z]+$`
5. 由26个大写英文字母组成的字符串:`^[A-Z]+$`
6. 由26个小写英文字母组成的字符串:`^[a-z]+$`
7. 由数字和26个英文字母组成的字符串:`^[A-Za-z0-9]+$`
8. 由数字、26个英文字母或者下划线组成的字符串:`^\w+$` 或 `^\w{3,20}$`
9. 中文、英文、数字包括下划线:`^[\u4E00-\u9FA5A-Za-z0-9_]+$`
10. 中文、英文、数字但不包括下划线等符号:`^[\u4E00-\u9FA5A-Za-z0-9]+$` 或 `^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$`
11. 可以输入含有^%&',;=?$\"等字符:`[^%&',;=?$\x22]+`
12. 禁止输入含有~的字符:`[^~\x22]+`
三、特殊需求表达式
1. Email地址:`^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$`
2. 域名:`[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?`
3. InternetURL:`[a-zA-z]+://[^\s]*` 或 `^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$`
4. 手机号码:`^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$`
5. 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):`^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$`
6. 国内电话号码(0511-4405222、021-87888822):`\d{3}-\d{8}|\d{4}-\d{7}`
7. 身份证号(15位、18位数字):`^\d{15}|\d{18}$`
8. 短身份证号码(数字、字母x结尾):`^([0-9]){7,18}(x|X)?$` 或 `^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$`
9. 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):`^[a-zA-Z][a-zA-Z0-9_]{4,15}$`
10. 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):`^[a-zA-Z]\w{5,17}$`
11. 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):`^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$`
12. 日期格式:`^\d{4}-\d{1,2}-\d{1,2}`
13. 一年的12个月(01~09和1~12):`^(0?[1-9]|1[0-2])$`
14. 一个月的31天(01~09和1~31):`^((0?[1-9])|((1|2)[0-9])|30|31)$`
15. 钱的输入格式:``
16. 1.有四种钱的表示形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":`^[1-9][0-9]*$`
17. 2.这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:`^(0|[1-9][0-9]*)$`
18. 3.一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:`^(0|-?[1-9][0-9]*)$`
19. 4.这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分:`^[0-9]+(.[0-9]+)?$`
20. 5.必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:`^[0-9]+(.[0-9]{2})?$`
21. 6.这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:`^[0-9]+(.[0-9]{1,2})?$`
22. 7.这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:`^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$`
23. 8.1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:`^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$`
24. 备注:`这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里`
25. xml文件:`^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$`
26. 中文字符的正则表达式:`[\u4e00-\u9fa5]`
27. 双字节字符:`[^\x00-\xff]` (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
28. 空白行的正则表达式:`\n\s*\r` (可以用来删除空白行)
29. HTML标记的正则表达式:`<(\S*?)[^>]*>.*?|<.*? />` (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)
30. 首尾空白字符的正则表达式:`^\s*|\s*$或(^\s*)|(\s*$)` (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
31. 腾讯QQ号:`[1-9][0-9]{4,}` (腾讯QQ号从10000开始)
32. 中国邮政编码:`[1-9]\d{5}(?!\d)` (中国邮政编码为6位数字)
33. IP地址:`\d+\.\d+\.\d+\.\d+ `(提取IP地址时有用)
34. IP地址:`((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))`
date # 查看系统时间
date -s 20130220 # 设定日期
date -s 09:30:00 # 设定时间
# 远程校准时间
yum -y install ntpdate
ntpdate cn.pool.ntp.org
docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:5.4-cli php -v
docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:5.6-cli php -v
docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.0-cli php -v
docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.1-cli php -v
auth password123
keys *long
get weilong
set weilong thisisweilong
monitor # 查看实时操作
// 模板字符串 -v >= ES6
var user = {name:'weilong', age:20},
num = 8;
var res = `My name is ${user.name}, age ${user.age + num}, num ${num}`;
//检测URL
String.prototype.checkeUrl = function () {
return new RegExp('^(https|http|ftp|rtsp|mms)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]', 'g').test(url);
}
yum -y install lrzsz
// 1. 全局-域名设置-应用域名:
// 默认:www.xxx.com
// 2. 界面-导航设置-主导航:
// 去掉内置首页,添加一个首页[链接为/]
/**
* html字符串处理
*|————————————————————————————————————|
*| 字符 | 描述 | html实体 | |
*| | 空格 | & nbsp; | |
*| < | 小于号 | & lt; | special |
*| > | 大于号 | & gt; | special |
*| & | 和号 | & amp; | special |
*| \" | 引号 | & quot; | special |
*| ' | 撇号 | & apos; | special |
*| ¢ | 分 | & cent; | |
*| £ | 镑 | & pound; | |
*| ¥ | 日圆 | & yen; | |
*| € | 欧元 | & euro; | |
*| § | 小节 | & sect; | |
*| © | 版权 | & copy; | |
*| ® | 商标 | & reg; | |
*| ™ | 商标 | & trade; | |
*| × | 乘号 | & times; | |
*| ÷ | 除号 | & divide;| |
*|———————————————————————————————————|
*/
$str1 = html_entity_decode($str); // html实体 --> 字符
$str2 = htmlentities($str); // 字符 --> html实体
$str3 = htmlspecialchars_decode($str); // special html实体 --> 字符
$str4 = htmlspecialchars($str); // special 字符 --> html实体
brew update # 获取最新版brew
brew search php
brew install php56 # 安装
brew remove mysql56 --force # (强制)卸载
brew upgrade nginx # 更新
brew options php56 #查看php5.6安装选项
brew info php56 #查看php5.6相关信息
brew home php56 #访问php5.6官方网站
brew services list #查看系统通过 brew 安装的服务
brew services cleanup #清除已卸载无用的启动配置文件
brew services restart php56 #重启php-fpm
go build -o bin/test.exe src/main.go
# win
go build -ldflags "-s -w -X main.Version=${VERSION} -H=windowsgui" -o bin/test.exe src/main.go
go build -ldflags '-s -w -extldflags "-static"' -a -v -o bin/test.exe test.go
# -ldflags:-w:去掉调试信息,可压缩体积
# -ldflags:-s:为去掉符号表,可压缩体积
# -ldflags:-extldflags "-static":打包静态资源,如 .dll
# -ldflags:-H=windowsgui:win 隐藏图形界面
# -ldflags:-X:设置包中的变量值
# -a:完全编译,不理会-i产生的.a文件,可压缩体积
# -v:打印详情
# -o:指定二进制文件名
# -x:同时打印输出执行的命令名(-n)(少用)
# -i:安装那些编译目标依赖的且还未被安装的代码包。这里的安装意味着产生与代码包对应的归档文件,并将其放置到当前工作区目录的pkg子目录的相应子目录中。在默认情况下,这些代码包是不会被安装的。
//
//
// php-v >=5.3
//
$a = $b ?: $c; // php-v >= 5.3
// php匿名函数 php-v >= 5.3
namespace Foo\Bar\somenamespace; // php-v >= 5.3
// 新增了循环引用的垃圾回收器并且默认是开启的.
// 新增 const 关键字
//
//
// php-v >=5.4
//
// 新增支持 traits 。
// 新增短数组语法,比如 $a = [1, 2, 3, 4]; 或 $a = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4]; 。
// 新增支持对函数返回数组的成员访问解析,例如 foo()[0] 。
// 现在 闭包 支持 $this 。
// 现在不管是否设置 short_open_tag php.ini 选项,bar() 。
// 现在支持 Class::{expr}() 语法。
// 新增二进制直接量,例如:0b001001101 。
// 改进解析错误信息和不兼容参数的警告。
// SESSION 扩展现在能追踪文件的 上传进度 。
// 内置用于开发的 CLI 模式的 web server 。
//
//
// php-v >=5.5
//
// 正则修饰符e,自 PHP 5.5.0 起废弃。改用 preg_replace_callback
yield $output[$ln]; // 生成器 php-v >= 5.5
foreach ($array as list($a, $b)) {} // foreach嵌套list php-v >= 5.5
// 新增 finally 关键字
// empty() 支持任意表达式
//
//
// php-v >=5.6
//
function writeFileLog($file, ...$params) {} // 动态参数 php-v >= 5.6
writeFileLog('a.log', ...[$var1, $var2]); // 使用 ... 运算符进行参数展开
use function 以及 use const
//
//
// php-v >=7.0
//
// 在 PHP 7 中,很多致命错误以及可恢复的致命错误,都被转换为异常来处理了。
function fileOpen(string $fileName, string $mode): resource {} // 开始支持
$username = $_GET['user'] ?? 'nobody'; // ?? 支持
echo $a <=> $b; // 太空船操作符(组合比较符)$a = $b,返回0;$a > $b,返回1,反之返回-2
// 通过 define() 定义常量数组
// 匿名类,不需要实例化
//
//
// php-v >=7.1
//
// 类常量可见性,支持 public、protected
// list()现在支持键名
Date(); // "Wed Nov 09 2016 10:44:34 GMT+0800 (CST)"
var date = new Date();
// get方法获取具体时间值;set方法设置是兼职;to方法格式化
date.getFullYear(); // 2016
date.toString(); // "Wed Nov 09 2016 10:46:41 GMT+0800 (CST)"
date.toLocaleString(); // "2016/11/9 上午10:47:10"
date.toLocaleDateString(); // "2016/11/9"
date.toLocaleTimeString(); // "上午10:47:30"
date.setFullYear(1947);
date.toString(); // "Wed Nov 09 2016 10:46:41 GMT+0800 (CST)"
// 格式化函数
Date.prototype.format = function(format) {
var o = {
"M+": this.getMonth() + 1, //month
"d+": this.getDate(), //day
"h+": this.getHours(), //hour
"m+": this.getMinutes(), //minute
"s+": this.getSeconds(), //second
"q+": Math.floor((this.getMonth() + 3) / 3), //quarter
"S": this.getMilliseconds() //millisecond
}
if (/(y+)/.test(format)) {
format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00"+ o[k]).substr(("" + o[k]).length));
}
}
return format;
}
new Date().format('yyyy-MM-dd hh:mm:ss'); // "2016-11-09 11:02:48"
new Date(1491983649 * 1000).format('yyyy-MM-dd hh:mm:ss');
svn status # 查看状态
svn add # 添加文件
svn commit -m '说明' # 向上提交
git fetch --all
git reset --hard origin/master
git pull
# 或者 git reset --hard HEAD~[N] , 再 pull
`mysql> explain select * from table;`
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
|----|-------------|---------|------|---------------|------|---------|------|------|-------|
## 一、 id
我的理解是SQL执行的顺序的标识,SQL从大到小的执行
1. id相同时,执行顺序由上至下
2. 如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行
3. id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行
------
## 二、 select_type
示查询中每个select子句的类型
(1) SIMPLE(简单SELECT,不使用UNION或子查询等)
(2) PRIMARY(查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY)
(3) UNION(UNION中的第二个或后面的SELECT语句)
(4) DEPENDENT UNION(UNION中的第二个或后面的SELECT语句,取决于外面的查询)
(5) UNION RESULT(UNION的结果)
(6) SUBQUERY(子查询中的第一个SELECT)
(7) DEPENDENT SUBQUERY(子查询中的第一个SELECT,取决于外面的查询)
(8) DERIVED(派生表的SELECT, FROM子句的子查询)
(9) UNCACHEABLE SUBQUERY(一个子查询的结果不能被缓存,必须重新评估外链接的第一行)
------
## 三、 table
显示这一行的数据是关于哪张表的,有时不是真实的表名字,看到的是derivedx(x是个数字,我的理解是第几步执行的结果)
------
## 四、 type
表示MySQL在表中找到所需行的方式,又称“访问类型”。
常用的类型有: ALL, index, range, ref, eq_ref, const, system, NULL(从左到右,性能从差到好)
ALL:Full Table Scan, MySQL将遍历全表以找到匹配的行
index: Full Index Scan,index与ALL区别为index类型只遍历索引树
range:只检索给定范围的行,使用一个索引来选择行
ref: 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值
eq_ref: 类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者 unique key作为关联条件
const、system: 当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下,使用system
NULL: MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。
------
## 五、 possible_keys
指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用
该列完全独立于EXPLAIN输出所示的表的次序。这意味着在possible_keys中的某些键实际上不能按生成的表次序使用。
如果该列是NULL,则没有相关的索引。在这种情况下,可以通过检查WHERE子句看是否它引用某些列或适合索引的列来提高你的查询性能。如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询
------
## 六、 Key
key列显示MySQL实际决定使用的键(索引)
如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。
------
## 七、 key_len
表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的)
不损失精确性的情况下,长度越短越好
------
## 八、 ref
表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值
------
## 九、 rows
表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数
------
## 十、 Extra
该列包含MySQL解决查询的详细信息,有以下几种情况:
Using where:列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候,表示mysql服务器将在存储引擎检索行后再进行过滤
Using temporary:表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询
Using filesort:MySQL中无法利用索引完成的排序操作称为“文件排序”
Using join buffer:改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。
Impossible where:这个值强调了where语句会导致没有符合条件的行。
Select tables optimized away:这个值意味着仅通过使用索引,优化器可能仅从聚合函数结果中返回一行
------
## 总结:
* EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况
* EXPLAIN不考虑各种Cache
* EXPLAIN不能显示MySQL在执行查询时所作的优化工作
* 部分统计信息是估算的,并非精确值
* EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划。
# 主分支master下
git add mynewsfile/* # 添加文件
git commit [-a] -m '说明' # 提交到本地库,-a所有改动
git pull # 从远程库拉取
git push [origin master] # 提交到远程库,默认master
// 零宽断言,往后判断
\b\w+(?=ing\b) // 以ing结尾的单词但不匹配ing
// 负向零宽断言,往前判断
^((?![01])\d)+$ // 匹配数字,但不包含0不包含1
\w+(?
// trim
String.prototype.trim = function() {
return this.replace(/(^\s*)|(\s*$)/g, '');
};
find . # 列出所有文件及目录
find . -type f -size +50M -print0 | xargs -0 du -h | sort -nr # 列出大于50M的文件 | 且显示文件大小 | 并排序,但没有>50m的会列出全部
find . -type d -name ".svn" | xargs rm -rf # 找出所有“.svn”文件夹 | 并删除
find . -name .DS_Store | xargs rm # 找出所有“.DS_Store”文件 | 并删除
find /data/logs/nginx -type f -name "*.gz" -ctime -5 | xargs zcat | grep 'HTTP/1.1" 500'
# 1. 新建项目
git clone https://github.com/wilon/wilon.github.io.git # 代码copy进来,直接push
# 2. 已有项目
git init
git remote add origin https://github.com/wilon/wilon.github.io.git
git pull
git merge origin/master
git push --set-upstream origin master
#-- 或修改 .git/config
[remote "origin"]
url = https://github.com/wilon/oh-my-zsh.git
fetch = +refs/heads/master:refs/remotes/origin/master
[branch "master"]
remote = origin
merge = refs/heads/master
// 匹配手机号
preg_match_all('/1\d{10}(?!\d)(.*?)/', $str, $res3);
// 后四位匹配ABAB但不包含AAAA
preg_match_all('/1\d{6}(?!(\d)\\1)(\d\d)\\2(?!\d)(.*?)/', $str, $res);
// 匹配手机号至少有一个8
preg_match_all('/1(?![^8]{11})\d{11}(?!\d)(.*?)/', $str, $res1);
preg_match_all('/1(?=\d*8)\d{11}(?!\d)(.*?)/', $str, $res2);
netstat -apn | grep 80 # 查看80端口被哪些进程占用
ps aux[|grep nginx] # 查看当前系统所有运行的进程
uname -a # 内核版本
cat /etc/issue # 系统信息
cat /proc/version # 系统版本
cat /etc/*-release # 系统详情
i 表示不区分大小写
s 表示匹配视为单行(就是可以让点.能支持换行)
U 表示拒绝贪婪匹配(与?有冲突)
c 删除后插入动作;d 删除动作;y 复制动作;v 选择动作;
r 单字母替换动作;m 标记动作;z 折叠动作;p 粘贴动作
i 光标前;I 行首;a 光标后;A行尾;C 删除至行尾
o 光标下一行;O 光标上一行;s 删光标后一个字符;S 清除全行
# https://developer.aliyun.com/composer 参考阿里云composer
# 国内安装-1
curl -sS https://install.phpcomposer.com/installer | php # 下载源码包php执行
mv composer.phar /usr/local/bin/composer # 加入到系统命令
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ # 全局配置国内镜像源
# 国内安装-2
wget https://mirrors.aliyun.com/composer/composer.phar -O /usr/local/bin/composer
chmod a+x /usr/local/bin/composer
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
# 使用
composer config -l -g # 查看全局配置信息
composer clear-cache # 清除缓存
composer require --no-plugins --no-scripts xxx/xxxx # root 下安装
# 下载到指定文件
curl -o ~/baidu.html https://www.baidu.com
# 指定代理
curl -x 127.0.0.1:3128 https://www.google.com/humans.txt
# 允许不使用证书到SSL站点
curl -k https://www.baidu.com
# 显示详情
curl -v https://www.baidu.com
# 静默模式
curl -s https://www.baidu.com
# 请求重定向
curl -L https://www.baidu.com
# post请求
curl -d "param1=value1¶m2=value2" "http://www.baidu.com"
# json格式的post请求
curl -l -H "Content-type: application/json" -X POST -d '{"phone":"135xxxxxxxx","password":"test"}' http://domain/apis/users.json
# 两次 md5 的验证例子
curl http://adms.test.com/api/getUserInfo\?auth\=$(echo -n $(date +%s) | md5sum | awk '{printf $1"YOUR_KEY";}' | md5sum | awk '{printf $1;}')
*\d 匹配一个数字;等价于[0-9]
*\D 匹配除数字以外任何一个字符;等价于[^0-9]
*\w 匹配一个英文字母、数字或下划线;等价于[0-9a-zA-Z_]
*\W 匹配除英文字母、数字和下划线以外任何一个字符;等价于[^0-9a-zA-Z_]
*\s 匹配一个空白字符;等价于[\f\n\r\t\v]
*\S 匹配除空白字符以外任何一个字符;等价于[^\f\n\r\t\v]
\f 匹配一个换页符等价于 \x0c 或 \cL
*\n 匹配一个换行符;等价于 \x0a 或 \cJ
*\r 匹配一个回车符等价于\x0d 或 \cM
*\t 匹配一个制表符;等价于 \x09\或\cl
\v 匹配一个垂直制表符;等价于\x0b或\ck
\oNN 匹配一个八进制数字
\xNN 匹配一个十六进制数字
\cC 匹配一个控制字符
find . -type d -name ".svn"|xargs rm -rf # 回滚到版本号
# 1. 命令配置
git config --global color.diff auto && git config --global color.status auto && git config --global color.branch auto # git配置颜色
git config --global alias.st status # git配置别名
git config --global user.name wilon && git config --global user.email wilonx@163.com # git配置用户名邮箱
git config --global http.proxy "127.0.0.1:8087" # 设置代理
# 2. 修改配置文件 ~/.gitconfig,已同步在oh-my-zsh项目里
wget https://raw.githubusercontent.com/wilon/oh-my-zsh/master/templates/gitconfig.zsh-template -O ~/.gitconfig
~/.atom/.apmrc 文件添加一行: registry = https://registry.npm.taobao.org
vim /etc/inittab # :id:5:initdefault: 启动级别,5图形界面改,3纯命令行
chkconfig [--level 服务级别] 服务名 on # 设置开机启动,off关闭
chkconfig --level 345 mysqld on # MySQL开机启动
chkconfig --list # 查看自启动列表、级别
# 0:off 1:off 2:on 3:off 4:on 5:off 6:off
ntsysv # 伪图形界面启动服务
git commit --amend # 修改commit
git reset . # commit前取消add缓冲
键盘 -> 应用快捷键 -> +
菜单标题:应用程序菜单上文字
tail -f FILENAME # 动态查看文件最新变化
cat [-n] 文件名 # 所有内容[显示行号]
more 文件名 # 分屏显示,space|b|q 翻页下|上|退出
head [-n 2] 文件名 # 显示文件头[两行]
// 返回时间戳
echo time(); // int(1392192781)
将其他格式解析为 Unix 时间戳
echo strtotime($str); // 将其他格式解析为 Unix 时间戳
/*下括号内格式例:
( "10 September 2000" )
( "+1 day" ) 明天
( "+1 days" ) 明天
( "+1 week" )
( "+1 week 2 days 4 hours 2 seconds" )
( "next Thursday" ) 下周二
( "last Monday" )
( "2011-5-19 14:07" );
*/
echo mktime(12, 0, 0, 12, 30, 2012); // mktime(时[,分[,秒[,月[,日[,年]]]]]); 都可以超出自然范围,如27月,超出向高位加;若整体数值超出计算机能力范围,返回false。
echo microtime(); // 返回微秒精度的时间戳字符串。
// 返回一个数组
$today = getdate();
/* 输出数组: array(11) {
["seconds"]=>int(32)
["minutes"]=>int(27)
["hours"]=>int(8)
["mday"]=>int(12)
["wday"]=>int(3)
["mon"]=>int(2)
["year"]=>int(2014)
["yday"]=>int(42)
["weekday"]=>string(9) "Wednesday"
["month"]=>string(8) "February"
[0]=>int(1392193652)
} */
// 格式化输出时间
echo date("Y-m-d H:i:s", 1391919385); // string(19) "2014-02-09 04:16:25"
/*string format 常用:
Y:四位数年 m:月01-12 n:月1-12 d:天01-31 j:天1-31
H:时24时制 h:小时12制 i:分钟00-59 s:秒00-59 w:星期几0-6
A:上午AM或下午PM a:上午am或下午pm。
*/
echo date('Y-m-d H:i:s') . substr((string) microtime(), 1, 6), "
"; // 详细时间
// 修改默认时区
date.timezone = PRC # 修php.ini配置文件
date_default_timezone_set("PRC"); // 设置当前脚本时区为中国时区
date_default_timezone_get(); // 获取当前时区
# 1, 查看log
git log
# 2, 找到合并到哪里的 commit hash, 执行合并
git rebase -i [hash]
# 3, 编辑合并选项,参考操作下面的文档说明
# 4, 提交
git push --force
# 其他
git rebase --abort # 撤销 rebase
30 21 * * * php -v > /dev/null 2>&1 # 不保留输出
find / -name 'lnmp.conf' 2>/dev/null # 不显示错误输出(Permission denied)
echo $str = '000abcd333abcd444abscd888';
$res1 = preg_replace('/ab(.*)d/iU', '123', $str);
$res2 = preg_replace('/ab(.*?)d/iU', '123', $str); // 有?恢复贪婪
preg_match_all('/ab(.*?)d/i', $str, $res3); // ?与U只能有一个
preg_match_all('/ab(.*?)d/iU', $str, $res4);
1. 属性 -> 字体大小调为36
// sha1/md5都行
$salt = sha1(uniqid(mt_rand(), true));
$pwdDb = sha1($salt . sha1($pwdUser) . KEY);
// 正确做法
$pwdDb = password_hash('pwd', PASSWORD_DEFAULT);
$verify = password_verify('pwd', $pwdDb);
$a = 3;
$b = 4;
list($b, $a) = array($a, $b);
$a = $a + $b && $b = $a - $b && $a = $a - $b;
$a = $a ^ $b && $b = $b ^ $a && $a = $a ^ $b;
# 1. 查看服务
ps aux | grep --color=auto php-fpm
# 2. 修改执行php进程用户
vim /etc/php-fpm.d/www.conf # 修改 user group
/etc/init.d/php-fpm restart # 重启
chown -R user:group /var/lib/php/session # 修改需要权限的文件夹
// 正则操作
var myReg = /a(b.)d/g // g 全局搜索;i 不区分大小写搜索;m 多行搜索;
var myReg = new RegExp('/a(b.)d/', 'g'); // 好处是支持生成字符串正则
var resIsMatch = myReg.test('aabcdefg'); // true
var resArray = myReg.exec('aabcdefg'); // ["abcd", "bc"]
// 字符串操作正则
var myStr = 'aabcdefg';
var resArray = myStr.match(myReg); // ["abcd"]
var resNum = myStr.search(myReg); // 1
var resStr = myStr.replace(myReg, 'zzz'); // "azzzefg"
var resArray = myStr.split(myReg); // ["a", "bc", "efg"]
mysql> SELECT film_id,description FROM sakila.film ORDER BY title LIMIT 50,5;
mysql> SELECT film.film_id,Film.description
-> FROM sakila.film
-> INNER JOIN (
-> SELECT film.film_id FROM sakila.film
-> ORDER BY title LIMIT 50,5
-> ) AS lim USING(film_id);
mysql> SELECT * FROM sakila*rental
-> WHERE rental id < 16030,
-> ORDER BY rental id DESC LIMIT 20;
# pear 命令安装
pear install xdebug # 失败则扩展pear已不维护
# 源码安装
cd /xxx/php-包/ext/EXTENSION
phpize # 确认命令可使用
./configure -with-php-config=/usr/local/php/bin/php-config
make && make install
echo extension=EXTENSION.so >> /usr/local/php/etc/php.ini
git submodule add 仓库地址 路径 # 添加子模块
git submodule update --init --recursive # 更新子模块
git rm ./xxx & rm -rf ./xxx # 删除子模块
source\module\portal\portal_view.php // 文章详情页方法
template\xxx\portal\view_xx.htm // 文章详情页模板,根据设置有所不同