文档章节

php注意事项

麦社
 麦社
发布于 2016/06/01 14:34
字数 1342
阅读 5
收藏 0

1.首要意识:安全

大多数时候,我们开发的Web程序都是需要跟数据库打交道的,所以这里几乎可以说SQL注入是一个怎么也无法避免要拿出来讨论一下的问题。而且近年来像XSSCSRF攻击也变得大行其道,使得"黑客"们貌似又有了一把把利器,而我们总是处于被动的状态。不过我们要记得是下面这两个原则:

1. 永远不要相信用户输入的东西。(老话了,但这是真的)
2. 将自己需要输出的数据进行转义。

简单来说就是:filter input , escape output

如果你是新手,不要再使用类似以下的查询语句了:

SELECT FROM users WHERE username = $_POST['username'] AND password = $_POST['password'];

还有就是,使用PDO或Mysqli吧,不要再使用老式的mysql操作了。

而对于,CSRF的解决方案,目前接触的都是给每一次的表单提交都设置一个token值,然后在表单提交的时候校验之即可。

2.明确地知道各个比较操作符的差别

PHP的比较操作符,这其实可以说是一个很小的注意点,但是在某些时候真的很重要。比如说很多时候我们得考虑清楚,该用==还是===,如果你使用过strpos()这个函数,下面的代码可能会给你一个直观的感受:

<?php
 
$authors = 'Chris & Sean';
 
if (strpos($authors, 'Chris')) {
    echo 'Chris is an author.';
} else {
    echo 'Chris is not an author.';
}

上面这段代码的运行结果其实是输出Chris is not an author,但是现实情况是,Chris & Sean真的是Author啊,怎么回这样呢?其实是这样的:Chris正好出现在Chris & Sean首位开始处,也就是0这个位置,所以substr()返回了,由于条件判断语句中bool判断,所以0作为了false处理,于是程序输出了Chris is not an author,但是在这种情况之下我们该怎么处理呢?我们其实可以这样的:

<?php
 
if (strpos($authors, 'Chris') !== FALSE) {
    echo 'Chris is an author.';
} else {
    echo 'Chris is not an author.';
}

这里的!==!=的不同就体现出来了。

3.可以减少使用else就少使用else

此处有误人子弟之嫌疑,请大家警惕,还是自己喜欢的那样好。

这个貌似从我一开始接触编程就有的一个想法,因为每次看到if(){}else{}就有一种这一段其实可以写得更好的感觉,因为一旦你减少了使用else关键字,你得代码会减少两行!没错,两行也是我们的追求,而且,从我的经验看,else少的代码貌似可读性更高,对我来说。

