阿里云栖开发者沙龙PHP技术专场-静态扫描为你的PHP项目上线保驾护航

简介: 摘要:在4月20日的阿里云栖开发者沙龙PHP技术专场上,阿里云资深研发工程师周梦康(楚松)为大家分享了如何借助静态扫描来为我们的PHP项目上线保驾护航,他从Why、How和What三个角度为大家分享了静态扫描的落地实践和最终成果。

摘要:在4月20日的阿里云栖开发者沙龙PHP技术专场上,阿里云资深研发工程师周梦康(楚松)为大家分享了如何借助静态扫描来为我们的PHP项目上线保驾护航,他从Why、How和What三个角度为大家分享了静态扫描的落地实践和最终成果。

本次直播视频精彩回顾,戳这里!
直播回顾:https://yq.aliyun.com/live/965
PPT分享:https://yq.aliyun.com/download/3531
以下内容根据演讲视频以及PPT整理而成。

演讲专家简介:

周梦康(花名:楚松),阿里云资深研发工程师,《深入PHP内核》作者之一,多个开源项⽬目 tipi、yar-java、doc-php的作者与参与者

本次的分享主要围绕以下三个方面:

  1. 为什么要代码静态扫描
  2. 怎么去做代码静态扫描
  3. 发布与集成测试的成果

为什么要代码静态扫描

什么是静态扫描
如下图所示,其实静态扫描的名称非常多,这里统一称之为静态扫描。静态扫描是指在不运行代码的方式下,通过词法分析、语法分析、抽象语法树分析等技术对程序代码进行扫描,验证代码是否满⾜规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。

1
PHP项目为什么需要做静态扫描
这里主要有三点原因:
1)弱类型与无类型声明,PHP7引入了类型声明;
2)解释性语言实时编译;
3)丰富的包、递归依赖。
2
例子:弱类型(泛型返回值)错把数组当对象
3
例子:返回值⽆无类型声明 错把对象当数组
4
例子:类继承成员变量量访问级别覆盖
5
版本兼容性问题
6
还有一些版本兼容性问题也需要通过静态扫描来解决,对于一些“历史悠久”的公司而言,一定会有一些“老”代码,虽然这些项目都是使用PHP进行开发,但是有的可能使用了老的版本,而一些工程师在进行开发的时候可能将一些新版本语法的语法糖写到了老的版本,可能在本地运行没有任何问题,但是一旦到了线上就会出故障了。还有比如老项目使用的PHP版本中一些函数不存在或者有一些语法不支持等,这些都是兼容性的问题。

PHP的运行时编译优势与隐患
7
一些特别小的PHP项目修改完之后直接上传上去覆盖即可,其他语言的项目可能无法这样做,必须要整体打包,因此这既是PHP的一个优势,但也是一个隐患。

PHP可以说是一个“风一样的美男子”,代码写的快,但是类型约束差、风险高,数组使用比较多就可能因为模糊KV多而影响语义,并且整体代码缺失面向对象的思想;PHP编译快并且部署快,因此也导致上下文解析存在一些隐患。

8
PHP 7新特性参数类型、返回值类型声明
PHP也在不断地发展和改进,比如PHP 7就提供了参数类型、返回值类型声明等新特性。
9
PHP 7.4类成员变量类型声明
10
PHP解析小互动
如下图所示的三段代码中,为什么a.php看不到错误b.php却可以?大家可以仔细思考下这部分问题。
11
PHP包管理工具的发展
PHP项目的管理越来越复杂,到了2012年之后,Composer变得非常流行,成为了主流的包管理工具。
12
PHP项⽬发展背后的潜在风险
使用laravel来新建一个博客,其生成的PHP文件数是5927个,代码行数达到了47万行,很难保证其没有错误。因此必须要有自动的语法检测、类型推断等,仅依靠人工检查肯定是心有余而力不足的。
13

怎么去做代码静态扫描

工具选择-PHPStan
14
PHPStan是一种PHP代码静态扫描的工具,并且有VS Code的插件,但是似乎有点卡顿。

