跳到主要内容

五种更好的PHP工具

当我们处理我们的应用程序时,无论选择何种语言,有时我们都可以过多地关注代码本身。一个非常好的开发生命周期不仅仅是代码,它还带来了一系列支持工具,以确保应用程序的质量和可靠性,既可作为独立实体,也可作为部署时的生物。为此,本文着眼于五种工具,以便为更好的PHP应用程序提供:PHP Code Sniffer,PHP Documentor,Supervisord,Phing和Uptime Robot,以便密切关注您令人愉快且新部署的站点。

01. PHP Code Sniffer

这些工具中的第一个确实从代码开始,因为PHP Code Sniffer是用于检查代码是否符合给定编码标准的工具。它附带了自己的内置规则,或者您可以轻松制作自己的规则。使用PHP Code Sniffer意味着您可以检查您的项目是否一致且可读。 PHP是与空白无关的,因此括号,新行和缩进的放置不会影响代码的解析和运行方式 - 那么为什么要使用这样的工具呢?

执行编码标准意味着确保最低标准的合规性和可读性。这意味着您的整个项目遵循某些准则,使其易于阅读和维护。考虑到普通Web应用程序在维护模式下花费的时间,这是一个非常重要的功能。

PHP代码嗅探器可通过它的项目页面是这里。假设您安装了PEAR(如果您不使用PEAR然后检查它,那里有一些优秀的工具!),您可以使用以下命令安装它:

Pear安装PHP_CodeSniffer

安装后,您可以立即尝试根据已安装的标准检查项目的编码标准。要查看已安装的内容,请使用Phpcs -i从命令行。我个人最喜欢的是Squiz标准,它不像PEAR那么严厉,但仍然相当全面。很可能(除非你的项目已经采用了编码标准)会有很多警告,所以我发现生成摘要报告很有用。从包含项目代码的目录运行以下命令:

phpcs --report = summary --standard = Squiz。

你会看到看起来像这样的输出:

这需要一些时间来完成并修复各种警告,但这非常值得付出努力,提供干净可读的代码并关注我们作为开发人员创建的内容的质量。如果默认捆绑的嗅探不适合您的需求,您可以创建自己的嗅探!有一些很棒的文档可以这样做,这是一个非常平易近人的任务,特别是如果你很乐意从现有的嗅探中“挑选和混合”。

PHP Code Sniffer在自动构建过程中非常强大,因此在编码标准合规性状态方面存在持续的反馈循环。当我们看Phing的时候,我们稍后会再看一遍。

02. PHP Documentor

从代码进行测量和生成工件而不实际运行它称为静态分析。 PHP Code Sniffer是静态分析工具的一个例子PHP Documentor是另一个。 PHP Documentor读取代码的结构,文件系统结构,类,函数以及介于两者之间的所有内容,并从中生成文档。当您以特定表示法添加其他注释以添加有关代码的各种元素的更多详细信息时,它会变得更好。

PHP Documentor的安装是通过PEAR进行的,因此,它再一次非常简单。但是,PHP Documentor运行自己的PEAR通道,因此安装此工具需要两个命令:

pear channel-discover pear.phpdoc.org
Pear安装phpdoc / PhpDocumentor-alpha

一旦安装,你将有一个PHPDoc的程序在您的命令行上可用。告诉PHPDoc的要记录的文件夹-t以及写输出文件的位置-d。您还可以自定义输出的格式及其使用的模板,以便您可以根据需要为自己的组织创建模板。

例如,从TimeZone类中查看此片段(取自Joind.in事件反馈站点,这是开源的,所以所有的代码都是在GitHub上):


/ **
*类库,用于处理事件/会话的数据/时间问题
*
* PHP版本5
*
* @category Joind.in
* @package控制器
* @copyright 2009 - 2013 Joind.in
* @license http://github.com/joindin/joind.in/blob/master/doc/LICENSE JoindIn
* @link http://github.com/joindin/joind.in
* /
课时区
{

/ **
*获取事件有时区偏移的事件的当前时间
* $ Evt_offset小时
*
* @param integer $ evt_offset偏移时间
*
* @return整数
* /
public static function getEventTime($ evt_offset)
{
$ here = new DateTimeZone(date_default_timezone_get());
$ hoffset = $ here-> getOffset(new DateTime(“now”,$ here));
$ off =(time() - $ hoffset)+($ evt_offset * 3600);
退货$ Off;
}

/ **
*返回getDatetimeFromUnixtime的格式化版本。
*
* @param整数$ Unixtime Unix格式化时间
* @param String $ Timezone设置时间戳的时区
* @param String $ Format要返回的格式
*
* @return字符串
* /
public static function formattedEventDatetimeFromUnixtime(
$ Unixtime,
$时区,
$格式
){
$ datetime = static :: getDatetimeFromUnixtime($ unixtime,$ timezone);
$ retval = $ datetime-> format($ format);

返回$ Retval;
}
}

当PHP Documentor应用于此代码片段时(实际类中的内容比上面显示的更多),结果如下所示:

即使在没有注释的项目上运行PHP Documentor,仍会给出项目结构的印象,并允许用户查看其中的内容。随后添加的任何注释都将显示在输出中。这个工具与已经提到的PHP Code Sniffer非常吻合,因为许多PHP Code Sniffer标准都要求PHP Documentor注释存在。同样,此工具在定期自动运行时效果最佳 - 通常让API文档在一夜之间重新生成,或者在每次更改合并之后重新生成,以便它们保持最新并且可用作参考。

03. Supervisord