if( this condition )
{
$x = 5;
}
else
{
$x = 10;

如果,在$x的默认值是10,还是下面这样写感觉比较好:

$x = 10;
if( this condition )
{
$x = 5;
}

4.使用一个好的IDE

对,我可以说就是IDE控,并且是JetBrains家的粉。在开发PHP应用的时候,我首先会推荐大家使用PhpStorm,这么智能的IDE会帮你解决掉很多不必要的错误,比如很多Laravel的初学者都会遇到类似:

App\Http\Controller\Article not found;

这样的错误,你要是使用PhpStorm,自动就会帮你use App\Article;,又何必去受这些挫折和打击自己的自信心?

5.多用str_replace()

在很多时候我们需要对一些字符串进行替换,在PHP中有以下几个函数可以达到这个目的:

str_replace()
ereg_replace()
preg_replace()

如果你确实是需要使用正则匹配,那就使用preg_replace(),而如果在可实现替换的情况下,请使用str_replace(),因为据不完全统计,str_replace()的效率在这三个当中是最高的。

6.使用三元运算符

这个可能很多人都有这个感受,使用三元运算符之后,我们可以去掉一堆if else语句了,代码又短又爽。

$host = strlen($host) > 0 ? $host : htmlentities($host);

7.使用缓存

目前PHP热门的缓存技术可能就是Redis和Memcached了,在PHP的官方文档中,也有Memcached的使用教程,至于Redis,我最近在研究中,后续会给出一些教程,如果一切顺利的话。

8.使用框架

框架的好处很多,可能是在性能方面有所损失外,貌似找不到不用框架的理由了,框架即可以加快你的开发速度,也可以让你在写代码的过程中撸的舒舒服服,而且想很多安全问题,你都会得到很好的解决。我这里首推Laravel,不过像Yii2 Slim Symfony都是非常棒的框架,除了Symfony没有尝过过之外,剩下的三个我都有使用经历,最后就基本是用Laravel了。不过我建议的Laravel可能不适合你,这还是得看个人喜好。

9.用isset()代替strlen()

如果你需要在项目代码中需要根据一个字符串的长度来做条件判断,这个时候非常推荐你直接使用isset(),因为在同等条件之后,isset()的速度是strlen()的五倍左右,所以:

<?php
 
if (isset($username[5])) {
    // The username is at least six characters long.
}


if (strlen($username) >= 6) {
    // The username is at least six characters long.
}

© 著作权归作者所有

上一篇: 列类型
下一篇: php商用加密
麦社
粉丝 0
博文 7
码字总数 6373
作品 0
长沙
私信 提问
queXS 1.7.3 发布, 基于Web的CATI系统

queXS 1.7.3 继续修复 bug,移除 CKEditor 使用 PHP 执行 JavaScript 的依赖,修复了 PHP 严格注意事项,修复了在 IIS 下运行的一些问题。 queXS (读 kweks-ess) 是一个基于Web的CATI (compu...

oschina
2013/04/06
663
0
VSCode安装PHP扩展插件

PHP IntelliSense 主要注意事项: 1、需要在VSCode设置中添加php.executablePath,因为我是直接安装的WampServer,所以路径是在D:WGwamp64binphp下 2、需要在VSCode设置中修改php.suggest.b...

临江仙卜算子
2018/07/04
2.8K
0
百度贴吧云签到

本工具可实现对你的贴吧的自动签到 注意事项: 1.不适用于不支持MySQLi类的主机 2.环境应该为PHP+MySQL 3.关于MySQL数据库地址,可以这么填:数据库地址:端口,端口一般无需填写 4.关于云平台...

Kenvix
2014/06/14
5.4K
5
PHP-Java-Bridge使用笔记,2014年9月最新版

/============================================================ @author ken(695093513@qq.com) @date 2014-09-09 * ==============================================================/ /=......

卖小女孩的小火柴
2014/09/19
2.8K
10
EsParser 1.4 发布,开箱即用,高性能查询 Elasticsearch

EsParser 是 PHP 的操作类库,通过写 sql 来转化 dsl 来查询 Elasticsearch,特点是开箱即用、高性能查询 ,目前1.4 已发布,更新如下: 更新支持深度分页scroll特性 更新新的底层算法 修复其...

qieangel
2018/04/26
1K
5

没有更多内容

加载失败,请刷新页面

加载更多

官方来源的 Duo Mobile App 解决了我的 Network Difficulties 问题

https://help.duo.com/s/article/2094?language=en_US 我利用百度搜索下载了一个 Duo Mobile App (由于 Google Play)在大陆不可用。 在扫描旧手机上的 Duo Mobile App 的二维码时, 显示出错...

圣洁之子
8分钟前
1
0
Zabbix监控Mysql容器(Docker容器)主从是否存活

1、在Zabbix Web端创建模板 2、为该模板创建监控项 3、创建触发器 4、在zabbix-agent端操作 在/etc/zabbix/zabbix_agentd.d新建customize.confw文件 内容如下 UserParameter=mysql.replicat...

abowu
9分钟前
1
0
基于 RocketMQ 的同城双活架构在美菜网的挑战与实践

本文整理自李样兵在北京站 RocketMQ meetup分享美菜网使用 RocketMQ 过程中的一些心得和经验,偏重于实践。 嘉宾李样兵,现就职于美菜网基础服务平台组,负责 MQ ,配置中心和任务调度等基础...

大涛学长
15分钟前
1
0
设计模式之:外观模式和桥接模式

作者:DevYK 链接:https://juejin.im/post/5d7e01f4f265da03b5747aac 外观模式 介绍 外观模式 (Facade) 在开发过程中的运用评率非常高,尤其是在现阶段,各种第三方 SDK “充斥” 在我们周边...

Java架构Monster
17分钟前
1
0
人证合一核验设备

人脸身份验证机,人证合一设备1:N如我们现在在车站或一些重要的场所如步行街、城中村等人流密集的场所应用的人脸识别布控系统,其特点是动态和非配合。所谓的动态也就是识别的不是照 片,不是...

非思丸智能
18分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部