项目开发规范

一:编码命名规范

  • PHP 编码命名规范

PSR(PHP标准规范) 是PHP开发的实践标准,主要包含基础编码规范、编码风格规范、日志接口规范、缓存接口规范、Http消息接口规范等。参见 https://learnku.com/docs/psr

    1.基础编码规范

       1)PHP代码文件必须以不带 BOM 的UTF-8编码

       2)类的命名必须遵守 StudlyCaps 式的首字母大写的帕斯卡命名法。

       3)类中常量所有字母必须大写,单词间用下划线分割

       4)方法名称必须符合 camelCase 式的首字母小写的 驼峰命名法。 

    2.编码风格

        1)代码必须用4个空格而不是【TAB】进行缩进。好处是方便查看、比较、重新阅读整体的代码,因为不同的编辑器 【TAB】键占用的空格数不一致,使用不同编辑器打开代码时容易造成格式混乱。

         2)类的属性、方法必须添加访问修饰符 (private、protected、public、abstract 以及 final 必须声明在访问修饰符之前,而 static 必须声明在访问修饰符后面)

         3)PHP 的关键字必须小写 (true 、false、null)

  • 数据库设计约定

      1. 数据表与字段

         1)库名尽量与应用名一致,使用小写英文和下划线。

         2)数据表与字段用字母、数字加下划线。

         3)数据表名称不使用复数名词,命名最好是“业务名称_表的作用”,如 tiger_task

         4)唯一索引名为uk_字段名;普通索引名则 idx_字段名

         5)小数类型使用 decimal ,禁止使用 float和double(因为在存储的时候存在精度损失的问题,很可能在比较值的时候得不到正确的结果)。若存储的数据范围超过了decimal的存储范围建议将数据拆分为整数、小数分开存储。

         6)若存储的字符串的长度几乎相等,使用char定长字符串类型

         7)varchar 可变长字符串,不预先分配存储空间。长度超过 5000 后定义字段类型为text,独立一张表用主键来对应,避免影响其他字段索引效率

         8)表必备三个字段,id、created_at、updated_at

         9)字段允许冗余,但必须考虑数据同步问题。冗余的字段不应是频繁更改的字段,不是 varchar 超长字段,更不能是 text 字段。商户类目名称使用频率高,字段长度短,名称基本不变,可在相关联的表中冗余存储类目名称,避免关联查询。

         10)单表行数超过 500万行或者单表容量超过2G,才推荐进行分库分表。若预计三年后数据量根本达不到这个级别,不建议建表时分库分表

         11)合适的字符存储长度。如人的年龄采用 unsigned tinyint(0-255);海龟就必须使用 smallint 了

         12)尽量使用数字型字段。因为引擎处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型只需要比较一次就好了。(IP-inet_ aton:ip转数字,inet_ntoa:数字转ip、时间可以转换为数值型存储)

         13)最好不要给数据库留 NULL (备注、描述、评论等可以设置为NULL)。原因是在 Mysql 中含有NULL值的列很难进行查询优化,而且对表索引时不会存储NULL值,这样就会大大降低索引的效率。

         14)拆分大的 DELETE 和 INSERT 语句。因为这两个操作会锁表,表锁住后其他任何操作都会进不来。使用LIMIT是一个好办法,如 :DELETE FROM logs WHERE loge_date <= '2019-10-14' LIMIT 1000。

    2. 索引规范

          1)业务上具有唯一特性的字段,即使是组合字段也应该建成唯一索引。建组合索引时,区分度最高的放左边

          2)超过三个表禁止 join 。需要 join 的 字段数据类型保持一致

          3)页面搜索严禁使用左模糊或者全模糊,如果需要,需要走搜索引擎来解决该类问题。

          4)若有全球化需要,所有字符集存储与表示均采用UTF-8编码。使用表情是采用utf8mb4 。Mysql支持的utf8最大能编码3个字节长度的字符。MySql5.5.3后增加的utf8mb4保存4个字节字符。不扩充utf-8字符集应该是出于节省存储空间以及向下兼容考虑,毕竟utf-8能支持大部分字符

         5)使用索引是有代价的,索引需要存储空间,也需要定期维护。每当有INSERT、UPDATE(索引列被更新)、DELETE语句执行时,索引本身也会修改。因此不必要的索引反而会让查询时间变慢,需要定期维护。

         6)对于唯一值得列,索引效果最好,对于具有多个重复值的列,如年龄和性别,建立索引不是好办法

      3. SQL 命令优化规范

         1)使用参数化查询:防止SQL注入,预编译SQL命令提高效率

          2)去掉不必要的查询字段。

          3)选择最有效的表名顺序:数据库解析器是按照从右到左的顺序处理FROM字句中的表名。因此FROM字句包含的表中,记录条数最少的表放在最后

         4)不要使用 SELECT * :以提高查询效率,减少数据数据量,提高传输速度。

         5)统计相关的查询应避免在业务高峰期进行,或者从库中统计数据,同时建议把数据先保存到内存中再写入数据库

         6)where 子句中对字段值进行null 判断、包含not null,!=等操作,或like '%asa'都无法使用索引,从而引发全表扫描。

         7)如果使用到了临时表,在存储过程的最后需要将所有临时表显式删除。先truncate table再drop 从而避免表较长时间锁定。

