array_intersect() 函数
用于比较两个(或更多个)数组的值,并返回交集。
语法:
array_intersect(array1,array2,array3...)返回一个交集数组,该数组包括了所有在被比较的数组(array1)中,同时也在任何其他参数数组(array2 和 array3 等等)中的值。
array_intersect() 函数
用于比较两个(或更多个)数组的值,并返回交集。
语法:
array_intersect(array1,array2,array3...)返回一个交集数组,该数组包括了所有在被比较的数组(array1)中,同时也在任何其他参数数组(array2 和 array3 等等)中的值。
很多PHP系统会用到通过积分判断用户等级,也就是说通过一个数字判断属于的范围。
假如通过[0,100,250,500,1000,2000]中找出一个数字所在的位置对应的等级。
方法一
通过if和elseif通过条件一一列出,确定是如果等级越多,if和elseif越多,对于过多的规则就不合适了,影响了效率。
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开启错误输出后,PHP报错提示如下
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 131072 bytes) in xxxx.php on line xxx
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1099 bytes) in
问题分析
这个是由于可用内存已耗尽,所以终端报出了Allowed memory size of 134217728 bytes exhausted错误,因为PHP默认内存限制是128M,所以需要修改php.ini文件的memory_limit设置。
问题描述
PHP调试的时候出现了警告:It is not safe to rely on the system解决方法,其实就是时区设置不正确造成的,本文提供了3种方法来解决这个问题。
Warning: date(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Asia/Chongqing’ for ‘CST/8.0/no DST’ instead Warning: strtotime(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Asia/Chongqing’ for ‘CST/8.0/no DST’ instead Warning: date_default_timezone_get(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in <b>/home/ftp/n/nimaboke/include/lib/function.base.php问题分析
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的方式也是相对比较安全的。
简单的收集下PHP下获取网页内容的几种方法:
方法1:用file_get_contents,以get方式获取内容。
<?php $url='http://www.77bx.com'; $html = file_get_contents($url); echo $html; ?>
方法2:用fopen打开url,以get方式获取内容。