PHP|如何写出安全又可靠的PHP脚本

PHP|如何写出安全又可靠的PHP脚本

文章图片

PHP|如何写出安全又可靠的PHP脚本

文章图片

PHP|如何写出安全又可靠的PHP脚本

文章图片

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行数据的变量 , 防止内存溢出 。
  • 最后一步也是最重要的数据处理完成后需要返回一个标识 , 知道此次脚本已经执行完成了 。
这里举的例子的是添加 , 若你的数据量大的情况下可以进行批量添加、修改 。