0

0

对于Web开发中要注意的18个关键性错误

巴扎黑

巴扎黑

发布时间:2016-11-11 15:31:01

|

1037人浏览过

|

来源于php中文网

原创

前几年,我有机会能参与一些有趣的项目,并且独立完成开发、升级、重构以及新功能的开发等工作。

  本文总结了一些 PHP 程序员在 Web 开发中经常忽略的关键错误,尤其是在处理中大型的项目上问题更为突出。典型的错误表现在不能很好区分各种开发环境和没有使用缓存和备份等。

  下面以 PHP 为例,但是其核心思想对每一个 Web 程序员都是适用的。

  应用程序级别的错误

  1、在开发阶段关闭了错误报告

    我唯一想问的是:为什么?为什么在开发的时候要关闭错误报告?

  PHP 有很多级别的错误报告,在开发阶段我们必须将它们全部开启。

  如果你觉得错误不会发生,那么你把程序太理想化了,在现实世界中,错误是必然的。error_reporting 和 display_error 是两个完全不同的方法,error_reporting ()设置了错误的级别,而 display_errors 则是设置错误信息是否要被输出。

  在开发阶段,错误报告的级别应该设置成最高的,比如以下设置: error_reporting (E_ALL);以及 ini_set (‘display_errors’, true);

  2、淹没错误

  和上一点相反,很多程序员喜欢将错误淹没了,你明知道错误会发生,但是你选择将错误隐藏掉,然后可以早早回家睡大觉,殊不知将来会发生更严重的错误。

  3、代码中任何地方都没有使用日志

  软件开发的一开始你就要牢记使用日志,不能到项目结束了才去弥补日志功能。很多程序员都会用这样或那样的手段进行日志记录,但是很少有人能真正用日志来记录异常信息,试问一个没有人查看的日志系统有什么用?

  4、没有使用缓存

  在的应用系统中,我们可以在多个系统层次上使用缓存,比如在服务端、应用端和数据库端等。和日志一样,缓存也应该在一开始就应用到系统中去,你可以在开发阶段禁用缓存,等到了产品发布后再将缓存开启。

  5、丢弃了最佳实践和设计模式

  你看到过多少人使用自己的密码加密算法?很遗憾的告诉你,有很多,因为他们认为将更了解它。

  最好的实践方式和设计模式已经由前辈创建了,这往往比你自己再造一个轮子要来的简单奏效,我们开发者只需要熟练掌握这些设计模式并且合理地应用在项目中即可,比如一些加密算法。

  6、没有使用自动化测试

  在每一个 Web 项目中都会使用到测试,就像日志一样,如果没有人管理和使用,那么测试也是一无是处的。

  运行测试工程是一项枯燥乏味的工作,幸好有一系列工具帮助我们实现自动化测试。在 PHP 开发中,有一款很好的测试工具叫 Jenkins,使用起来非常方便。

  7、没有做代码审查

  在团队中工作是一项非常大的挑战,因为每一个成员都有自己不同的工作习惯和方式,如果没有良好的规范,那么项目开发就会走很多弯路。

  团队中的每一个成员都应该互相审查代码,就像单元测试,它可以帮助项目变得更加干净和一致性。

  8、编程只考虑理想情况

  你是否遇到过自己或者别人的代码在交到客户手中后经常出问题,甚至是乱套了?我当然没有。

  出现这种情况往往是因为开发者懒惰了,只考虑了理想情况,这会导致数据库崩溃了、PHP 发生致命错误、甚至是服务器被黑。程序员在写代码时不仅要考虑最理想的情况,更要考虑最坏的情况,思考全面,才能让代码覆盖所有的情况。

  9、没有正确运用面向对象编程的思想

  大部分 PHP 初学者都不会再其代码中运用面向对象的思想,因为这个概念在刚开始的时候很难理解

  当然面向对象的概念并不是简单地将一些类组织在一起

  对象、属性、方法、继承和封装等都是 OOP 中最基本的概念,开发者正确使用了面向对象设计模式后,就有能力写出更干净、更有扩展性的代码了。

  10、“飞行模式”(On-the-fly)编程

  大部分开发者都会遇到这样的情况:“快,客户需要一项新功能,要能运行 ASAP”,于是你就在源代码上新增一些功能,然后直接上传到正在运行的服务器上,这种编程方式我们称其为“飞行模式”(On-the-fly)编程。

