>本文将涵盖大多数PHP开发人员在处理中和大型项目时所做的最大的编码监督。诸如开发环境之间没有区别或不实施缓存和备份等监督。
>以下示例在PHP中,但是每个问题背后的想法是通用的。 这些问题的根源主要在于开发人员的知识和经验,尤其是缺乏它。我不是要抨击任何人,我不认为自己是了解一切的完美开发人员,所以请忍受我。
根据我的经验,我们可以将这些问题分为三个主要组:设计级别,应用程序级别和数据库级别的监督。我们将分别分解每个。
钥匙要点
始终启用开发过程中的错误报告以尽早捕获和解决问题,以确保鲁棒的应用功能。
>如果您认为错误永远不会发生,那么您正在编码理想的情况,这仅在理想的世界中发生。
>
>错误报告应始终处于开发中的最高设置:error_reporting(e_all);和ini_set('display_errors',true);注意:E_ALL是自PHP 5.4以来最高的,因为E_strict错误成为PHP 5.4中E_ALL的一部分。如果使用较旧的PHP版本,则使用error_reporting(e_all | e_strict);也包括严格的错误警告。
>使用@运算符抑制错误,甚至比根本不打开它更糟糕,因为您有意识地在地毯下扫了污垢。您知道错误正在发生,您只想隐藏它,关闭任务并提早回家。您没有意识到的是,在摇摇欲坠的基础上建造一些东西将在以后会产生更大的后果。
>>您可以在此处阅读有关此的深入解释。
> 中的任何地方都没有记录开发一个项目必须从一开始就考虑登录。您不能只是在末尾登录时螺栓。
>大多数开发人员确实使用一种或另一种方式来记录,但几乎没有时间实际验证这些日志是否存在错误。如果没有人看日志,记录的意义是什么?
> PSR建议确实存在用于记录,PSR-3是准确的,这篇出色的文章说明了如何实现PSR-3记录。
缓存。您总是可以在开发中将其禁用,但是一旦将所有内容都推向生产环境,请确保一切都可以。
在服务器级别上,您可以使用varnish,这是反向http代理,它将文件存储在内存中,应安装在Web服务器的前面。
您可以在本文中深入阅读:SitePoint PHP - 未播放的Opcache。
php 5.5之前,您可以使用APC,它也具有用户缓存功能。
在应用程序中实现缓存时,有几种技术。一个好的做法是缓存数据,该数据不会经常变化,但会反复查询。
>高速缓存数据库对数据库进行了重大查询,因为数据库始终是每个PHP应用程序中最大的瓶颈。忽略最佳实践和设计模式
您看到有人实现了自己的密码加密算法多少次?可悲的是,这仍然发生在今天,因为缺乏知识或更危险的是,因为“我知道更好”的态度。
好吧,我不想给您带来坏消息,但是有99%的时间您不了解它。
这些最佳实践和设计模式被认为是由软件工程师的原因比您和我更明智的原因,开发人员的唯一工作是为这项工作选择正确的模式。
Martin Fowler的企业应用程序体系结构的模式
工具”。实际上,有很多工具可以帮助您自动化测试,这是一个称为连续集成的整体实践。
>在PHP社区中广泛使用的一种工具称为Jenkins,它是CI服务器,不仅可以测试应用程序。塞巴斯蒂安·伯格曼(Sebastian Bergmann)为詹金斯(Jenkins)创建了一个出色的模板。
如果您发现这太压倒了,则至少使用phpunit,behat或phpspec为应用程序编写单元测试。起初似乎有很多工作,但是从长远来看,测试可以帮助项目。
不审查 /审核代码
在团队中工作的
>在每个团队成员都习惯不同风格的编程风格的情况下,并且如果没有良好的规范,项目就可以迅速进行侧面。审核和审核之间的区别是您检查代码的时间。审查通常发生在将代码库合并到代码库并合并后进行审核之前。
审核是一件更好的事情,因为您有机会谈论代码,建议改进或修复,然后再与其他团队成员的代码合并。
评论的缺点是它正在阻止开发,因为在每次合并(在所有测试均为绿色的测试均为绿色之后)之前,至少有两个开发人员需要讨论代码,这是审计发挥作用的地方。
审核发生后进行了合并,但它是无障碍的,但功能大大降低,因为它错过了早期捕捉虫子的机会。
审核比根本不检查代码还要好。
>为了帮助此过程尽可能平滑,您可以使用称为Phabricator的工具,该工具是由Facebook的优秀工程师专门为此目的而创建的。它支持两种代码检查策略。
>曾经发现自己或听说过一些无关紧要的样板代码并融入了所有地狱的情况?我当然做到了。
大多数情况下,这是因为开发人员很懒惰,并且为理想方案编写代码,在此情况下,数据库失败,PHP致命错误和服务器黑客攻击是不存在的。代码应以完全相反的情况编写,开发人员应为他们能想到的最糟糕的情况编写代码,即使这样,该代码也不会涵盖某些晦涩的角案例签名并具有即时的完整管理员访问。
>假设您的服务器不会被黑客入侵,否则您的代码不会在某个时候断开,并且您的数据库始终启动并运行是错误的。生产代码应涵盖这些方案和日志错误。
在PHP中,甚至没有意识到错误,就很容易提出错误。这主要是因为过去做出的不良语言设计决策,而不是由于时间而纠正。 PHP希望使开发人员不必考虑安全性,编码和角落案例,实际上开发人员应该非常了解这一点,并始终练习防御性编程。
不正确使用OOP原理
> PHP新的PHP开发人员在其代码中没有使用面向对象的编程,因为首先,该概念很难掌握。 OOP在1960年代首次使用,多年来一直在不断完善,网络上有大量有关它的信息。
>对象,属性,方法,继承,封装等的概念都是OOP的组成部分。
>正确使用这些原则的开发人员了解了OO设计模式,坚实的原则(单一责任,开放式,Liskov替代,接口隔离和依赖性反转)以及如何在一般而言编写清洁代码,灵活的代码,没有't具有硬编码的依赖性,并且易于扩展和建立。
>>了解OOP并开始编写不依赖硬依赖性的干净代码永远不会太晚(查看您,PHP Frameworks)。
“即时”编码
大多数开发人员在
上大喊大叫时要做什么实时服务器。这称为在线编码或牛仔编码。>与其他每个行业一样,在软件开发中,工作流程和理智流程也应实施,以使项目取得成功。
通常,PHP和动态语言一般会鼓励对代码库进行快速更改,立即查看修改的结果,但是这些更改应在生产环境中受到限制。
>
>要注意的另一件事,不要将连续交付与牛仔编码和混乱管理混淆。持续交付恰好是实施和优化开发工作流程,因此可以尽快将代码部署到生产环境中。>数据库级别的监督
不区分读 /写查询
>您确定将使用许多人使用Web应用程序,例如公司内部数百名员工使用的企业应用程序,您可以做出必要的步骤,以使项目更轻松地缩放。
>为什么要分开读 /写查询?
>请记住,如果您知道最终需要设置主人 - 从>>>
仅编码一个数据库连接
这与上述监督密切相关,但是有时开发人员可能有其他理由连接到多个数据库。例如,如果您将用户日志,活动流,分析或其他知道读/写操作经常发生的数据保留,则可以将此流量卸载到其他数据库服务器中。
>确保使用数据库库,该数据库库允许您连接到多个数据库服务器,并且在它们之间很容易切换。一个好的解决方案是实现PDO并使用aura.sql扩展PDO。
不测试exploits的查询>如果您不测试数据库(和应用程序)的漏洞利用,则某些黑客会成功,他可能会成功。
>数据库容易受到一系列漏洞的影响,最常见的是SQL注入攻击。
>使用此备忘单,并通过应用程序的数据库访问库运行查询。在您的前端字段中写下这些语句,例如用户名,登录页面上的密码字段。如果疑问都没有通过,您可以购买啤酒并庆祝。
不将索引添加到表
索引就像表的TOC一样,它是性能提升,应将其添加到每个表格中,并将其执行查询的列(例如,Whewh where子句之后的列)。>数据库索引背后有一个完整的理论,何时创建它,在哪些列和涵盖的内容上。写了一个整个单独的文章系列。
>>
>您将交易用于处理的相关数据,持续或删除在一起。>
例如,您保存有关用户的数据,例如:电子邮件,表1中的用户名密码以及诸如名称,姓氏,性别年龄等的个人资料数据。>表1
中删除数据成功,但失败了>表2
,则用户的配置文件数据将保留在数据库中,更糟糕的是不会连接到任何东西,它将是孤儿。>
>通过使用交易不会发生这种情况,因为只有在交易中所有单独的操作(例如,从表1和表2中删除数据)成功的整个操作才能成功,否则数据库将返回到先前的状态。不固定敏感数据
>以纯文本存储密码,或者在2014年滚动您自己的加密算法是不可接受的。 PHP社区现在已经足够成熟,可以更好地了解。
>仍然,大概有成千上万的数据库,其中敏感的数据被存储了未加密乞讨被黑客偷走。
>>
$hash = password_hash( $password, PASSWORD_BCRYPT );注意:无需加盐,因为它已经为您处理。 在数据库中存储$ hash,然后用此方法验证哈希:
>注意:如果您没有PHP 5.5(您现在应该现在应该),则可以使用password_compat库,该库实现了完全相同的方法。
处理财务数据要棘手,因为您需要对服务器,应用程序和数据库级别具有PCI合规性。此处已经写了一篇更深入的文章:SitePoint PHP - PCI合规性和PHP开发人员。应用程序设计监督
if ( password_verify( $password, $hash ) ) { ... }不区分开发环境
>我看到许多开发人员甚至小型团队为自己建立了糟糕的开发环境。
例如,处理新功能或修复错误并直接在实时网站上ft ft的文件。这在许多层面上都是错误的。>有团队可以创建的无限数量的工作流程,但是网络开发的经典是使用至少三个环境:开发,分期和生产。
难怪开发圈中最常见的短语是:
由于创建了Vagrant,Docker和VirtualBox,因此现在非常容易地创建每个具有相同精确配置的环境。如果您以前从未使用过这些工具,则应停止您正在做的任何事情,并立即开始使用它们。
>no Backup
>一切都很好,网站是直播的,按时启动,一切都启动并运行,用户消耗了美丽的数据。 nom,nom,nom…直到您在凌晨3点收到电子邮件。
>
备份,就像日志记录,缓存,安全性和防御性编程一样,在开发Web应用程序时应该是不可或缺的一部分,但是大多数开发人员(或sysadmins)忘记了。
>备份也应自动化,或者如果不可能,则至少应该每周手动备份。任何备份总比没有备份好。
>>将代码库存储在版本控制中,并使用分布式版本控制系统(例如git或mercurial)。此设置使代码库非常多余,因为每个从事该项目的开发人员都有代码库的版本。同样,将代码基库存储在github或bitbucket上,它们具有备份。
>备份数据库更为重要,因为它是用户创建的内容。始终将实际数据和备份存储在不同的位置。
不备份数据可能会破坏业务,这将做到这一点 - 参见Ma.gnolia的著名案例,Ma.gnolia是当天更好的社交书签网站之一。有线在整个灾难上都有一个封面故事。
>
“一切都很棒,没有人快乐。” - 路易斯·C·K·
>您不开心,因为您不知道发生了什么。为您的应用程序实施智能监控框架确实很重要。监视回答以下问题:
结论
备份非常重要,始终练习防御性编程并为最糟糕的情况做好准备,这就是Web开发的运作方式。编程很难,但是做对了,很有趣。
>清单
在下面,您会找到本文中发现的所有监督的清单。看看您现在可以越过多少人,并始终尝试将它们全部弄清楚。改进网站的SEO涉及多个步骤。首先,确保您的网站很容易通过搜索引擎爬网。这涉及使用适当的HTML标签,创建站点地图和使用robots.txt文件。接下来,通过使用相关关键字,创建高质量内容并使用元标签来优化内容。另外,请考虑使用模式标记为搜索引擎提供更多信息。
>>
>我如何避免使用常见的Web开发监督?>版本控制系统在Web开发中的作用是什么?诸如Git之类的版本控制系统使您可以跟踪代码的更改,从而更容易与他人协作,并在必要时恢复到代码的先前版本。这是现代Web开发的必不可少的工具。
> npm或YARN这样的软件包管理器允许您管理和安装软件包。 ,这是可重复使用的代码。它在Web开发中很重要,因为它使管理依赖项变得更容易,并确保您的项目具有所需软件包的正确版本。
>什么是任务跑步者,为什么在Web开发中很重要?
>诸如Gulp或WebPack之类的任务跑步者会自动化重复任务,例如缩小,编译,单位测试和绒毛。这在网络开发中很重要,因为它可以节省您的时间并帮助您维护一致的代码库。以上是Web开发中的18个关键监督的详细内容。更多信息请关注PHP中文网其他相关文章!