工具选择-PHPSA
15
PHPSA与PHPStan比较类似,Fork数和Follow都比较多。

工具选择-Phan
16
Phan的Follow数量最多,并且也有VS Code的插件。其原理在于解析AST,也就是在分析PHP在执行词法分析和语法分析之后生成的抽象语法树AST。

依托PHP-Parser自己造轮子
17
Phan的作者也写了一个PHP-Parser,其主要就是将PHP语法树以数组的方式生成出来。

18
使用Phan
19
首先,Phan是基于抽象语法树的,其需要依赖于php-ast扩展,安装完扩展之后就可以安装工具。

使用Phan简单扫描
如下图所示的就是使用Phan进行简单PHP项目扫描脚本。
20
21
使用Phan扫描项目
如今,大家的项目都是基于Composer进行自动加载或者包依赖的。前面的例子只是测试几个脚本,如果想要将其应用到生产中,前面的方式肯定不足够,因此Phan也支持项目级别的扫描,使用下面的命令就可以扫描和分析出一些错误并形成错误报告。
22
23
项目发布实践——AoneFlow分支管理
24
阿里巴巴的AoneFlow在这一点上或许比GitFlow使用起来更加灵活一些,也方便一些。AoneFlow发布的时候使用的是release包,最后上线也是release包,发布完成之后会合并到master主干分支上去,

项目发布实践
25
项目发布的流程可以主要分为两个方面,包含了预发和正式发布。预发部分包含了项目构建、预发准入、预发部署、集成测试以及预发验证五个部分,在预发准入部分严格上会有一些审批进行拦截,静态扫描就放在集成测试这部分中。在正式发布部分,也包含了项目构建、正式准入、正式部署、合并到master以及线上测试等五个部分。
26
集成测试主要包含了单元测试、接口测试、代码静态扫描、安全测试以及性能测试等。在将代码同步到预发服务器的同时,可以将代码同步到专门做静态扫描服务器的集群上去,这是因为如果公司项目较少,那么预发服务器可以作为静态扫描服务器,不然同步两次也会浪费时间,但是如果公司有很多类似项目都需要扫描,那么就无法在每个预发服务器上都将静态扫描的扩展都安装一遍,也无法让每个预发服务器都来汇报整个编译流程是否OK,应该是与预发部署服务器隔离开的,预发服务器只汇报是否发布成功。这样的好处就是静态代码扫描的扩展只安装在集群里面,所有人的项目都是可以共用的,而且与整个构建系统相关,通过整体流程保证项目稳定性。

PHP是一门艺术
27
其实,PHP在我们的项目里面更像是一门艺术,在早期,PHP较为简单易用,但是与此同时,因为其不稳定性以及一些潜在隐患问题,也被很多人所诟病。可能在很多人眼里,PHP还是十几年前的一个玩具,但是玩具也可以不断升级,正如乐高也可以做一个真正能够跑起来的跑车。因此,如果能够让PHP发挥更大的作用,更是一门艺术。

技术交流

欢迎同学入群与专家实时技术交流

点击链接入群 https://c.tb.cn/F3.ZR58nS

或扫码入群

php