二:网站安全的应用

   1、系统级别的错误不应直接暴露给用户,用户提示信息需要有好一些,系统错误信息记录日志

   2、无论客户端是否做过数据校验,服务端必须要有数据校验

       1)输入字符长度

        2)数据类型校验   

        3)字符串重复性校验 

        4)输入值进行 html 编码 (htmlentities 字符串转为html实体),防止 xss 攻击

        5)输入字符串的单引号、双引号加反斜杠进行转义(addslashes),防止 SQL 注入 ,如下所示

         select * FROM users where user_name='user_name' AND pwd=md5(pwd); --- 假设 user_name 输入为 ' OR 1=1 #

         select * FROM users where user_name='' OR 1=1 #'AND pwd=md5(pwd)

        6)对于接收的参数,过滤掉任何远程内容的引用(正则匹配替换)(尤其是式样、js)

    3、页面输出前做 html 转码(html_entity_decode html实体转码为字符串),不能原内容输出,防止 xss 跨站攻击

    4、机密信息不能明文存储,需要进行加密

    5、尽量使用 cookie 的 httponly 属性 setcookie 第7个参数),使得客户端js无法读取cookie。对 cookie 内容进行加密,防止xss攻击cookie欺骗

    6、使用参数化SQL命令而非动态拼接的SQL命令,防止SQL注入

    7、实现 session token 表单令牌,拒绝不明来源的非法提交

    8、对用户上传的文件进行严格限制。(文件类型、文件大小等,同时对上传文件后存储的文件目录进行权限限制,去掉脚本执行权限和文件解压权限等,防止上传入侵)

    9、不要直接暴露文件下载地址,而要将下。并对每个ip做刷新次数限制,防止CC攻击从而耗尽流量。

三:前端优化约定

1、减少http请求,多个css合并

2、压缩css、js代码

3、css尽量放在html头部,js尽量放在尾部

4、如果是移动端,单个数据对象最好小于25k

5、压缩图片并尽量使用png图片,因为它的功能更多体积更小

参考 : https://www.cnblogs.com/sochishun/p/7010971.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.系统是为两个不同的用户服务的,所以功能要分成两个部分,一部分给管理员用,一部分给普通用户用. 2.为了信息的安,所有使用系统的人必须是在数据库里有信息记录的,那就需要注册,然后用用户名密码进行登录,没有这些的人不能登录. 3.系统的界面的设计要合理,排版要科学,色彩搭配要合理,让人看了会感觉到体验很好,可以一眼就了解系统的整体布局. 4.每一个功能之间,不同操作者之间的功能衔接要好,底层代码要逻辑清晰,保证各个功能的响应时间. 5.系统里边有很多的文本输入功能,文本框大小要合理,文字要大小适中,最好可以自动检测格式和敏感词,在文本框上面要做出相关说明. 6.网站要可以自适应,比如在电脑端和手机端分别打开系统,它的界面并不会发生错乱,会自动根据屏幕大小调整模块的布局。 基于b/s结构开发系统有诸多优势:b/s结构能够将许多不同语言、不同数据结构和不同操作系统等众多平台相结合,并在同一平台上实现多种功能模块。b/s结构更易于进行数据交换与共享。b/s结构提供了大量工具来帮助软件开发人员进行二次开发与维护工作,包括程序编译工具、应用程序编程工具和数据库访问技术等,它不但大大减少了软件开发人员的工作量,也使开发效率得到了提高。b/s结构上的应用程序和数据库之间有统一接口格式来进行通信与交互。进行通信和交互有以下优点: 2、灵活高效:用户可以在多个应用之间自由切换; 3、易于扩展:可以根据实际业务情况添加新功能模块,而不必对现有功能进行修改; 4、专业高效:系统操作简单方便; 5、节约成本:降低维护费用和运营费用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值