PHP|如何写出安全又可靠的PHP脚本
文章图片
文章图片
文章图片
前言咔咔目前所做的项目是一个saas系统 , 在开发新功能之后 , 需要为用户角色添加相应的权限 , 这时整个系统的所有用户都需要添加相应的权限 。
因为以前系统的缺陷现在只能用脚本来处理这些工作 , 所以接下来咔咔将向你介绍如何编写安全可靠的PHP脚本 , 以及如何事先设计好这个功能 , 踩过一个坑直接把它埋起来
一、如何写一份安全又可靠的PHP脚本1-1 设置合理的内存PHP中使用memory_limit为每个进程设置内存 , 跑脚本的内存给256M或512M 。
通过设置内存来防止脚本执行死循环占用大量的内存 , 导致系统崩溃 。
在文件开头写入ini_set('memory_limit' '512M');
即可 。
1-2 可接收命令行传参在PHP中接命令行的参数为$argv
, 下标0是文件名 , 下标1为你传入的参数 。
简单来说就是先创建一个 index.php文件 , 然后打印出$argv
执行index.php文件php index.php kaka , 打印出来的数据与上面介绍的数组形式完全一样 。 第一个值是执行的文件名 , 第二个参数就是携带给脚本的参数 。
之前写了一篇laravel中给命令行携带参数不了解一下吗?可以看看 , 当时是rabbitmq路由模式遇到问题才知道的这个参数 , 如今在写脚本就可以直接用了 。
1-3 使用while死循环执行$id = !empty($argv[1
) ? $argv[1
: 0;
while(true){
$sql = \"select * from user id > $idorder by id asc limit 10000\";
$res = 执行$sql语句;
if(empty($res)){
break;
foreach ($res as $k => $v) {
\t// 这个id保存每次执行的值
$id = $v['id'
;
$checkDataSql = \"检测数据是否已存在\";
\t\t// 不存在时在进行添加数据
if(!$checkSql){
$sql = \"insert into user ...\";
$res = \"执行添加操作\";
// 返回最后执行的主键ID
echo $res.\"\\";
// 删除此次的变量 , 防止内存溢出
unset($res);
echo 'ok';
简单的解释一下这份代码
- 接受命令参数 , 此参数用于防止脚本执行一半挂掉 , 可以输入参数继续执行 。
- 使用while执行死循环逻辑
- 获取需要添加权限的数据 , 每次查询10000行 。
- 死循环退出条件是查询不到需要添加权限的数据 。
- 循环处理每次查询的10000行数据 。
- 将查询出来的数据ID循环一次就赋值给while外层的ID , 防止脚本挂掉知道从哪条数据继续执行 。
- 做一步检测操作 , 判断此条数据是否已经存在将要给添加的权限 。 不存在时再进行添加操作 。
- 最后一步也是最重要的一步将添加完成的主键ID返回到终端 , 脚本挂掉直接用这个ID作为参数继续执行 。
- 删除或者10000行数据的变量 , 防止内存溢出 。
- 最后一步也是最重要的数据处理完成后需要返回一个标识 , 知道此次脚本已经执行完成了 。
- 小米科技|不聊性能只谈拍照!新旗舰反向升级成潮流,拍照手机如何选?
- 搜索引擎|淘宝运营系统出台春节打烊功能,淘宝运营商家该如何选择?
- 小米科技|RTX3060的性能到底如何?相比RTX2060提升有多大?
- 市值超 1.7 万亿的Netflix是如何做决策的?
- QQ音乐的2021专辑盘点,是如何征服资深乐迷的
- 饭饭1080°平台分析之生鲜电商平台如何选择ERP系统和SAAS系统
- 在2021大中华区艾菲国际论坛上|玛雅文化施葵:新消费时代,如何助力品牌跑出“破圈”加速度?
- 布局潮范多元化圈层 看MAZDA3昂克赛拉如何玩出花样?
- 原标题:月背工作满三年|月背工作三年 嫦娥四号如何做到超服期役?专家回应
- 36氪|启中教育:如何实现店铺爆发式增长