相关文章
|
16天前
|
存储 弹性计算 数据库
阿里云权益中心,助力学生、开发者、企业用云上云无忧
阿里云权益中心支持学生、开发者和企业快速上云,提供“99计划”惠及中小企业和开发者,包括云产品试用、精选优惠和上云扶持。高校用户可通过“云工开物”计划享专属优惠。企业用户可获上云抵扣、1对1服务及成长权益。多种云产品免费试用,降低上云门槛。
阿里云权益中心,助力学生、开发者、企业用云上云无忧
|
2月前
|
关系型数据库 分布式数据库 数据库
阿里云PolarDB登顶2024中国数据库流行榜:技术实力与开发者影响力
近日,阿里云旗下的自研云原生数据库PolarDB在2024年中国数据库流行度排行榜中夺冠,并刷新了榜单总分纪录,这一成就引起了技术圈的广泛关注。这一成就源于PolarDB在数据库技术上的突破与创新,以及对开发者和用户的实际需求的深入了解体会。那么本文就来分享一下关于数据库流行度排行榜的影响力以及对数据库选型的影响,讨论PolarDB登顶的关键因素,以及PolarDB“三层分离”新版本对开发者使用数据库的影响。
74 3
阿里云PolarDB登顶2024中国数据库流行榜:技术实力与开发者影响力
|
2月前
|
人工智能 运维 Kubernetes
阿里云容器服务ACK AI助手正式上线带来的便利性
作为开发者想必大家都知道,云原生容器技术的优势,尤其是近两年的随着容器技术的迅猛发展,Kubernetes(K8s)已成为广泛应用于容器编排和管理的领先解决方案,但是K8s的运维复杂度一直是挑战之一。为了应对这一问题,就在最近,阿里云容器服务团队正式发布了ACK AI助手,这是一款旨在通过大模型增强智能诊断的产品,旨在帮助企业和开发者降低Kubernetes(K8s)的运维复杂度。那么本文就来详细讲讲关于这款产品,让我们结合实际案例分享一下K8s的运维经验,探讨ACK AI助手能否有效降低K8s的运维复杂度,并展望ACK AI助手正式版上线后的新功能。
263 2
阿里云容器服务ACK AI助手正式上线带来的便利性
|
2月前
|
弹性计算 NoSQL 数据库
阿里云降价利好还是利空?利好广大开发者和创业型公司!
阿里云降价利好还是利空?利好广大开发者和创业型公司!百款产品直降,平均降幅20%,阿里云希望通过此次大规模降价,让更多企业和开发者用上先进的公共云服务,加速云计算在中国各行各业的普及和发展。这次降价包括云服务器ECS、对象存储OSS、云数据库都降价了,真降价,直降价:百款产品直降,平均降幅20%,阿里云百科分享阿里云2024年降价信息汇总表
|
2月前
|
弹性计算 NoSQL 数据库
重磅!又降价了,2024年阿里云玩的就是降价!让更多企业和开发者用上先进的公共云服务
重磅!又降价了,2024年阿里云玩的就是降价!让更多企业和开发者用上先进的公共云服务
|
2月前
|
弹性计算 Ubuntu Linux
阿里云助力《幻兽帕鲁》快速开服:全新自动部署功能上线,仅需10秒即可完成部署!
阿里云助力《幻兽帕鲁》快速开服:全新自动部署功能上线,仅需10秒即可完成部署!阿里云服务器搭建帕鲁服务器游戏,服务器稳定无卡顿,先下载SteamCMD,并运行;然后下载Palserver,修改服务ini配置,启动PalServer,进入游戏服务器。今天分享阿里云创建幻兽帕鲁服务器教程。
|
2月前
|
弹性计算 搜索推荐 Linux
阿里云自动部署【幻兽帕鲁/Palworld】功能上线,10秒全自动开服!
阿里云轻量应用主机Lighthouse上线幻兽帕鲁应用模板功能 ,用户只需要点三次鼠标,最快10秒就能自动安装好幻兽帕鲁主机,和自己的朋友一起开心“抓帕鲁”。同时,用户还可以在阿里云控制台的面板直接调整幻兽帕鲁的经验倍率、死亡惩罚等游戏配置,实现便捷、个性化的游戏体验。
阿里云自动部署【幻兽帕鲁/Palworld】功能上线,10秒全自动开服!
|
2月前
|
人工智能 Java 开发工具
阿里云视觉智能开放平台提供了多种SDK供开发者使用
阿里云视觉智能开放平台提供了多种SDK供开发者使用
32 6
|
7月前
|
关系型数据库 MySQL PHP
PHP 原生操作 Mysql
PHP 原生操作 Mysql
81 0
|
7月前
|
关系型数据库 MySQL 数据库连接
PHP 原生连接 Mysql
PHP 原生连接 Mysql
107 0