PHP借助文件锁实现命令行脚本单例模式

思路其实很简单:用fopen打开一个文件,然后用flock获取该文件的独占锁,当前脚本还没跑完时,会一直持有这个锁,另一个脚本尝试获取锁就会返回失败并退出,从而达到控制同一时间只有一个脚本实例在执行的效果。封装代码如下...

分类至 PHP
0条评论

CentOS7编译安装PHP7.2.15

本文操作环境:CentOS Linux release 7.6.1810 (Core)。
指令记录如下:yum install autoconf gcc gcc-c++ wget curl curl-devel cmake libpng libpng-devel libjpeg libjpeg-devel libzip libxml2 openssl openssl-devel bzip2 bzip2-devel freetype freetype-devel libicu-devel libxslt libxslt-devel
……

分类至 Linux
0条评论

MySQL函数FIELD()用法

MySQL函数FIELD语法定义如下:

  • 语法:FIELD(str, str1, str2, str3, ...)
  • 解释:返回 str1,str2,str3,... 列表中str的索引(位置)。 如果未找到str,则返回0。如果FIELD()的所有参数都是字符串,则所有参数都将作为字符串进行比较。如果所有参数都是数字,则将它们作为数字进行比较。 否则,参数将进行两次比较。如果str为NULL,则返回值为0,因为NULL无法与任何值进行相等性比较。FIELD()和ELT()互补。
分类至 MySQL
0条评论

MySQL函数FIND_IN_SET()用法

MySQL函数FIND_IN_SET语法定义如下:

  • 语法:FIND_IN_SET(str, strlist) 
  • 解释:如果字符串str位于由N个子字符串组成的字符串列表strlist中,则返回1到N范围内的值。 strlist列表是一系列子串以英文逗号(,)拼接而成的字符串。 如果第一个参数是常量字符串而第二个参数是SET类型的列,则FIND_IN_SET()函数被优化为使用位算术。 如果str不在strlist中,或者strlist是空字符串,则返回0。 如果任一参数为NULL,则返回NULL。 如果第一个参数包含英文逗号(,)字符,则此函数无法正常工作。

 

分类至 MySQL
0条评论

MySQL函数GROUP_CONCAT()用法

先来看看官方手册对 GROUP_CONCAT 说明:

此函数返回一个字符串,是查询结果集合中指定列非NULL值的串联。如果所有列都是NULL,则此函数返回NULL。完整语法如下:

GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])

GROUP_CONCAT 是一个聚合函数,通常跟 GROUP BY 一起使用。

分类至 MySQL
0条评论

PHP获取客户端真实IP

按顺序依次判断$_SERVER['HTTP_X_FORWARDED_FOR']、$_SERVER['HTTP_CLIENT_IP']、$_SERVER['REMOTE_ADDR']这三个变量,如果有值就马上返回。翻开PHP手册,查看$_SERVER数组的解释,你会发现,手册里居然没有HTTP_X_FORWARDED_FOR、HTTP_CLIENT_IP这两个元素,只有REMOTE_ADDR的解释。首先,$_SERVER数组以HTTP_开头的元素,是来自客户端的header头信息,也就是说,它们是客户端传给服务器的。因此,这些值是可以伪造的,是不安全的!但是,这并不代表它们就没有用处。

分类至 PHP
0条评论

Nginx启用TLSv1.3和HTTP2

本文所述的操作环境:CentOS7.6。TLS1.3协议规范于2018年8月正式落地,需要openssl1.1.1版本才支持。执行指令查看当前系统的openssl版本:opensslversion显示为:OpenSSL1.0.2k-fips26Jan2017。执行yumupdate也无法更新到最新版本,只能手动安装。通过官网www.openssl.org查询,我们得知最新版本为1.1.1a,下面开始安装。我安装到/usr/local/openssl1.1.1目录,指令如下...

分类至 Linux
0条评论

MySQL5.7重置root密码

本人由于root密码设置太复杂,距离买云服务器过去好长时间,记不起来了,只好重置密码。

编辑配置文件/etc/my.cnf,在 [mysqld] 段加入一行:skip-grant-tables

如下:

[mysqld]
skip-grant-tables
skip-ssl
port = 3306
......

执行重启指令:service mysqld restart

[root@centos ~]# service mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL... SUCCESS! 

重启成功后,即可免密码登录root用户:mysql -u root

[root@centos ~]# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.22-log MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

登录成功后,执行SQL更改root密码(假设为123456):

UPDATE mysql.user SET authentication_string = PASSWORD('123456') WHERE User = 'root';

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('123456') WHERE User = 'root';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> 

注意上面的SQL语句,在5.7版本后,原来的密码字段名称Password改成了authentication_string。

退出mysql控制台,把添加到/etc/my.cnf配置文件的 skip-grant-tables 这行删除,再重启服务:service mysqld restart。之后,我们就可以使用新密码登录了。

[root@centos ~]# service mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL.. SUCCESS! 
[root@centos ~]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.22-log MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

分类至 MySQL
1条评论

CentOS mail配置163邮箱

0、本文演示环境:本文实际操作的系统是 CentOS 7.6,为腾讯云服务器。
1、获取163邮箱授权码:为了安全,我们不应直接使用原始密码登录第三方客户端,因此有了授权码这个东西。授权码是用于登录第三方邮件客户端的专用密码。登录163邮箱后,进入设置--客户端授权密码--设置客户端授权码,开启并设置授权码(且要开通SMTP服务)
2、在Linux系统上安装mailx服务:在命令行直接输入mail指令,如果提示找不到该指令,则表示你还没有安装该服务,请使用yum安装该服务。
3、添加163邮箱的smtp配置:在系统文件 /etc/mail.rc 末尾追加下面内容(按实际情况修改成你的账号和授权码)
4、下载163邮箱的证书:上述配置开启了SSL安全连接,因此我们还需要手动获取163邮箱的SSL证书保存到本地 /root/.certs 目录,以备调用和验证。

分类至 Linux
0条评论

PHP命令行模式下的多进程脚本

我们可以利用PHP的PCNTL模块,写多进程脚本,我整理了一个模板。当前,这个模块不支持Windows系统,需要Linux系统才支持(即非Unix类系统不支持此模块)。还有就是,在编译PHP的时候要加上 --enable-pcntl 选项它才会被编译。在Webserver环境下(如Apache、Nginx等),运行此模块会有不可预料的结果,因此,你只能在命令行模式下执行。

分类至 PHP
0条评论