HACK emlog程序教程,操作前请先备份。使用Redis缓存来替代文件缓存,毕竟Redis缓存在内存, 文件缓存在硬盘(要看I/O的性能),一般来说内存的性能大于硬盘,所以一般来说Redis缓存优于文件缓存。
Redis相对于文件缓存的优点:
1、读写性能优异,特别是高并发时和文件缓存比有明显优势。
2、Redis支持集群。
HACK emlog程序教程,操作前请先备份。使用memcached缓存来替代文件缓存,毕竟memcached缓存在内存, 文件缓存在硬盘(要看I/O的性能),一般来说内存的性能大于硬盘,所以一般来说memcached缓存优于文件缓存。
memcache相对于文件缓存的优点:
1、读写性能优异,特别是高并发时和文件缓存比有明显优势。
2、memcached组建支持集群,并且是自动管理负载均衡。
冒泡排序算法是一个经典的常用排序算法,当然还有一些其他的常用排序算,比如选择排序,插入排序,希尔排序,快速排序。所以也是一种必学的算法,甚至很多公司面试的题目中也有冒泡排序的。
但是冒泡排序毕竟是一种效率低下的排序方法,在数据规模很小时,可以采用。数据规模比较大时,最好用其它排序方法。
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面,直到达到升序排列。
比如:这个数组array(4,3,5,1,2)用冒泡排序算法进行升序排列。
第1个循环循环开始,当前排序:4,3,5,1,2
本文主要收集日常经用到的正则表达式。
1、查找不包含某些字符串的行
^((?!不包含的字符串).)*$
2、vscode清除多余空行
Bug描述
今天论坛有人说评论有BUG,我看了一下,无意中注意到isLogCanComment函数。
function isLogCanComment($blogId) { if (Option::get('iscomment') == 'n') { return false; } $query = $this->db->query("SELECT allow_remark FROM ".DB_PREFIX."blog WHERE gid=$blogId"); $show_remark = $this->db->fetch_array($query); if ($show_remark['allow_remark'] == 'n' || $show_remark === false) { return false; }else { return true; } }以上是isLogCanComment函数的代码,数据库(连接方式使用mysqli)查询$show_remark的值应该是空值NULL,所以不能用===false。
注意:数据库连接方式使用mysqli就会出现这个问题
影响就是POST伪造gid,可以把评论发布到不存在或者未审核未发布的文章下,影响应该不大。

Windows10快速启动称为混合启动(HybridBoot),在Windows8操作系统就引入了这个功能:
以往如 Windows 7关机的时候会将用户会话和系统内核会话同时关闭掉,但在Windows 8 开始的操作系统中新增加了一个“混合启动”(Hybrid Boot)新功能,其原理是关机的时候只关闭用户会话,而系统内核会话则转入休眠状态(保存到一个文件中,下次开机时直接从这个文件中写回内存),从而提高系统启动速度,而微软更是把这个“混合启动”功能默认替代了关机功能。
“睡眠”模式
系统会将正在处理的数据保存到内存中,除内存以外的所有设备都停止供电,可以通过鼠标键盘等唤醒电脑,唤醒后的运行状态和睡眠之前一模一样,睡眠期间不可断电,断电的话内存上的所有数据全部丢失,只能重新开机。

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方式获取内容。