自学 PHP、MySQL和Apache
自学 PHP、MySQL和Apache

本书将PHP开发与MySQL应用相结合,分别对PHP和MySQL做了深入浅出的分析,不仅介绍PHP和MySQL的一般概念,而且对PHP和MySQL的Web应用做了较全面的阐述,并包括几个经典且实用的例子。 本书是第4版,经过了全面的更新、重写和扩展,包括PHP5.3最新改进的特性(例如,更好的错误和异常处理),MySQL的存储过程和存储引擎,Ajax技术与Web2.0以及Web应用需要注意的安全

下载

  我们在开发软件时,尤其是中大型的项目,都必须按照工作流程来进行分析、编程和发布,这将大大减少未来软件的 bug。这种“飞行模式”并不可取。

  数据库级别的错误

  11、没有将数据库读写分离

  为了能长时间运行复杂的系统,每一个程序员都应该考虑到系统的可扩展性,系统 99% 的时间都不需要考虑扩展,因为并没有如此大的流量。

  为什么要数据库读写分离?

  在每一个系统中,数据库将会是第一个出现的瓶颈,在大流量的冲击下,数据库很可能将会是第一个阵亡的。所以大部分情况下我们会用多个数据库来分散流量,开发者经常会使用 Master – Slave 模式或者 Master – Master 模式。Master – Slave 是最受欢迎的一种数据库分压模式,它会将指定的 select 语句路由到每一个 Slave 服务器,这样 Master 服务器的压力会减轻不少。

  12、代码只能连接到一个数据库

  这和上一个错误非常像,但是开发者有时候因为某些原因需要连接到多个数据库,比如你会将用户日志、活动信息流、实时数据分析等高负载的数据放到不同的数据库中来缓解对主数据库的压力。

  13、没有检测数据库漏洞

  如果你不对数据库进行漏洞检测,就相当于给大部分黑客敞开了服务器的大门。

  在众多漏洞中,数据库漏洞是最脆弱的,最常见的就是 SQL 注入。因此定期做数据库漏洞检测还是很有必要的。

  14、数据表不建索引

  索引在数据表中有着非常重要的作用,合适的索引可以提高每张表的性能,这里有一篇文章就讲述了如何创建索引以及何时创建索引。

  15、没有使用事务机制

  数据完整性对 Web 系统非常重要,如果数据一致性发生错误,那么整个系统都会崩溃并且难以修复。合理地运用数据库的事务机制将有效地解决这个问题。比如你要保存用户数据,在 table1 中有e-mail, username 和 password,table2 中有 first name, last name,和 gender age。我们可以利用事务对两张表更新时保证数据同时被更新或者同时不被更新。

  16、没有加密敏感数据

 对于数据库中的敏感信息,如果你不对它们进行加密,或者用简单的算法进行加密,那么在 2014 年你肯定会遇到一些麻烦的问题,黑客们一旦入侵你的数据库,用户的密码或者其他重要信息就会一览无余。

  PHP5.5 中提供了一个哈希加密方法,使用如下: 

$hash = password_hash ( $password, PASSWORD_BCRYPT );

  17、没有备份

  看到下面这张图片没,如果遇到这样的情况,你又没有备份,那么一切都 over 了。

 101552ivbihjjklhkuuuyy.jpg

  18、没有监控

  没有监控,你将不知道接下来会发生什么事情,对于监控,要注意以下几个问题:

•有多少人可以直接访问这个应用服务?

•服务器是否在高负载下运行?

•我们需要用另一台数据库服务器来扩展系统吗?

•应用系统的失败点在哪里?

•系统目前正处于离线状态吗?

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

12

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

4

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

18

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

19

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

3

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 10.4万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号