Supervisord(发音为“supervisor dee”)是你编写特定应用程序之前不需要的工具之一 - 然后你无法想象没有它你是如何生活的。 Web应用程序以一组简单的代码开始其生命,这些代码用于响应传入的请求。随着它们变得越来越复杂,还需要定期或响应特定事件来执行其他任务。那么Supervisord如何帮助?
Supervisord负责长期运行的流程。如果出现问题,Supervisord将尝试重启该过程;如果这个过程很快就会消亡,那么Supervisord就会放弃。在我自己的系统上,通常可以在Supervisord下运行一些单独的东西:

  • IRC机器人
  • 从队列中提取作业的工作人员脚本
  • PHP / Node.js应用程序提供来自命令行的请求

Supervisord非常容易在大多数平台上安装(例如,通过我的Linux系统上的软件包管理器),并附带一个名为SupervisorCTL的控制面板。当我运行它时,我看到类似的东西:

从中可以看出,有一堆进程正在运行(一些已停止)以及它们运行了多长时间(我昨天重新启动了我的服务器!)。这个控制面板为我提供了一种方法来检查事物,查看所有各种任务的记录输出,以及停止,启动或重新启动工作人员。长时间运行的流程可能难以监控,而且这个工具非常容易。一旦您的申请超出了服务网页阶段,Supervisord就是您的朋友。

04. Phing

Phing是一个与之相同的构建系统蚂蚁。这是一种非常简单,独立于平台的运行命令的方式,可以在项目中运行各种作业。许多项目使用它进行部署,但它也可以为您执行任何其他任务,例如运行测试套件和使用静态分析工具,如本文中已经提到的PHP Documentor和PHP Code Sniffer。

Phing可以通过PEAR获得,并且有自己的PEAR通道,因此您可以使用以下命令以与我们见过的其他基于PHP的工具相同的方式安装它:

梨通道 - 发现pear.phing.info
梨安装phing / Phing

一旦它存在,您再次在命令行中有一个新命令。 Phing读取用XML编写的构建文件(非常接近Ant语法,但不太兼容),它可以指定许多“目标”,或Phing知道如何运行的命令。这是一个小例子:





















这是来自Joind.in项目的一个片段Build.xml文件文件,这是Phing的配置方式。如果我们依次考虑每个块,我们首先会有一个项目标记,其中包含一个默认目标名称并设置BASEDIR属性,以便它可以在后面的元素中使用。在项目标记内,有一系列任务标记。这些是Phing能够运行的任务,并包含执行此操作所需的所有信息。最终目标是“构建”。这是此项目的默认目标,因此如果Phing命令在没有参数的情况下运行,则将运行该目标。这个目标取决于另外两个,这意味着它们也将运行。

Phing提供清晰的命令行输出,并生成诸如API文档之类的工件,以存储在给定位置,以便我们以后可以链接到它。从命令行运行上面的输出给出如下输出:

输出看起来不多,但如果我们检查它写入构建目录的内容,那么API文档就会完整存在,还有来自其他构建目标的工件:

Phing真正自己进行部署。可以将一系列任务添加到每个目标中,然后依次执行这些任务。 Phing支持各种任务(查看它的文件)包括处理版本控制的导出,压缩和传输文件,以及通过SSH运行命令。

为项目的自动部署创建Phing目标是使潜在风险和复杂过程非常可靠的好方法。 Phing不是遵循维基上的说明,而是执行使您的网站生效所需的所有步骤。不要忘记,这还可以包括通过Supervisord重新启动应用程序中的工作程序脚本!

05.监测现场健康状况

一旦你的网站上线,很容易认为工作已经完成,但是关注事情也很有帮助。监控并不意味着等待您的客户打电话给您并告诉您他们的网站何时停止工作。相反,我们使用工具检查一切都很好的间隔,并告诉我们是否不是。

这个领域有很多选择,但是我们会考虑两种监控:警报监控让你知道一个站点停机,趋势监控我们可以设置给定的测量值的阈值。警报监控是对网站的一项非常基本的检查。如果网站在那里,一切都很好。如果网站没有响应,那么它会提醒您存在问题。

最简单的监视设置确定对给定URL的Web请求有成功的HTTP响应。如果没有响应,或收到错误响应,则该站点被视为“关闭”。您通常可以配置提供此类监控的服务,以便通过电话或电子邮件与您联系。这种服务的一个提供者是正常运行机器人,可以轻松监控网站,也可以显示网站何时停机。

使用此服务,我们还可以设置内容监控。这会检查响应中是否存在应该存在的元素。这有助于在有内容被返回时获取,而不是预期的内容(例如,当您看到来自Apache的“它工作!”页面时)。这可以像某些文本一样简单,它应该出现在被监视的页面上。

有时您也会看到ping监控,但机器很可能会响应ping,但无法成功提供HTTP响应。我更喜欢HTTP监控。
趋势监控会查看更复杂的指标,并且通常包括在服务器上运行的工具。这可以考虑Web服务器进程的数量,内存使用情况或页面的响应时间,并跟踪这些进程随时间的变化情况。监控工具将允许您设置阈值,如果特定数据趋势过高或过低,在给定的时间段内,您将以某种方式通知您。有时,这会分散操作人员,有时角落里的仪表板屏幕会改变颜色;正确的答案完全取决于您的申请。

06.更好的工具

改进我们的工具和流程需要花费时间,有时还要花钱。然而,良好的工具使开发过程的每个部分都能够顺利和可重复地运行,并为我们投入使其变得更好而投入大量回报。本文旨在包括您可能尚未使用的选择,但这些选择对于无痛的开发过程来说是一种资产。

罗娜是一名独立的网络开发顾问,培训师和作家,总部设在英国利兹。她是一名PHP专家,与团队合作,充分利用他们的应用程序,工具和人员。 Lorna是Joind.in开源项目的常规会议发言人和首席开发人员。



翻译字数超限