我最近需要验证PHP会话ID创建的值。经过一些研究,我意识到有两个与此值相关的有趣的php.ini配置设置:
session.sid_length是ID中的字符数 session.sid_bits_per_character控制使用的字符集。从手册上可以知道可能的值为 '4'(0-9,af),'5'(0-9,av)和'6'(0-9,az,AZ,“-”,“,”)
因此,要验证会话ID,我们需要创建一个正则表达式,以查找预期长度的正确字符集。
function isValidSessionId(string $sessionId): bool
{
$sidLength = ini_get('session.sid_length');
switch (ini_get('session.sid_bits_per_character'))
{
case 6:
$characterClass = '0-9a-zA-z,-';
break;
case 5:
$characterClass = '0-9a-v';
break;
case 4:
$characterClass = '0-9a-f';
break;
default:
throw new \RuntimeException('Unknown value in session.sid_bits_per_character.');
}
$pattern = '/^[' . $characterClass . ']{' . $sidLength . '}$/';
return preg_match($pattern, $sessionId) === 1;
}本篇文章学习自akrabat.com博客,不建议使用本方法验证,因为ini的配置会动态变更,另外定义的各种字母后期会发生变化,对应的场景基本不存在
php多进程应用场景主要是非web端,fpm下是不支持多进程的,非类linux操作系统都不支持,请在cli模式使用.可以使用多进程做任务分发,批量计算,批量文件处理,批量爬虫,网络运维等等。下面看一份简单的入门demo//创建子进程 $pid=pcntl_fork(); //返回-1,创建失败,不...
使用php函数array_multisort()即可实现和SQL一样的order by排序. 例如我们需要对会员表按照主键降序排列,年龄升序排列://会员表数据 $list = []; $list[] = ['mid' =>&n...
<?php /** * @throws Exception */ function curl() { throw new \Exception('err...
为什么使用队列?因为pop取队列具有原子性。假如我们需要秒杀一个商品id,我们先将商品的库存保存到一个队列。例如:<?php $redis = new Redis(); $redis->connect('127.0.0.1', 6...
本教程使用的定时任务基于EasyTak,EasyTask官方文档:https://gitee.com/392223903/EasyTask由于tp3.2.x官方开发未考虑命令行支持和绝对路径开发的标准,因此我编写了一个支持的类来运行。1.在tp3.2.3根目录下安装easytaskcomposer&...
(1).php.ini配置允许加载远程文件allow_url_fopen = On(2).创建本地文件invoke.php<?php require('https://blog.20230611.cn/test.txt');(3).创建远程文件https:/...