专栏首页luxixingPHP新手最佳实践

PHP新手最佳实践

不要使用mysql_*系列函数,查询时尽量对sql语句进行预处理

PHP官方目前已经将此系列函数标记为弃用状态,添加PHP对mysql的支持,编译时使用下面的参数

 --enable-mysqlnd
 --with-pdo-mysql 
 --with-mysqli 
 --with-mysql=mysqlnd

mysql_*系列函数不支持 预处理语句,事务,存储过程,异步查询,多条语句查询, 这也是强烈建议使用pdo_mysql或者mysqli的原因. pdo是PHP的数据数据抽象层,为了扩展升级考虑,最好使用pdo_mysql

使用pdo_mysql扩展,查询前进行sql语句预处理,不仅能很有效的避免sql注入,同时一个查询如果被执行多次,那么只需要给预处理的sql语句重新绑定参数,大大提升查询的性能,降低资源(cpu)消耗

不要在纯PHP文件的最后结尾中使用闭合标签

good style:

<?php
phpinfo();

bad style:

<?php
phpinfo();
?>

在最后一行加上闭合标签,很可能会由于不小心,在闭合标签之后加入空白字符,比如换行,示例如下:

<?php
phpinfo();
?>
//here ,some of whitespace

那么假设此文件包含在另外一个文件中,且在上述代码之后使用header函数输出,那么就会报错,这种错误很难被发现 只有当你在模板文件中才会需要闭合标签 如下

<h1><?php echo $title; ?></h1>
<p><?php echo $description; ?></p>

了解一些web安全方面的知识,如sql注入,xss攻击,csrf攻击等等,永远不要相信用户的输入

知道如何避免上述提到的安全问题 比如使用pdo_msyql预处理语句,防范sql注入 比如对用户输入进行过滤,防范xss攻击等等 始终记着对用户输入进行验证,即使客户端使用js对用户数据进行验证了,也不能取代服务器端的验证,客户端js验证是可以绕过的 具体请查看php手册安全部分内容

对于用户输入的数据进行验证和过滤,不要忘记PHP内置的filter_*,尽可能的使用他们了解他们 http://cn2.php.net/manual/en/book.filter.php

比如验证一个邮件地址是否合法

if(!filter_var($emailAddress, FILTER_VALIDATE_EMAIL)) {
    //Email is invalid. Show the user an error message.
}

不要编写重复代码,保持代码精简

即针对同一功能或者业务的代码,尽可能只有一个实现,新手容易犯的错误就是喜欢copy,copy是大忌 比较好的做法就是快速完成需求和功能,然后进行重构,压缩减少代码量,重构的过程会让你的代码更加精简

字节码缓存,为PHP开启apc或者opcode扩展

开启apc或者opcode对性能的提升很大,你需要做的,仅仅是编译安装一个额外的扩展 opcode在php-5.5集成到核心代码中,编译时 --enable-opcode 即可

编码统一使用utf8

  • 项目文件统一使用utf8编码
  • html页面meta部分
<meta charset="utf-8">
  • 数据库表使用utf8编码,链接数据库设定编码
$db = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'root', '');

合理使用数据库字段类型,了解一些数据库设计范式

合理使用字段类型,不仅能减少磁盘使用量,也能提升查询性能

其他一些建议

  • 不要使用正则去解析html,使用 Document Object Model
  • 使用var_dump而不是echo,因为var_dump输出的信息更多,调式的时候很有用
  • 使用缓存,reids,memcache等等
  • 线上环境关闭错误信息提示###
  • post提交数据处理结束后,使用header重定向,避免用户刷新提交垃圾重复数据
  • 不要在循环中执行sql语句(假设是必须的,那么也最好在循环外使用预处理语句)
  • 对密码进行hash加密,PHP-5.5内置hash加密函数 password_hash,可查看手册
  • 上传图片不要存储在数据库里,上传图片时裁剪图片节省存储空间
  • 良好的注释文档,保持php代码风格的一致性(比如缩进一会儿使用tab,一会儿使用space就是特别差的习惯) 良好的代码code style,请参考 PHP-FIG 标准,PHP-FIG是php框架代码规范的非官方组织,有很多框架遵循此编码规范
  • 尽可能多的使用开源的解决方案,避免重复造轮子,在自己写代码完成一个功能前,先去搜索引擎或者技术网站查找是否已经有相关的解决方案,
  • 避免吹毛求疵,比如到底是使用'还是"号的性能比较好,如果你使用了opcode扩展,两者之间是没有什么区别的,保持风格一致即可
  • 使用版本控制工具维护你的代码,现在流行的是git
  • 学习一些设计模式,比如单例模式,工厂模式,知道他们的应用场景,知道应用场景比知道他们写他们更重要

文中如有纰漏,错误之处,请指出 对于后续中列出的其他建议,如果有人觉得需要详细展开,请留言。 参考或者原文出处:PHP – Best Practises

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • php-config介绍

    很多时候,我们编译安装完PHP之后,需要重新编译安装,但是原来的编译参数不记得了,通过php-config命令可以方便的重新获取,除此之外,php-config...

    luxixing
  • Yii2 框架核心概念之属性(手册翻译)

    在PHP里,类的成员变量也被称之为属性,这些变量是类定义的一部分,被用来表示类实例的状态(区分不同类实例)。在具体的实践中,你可能要经常处理可读或者可写属性的特...

    luxixing
  • 一段PHP按照权重随机item的代码

    luxixing
  • 什么是浏览器的重绘与回流

    http://blog.sina.com.cn/s/blog_8dace7290102wezv.html

    前端博客 : alili.tech
  • 快速学习-Spring(通过注解配置bean)

    相对于XML方式而言,通过注解的方式配置bean更加简洁和优雅,而且和MVC组件化开发的理念十分契合,是开发中常用的使用方式。

    cwl_java
  • http协议的keepalive属性

    在使用http的时候,有1.0的协议,有1.1的协议,两者最大的区别就是1.0的协议会将connection设置为close,从而是一种短连接的状态,从而每次...

    SRE运维实践
  • 【转】不同内核浏览器的差异以及浏览器渲染简介

    浏览器最重要或者说核心的部分是“Rendering Engine”,可大概译为“解释引擎”,不过我们一般习惯将之称为“浏览器内核”。负责对网页语法的解释(...

    书童小二
  • 生成器及推导式

    3、return结束函数,yield不结束函数,生成器函数执行之后得到一个生成器作为返回值

    py3study
  • 图像聚类的python实现

    因为之后的项目要用到影像聚类,之前一直是用ENVI实现,现在想学下python。 学习的这一篇:小项目聚类

    py3study
  • Python|木兰编程语言详解

    打开软件。出现下面的交互界面。由于对ulang语言一窍不通,只能使用help命令。

    Rare0716

扫码关注云+社区

领取腾讯云代金券