当前位置:首页 > 叨叨念念

很多PHP系统会用到通过积分判断用户等级,也就是说通过一个数字判断属于的范围。


假如通过[0,100,250,500,1000,2000]中找出一个数字所在的位置对应的等级。

方法一

通过if和elseif通过条件一一列出,确定是如果等级越多,if和elseif越多,对于过多的规则就不合适了,影响了效率。

MySQL使用ALTER TABLE语句修改表。常用的修改表的操作有修改表名、修改字段数据类型或者字段名、增加和删除字段、修改字段的排列位置、更改表的存储引擎、删除表的外键约束等。


以下是对MySQL数据库表的一些语句写法:

1、修改表名

VMware Workstation网络的三种模式

VMware Workstation 提供了三种网络工作模式:

(1)、Bridged(桥接模式,VMnet0)

(2)、NAT(网络地址转换模式,VMnet8)

(3)、Host-Only(仅主机模式,VMnet1)


1、桥接模式

实体网卡相当于一个虚拟交换机VMnet0,主机和虚拟机同时连接到这个虚拟交换机上,主机和虚拟机是同等的,IP地址是从外部路由器分配。

网线水晶头标准接法

标准介绍

网线有两种做法,一种是交叉线,一种是平行(直通)线

交叉线的做法是:一头采用568A标准,一头采用568B标准,常用于PC网卡到PC网卡,HUB普通口到HUB普通口

平行(直通)线的做法是:两头同为568A标准或568B标准,常用于PC网卡到HUB普通口,HUB普通口到HUB级联口(当前大部分网线一般都是直通568B的做法,因为现在设备绝大部分可以自适应了)

568A标准: 1、白绿,2、绿,3、白橙,4、蓝,5、白蓝,6、橙,7、白棕,8、棕。

568B标准: 1、白橙,2、橙,3、白绿,4、蓝,5、白蓝,6、绿,7、白棕,8、棕

Emlog修改标签造成重复标签的bug以及修复

Emlog后台可以修改标签的名称,也就是tagname,导致tagname重复,这个应该是设计上的Bug,不严重,但是如果标签很多的时候,都不知道有没有重复,修改后还会出现问题。


Bug事例

后台有多个标签,其中一个是emlog标签,另一个是77bx标签,那么把77bx的标签修改为emlog标签,那么就会出现相同标签的记录。

date(format,timestamp) 函数可把时间戳格式化为可读性更好的日期和时间。。

format:必需。规定时间戳的格式。

timestamp:可选。规定时间戳。默认是当前的日期和时间。


strtotime(time,now) 函数将任何英文文本的日期时间描述解析为Unix时间戳。

time:必需。规定日期/时间字符串。

PHP7之后实现AEES加解密功能换成了openssl扩展,PHP之间的加解密相对来说变的简单了,但是对于要和JAVA等其他语言对接的时候就要非常注意了。


openssl_encrypt介绍

openssl_encrypt( string $data, string $method, string $key, int $options = 0, string $iv = "", string &$tag = null, string $aad = "", int $tag_length = 16 ): string|false

参数说明:

PHP使用MIME base64(内置函数base64_encode)对数据进行编码。设计此种编码是为了使二进制数据可以通过非纯 8-bit 的传输层传输。

本文主要介绍使用Base64对图片进行编码。


图片转换为base64编码

读取图片到字符串,而后使用base64_encode进行进行编码然后拼接上前缀(data:image/png;base64,)即可。

PHP函数password_hash

Password Hashing函数在 PHP 5.5 时被引入,这边主要讲讲password_hash加密函数、password_verify验证函数以及和md5加密的区别。


password_hash加密

password_hash() 使用足够强度的单向散列算法创建密码的散列(hash)。

password_hash(string $password, mixed $algo, array $options = ?): string|false

有3个参数:密码(必须),哈希算法(必须),选项(选填)

$pwd = '123456'; $hash = password_hash($pwd, PASSWORD_DEFAULT); echo $hash;

输出hash字符串:$2y$10$H7KD.QWJyY68zeKJXTHoW.zH9ZC69zlXALRBtN8BfiKQkk9YolQum

并不是唯一的hash字符串,通过刷新网页,可以输出不同的hash,也就是1个密码会出现不同的hash加密字符串。


password_verify验证

password_verify()验证密码是否和指定的散列值匹配。

password_verify(string $password, string $hash): bool

有2个参数:密码(必须),哈希值(必须)

$pwd = '123456'; $hash = '$2y$10$H7KD.QWJyY68zeKJXTHoW.zH9ZC69zlXALRBtN8BfiKQkk9YolQum'; $result = password_verify($pwd,$hash); var_dump($result); 输出bool(true)


MD5加密

使用《RSA 数据安全公司的 MD5 消息摘要算法》计算 string 的 MD5 散列值,并返回该散列值

md5(string $string, bool $binary = false): string

由于此函数依赖的算法已不足够复杂,不推荐使用此函数对明文密码加密。所以一般使用md5(password+salt)来计算md5值。

$pwd = '123456'; $md5 = md5($pwd); echo $md5;

输出md5字符串:e10adc3949ba59abbe56e057f20f883e

多次刷新网页保持这个字符串不变,由于网上直接加密的可以直接通过字典输出原始密码,导致非常不安全。

$pwd = '123456'; $salt = '77bx'; $md5 = md5($pwd.$salt); echo $md5; 输出md5字符串:caef045fe88f8efa2cf0b85cb91bad4d


加密性能测试

对比md5加密、md5+salt加密、password_hash加密和password_verify验证性能。

本次测试采用虚拟化

CPU:Intel Xeon Gold 6161 2.2GHz 2核4线程

内存:16GB

PHP:7.4

重复计算10次,取平均值得出以下截图结果

结论:

1、不建议使用password_hash和password_verify进行加密和验证,毕竟和md5+salt也有5万倍以上的性能差距。

2、建议使用md5+盐值的方式,毕竟1ms以下的时间对于性能来说影响不大。

3、安全性虽然password_hash比较安全,但是md5+salt的方式也是相对比较安全的。