|
您现在的位置是:
IT外包 ->技术支持 ->基础知识 ->
|
|
|
|
用 syslog 改进和调试 PHP 应用程序
|
作者:
不详
| 发布时间:
2008-06-11 19:55
| 信息类别:
基础知识
| 访问人次:
次 |
|
|
|
|
|
探索正在运行中的程序的一种老技术是在策略点上放置代码,显示变量当前值。但是如何完成此操作而不干扰程序的标准输出呢?使用 PHP 的 syslog() 工具,可以非常容易检验这些值。阅读本文了解如何操作。
用计算机编程是一件单调乏味的事情,但是它也很有趣。编程有趣的一面在于了解使用旧工具的新方法。最近,我签了一份合同帮助解决基于 Linux®、Apache、MySQL 和 Linux、Apache、MySQL、PHP/Perl (LAMP) 的大型复杂内容管理系统 (CMS) 中的若干个错误。该 CMS 的架构是标准的 LAMP 模型,使用运行 Apache V2.0 的 Enterprise Red Hat Linux。驱动 Web 站点的代码由分布在 Apache 文档根目录的 30 个子目录中的几百个 PHP 源模块组成。系统的 Apache 和 MySQL 部分不需要更改,因为我的所有纠错操作都是在 PHP 工作区中进行的。
在研究了该 CMS 的工作原理一段时间之后,我渐渐开始欣赏该系统优雅的设计并且意识到在大多数成熟的编程环境中,此系统只依赖于少量的可用 PHP 函数(在这里想起了旧的 80/20 法则,其中 80% 的工作是用 20% 的可用函数来完成的)。本文将展示如何调试未知的复杂系统,以帮助您了解那些很少使用的函数,并提供如何使用 syslog() 函数的丰富功能来应用新知识的示例。
调试程序
虽然表面上 PHP 编程语言有成百上千个函数可用,但是在读到与本文类似的文章之前,您可能从未使用过某些函数(或许大多数函数)。另一种深入学习语言的方法是调试别人已经用该语言编写的程序。我总是对程序员用具有创造性的方法使用工具印象深刻。
调试像计算机编程一样,一半是科学,一半是艺术。在不是由您创建的系统中跟踪并不明显的错误时,需要能够很快地定位这些错误在代码中的位置。由于要处理的代码模块有成百上千个,因此最佳起点是显示找到错误的输出位置,然后从该位置开始逆向查找来隔离问题。
例如,如果知道输出的计算值不正确,则必须设计一种方法来查看导致出现问题的中间值。通过重要的数据库查询得到的错误数据可以证明存在其他问题。您必须能够查看生成(并由代码提交给 MySQL 引擎)的 SQL 语句以查看问题是不是出在语句里。
完成此操作的一项古老技术是插入可以打印这些字符串和值的代码。不幸的是,使用诸如 PHP 之类的工具或任何基于 Web 的应用程序,您不希望在这样的系统固有输出(即,被发送给浏览器的 HTML 代码)中掺入调试信息,尤其是在要检验的系统是一台生产服务器时。
您可以创建自定义日志记录文件并向其中写入日志消息,但是为什么不使用已经提供给您的工具呢?请始终记住:不要把工具尘封起来。您值得花一些时间查看语言创建者是否已经提供了一种库例程或函数,可以执行您通常需要的功能。实际上,只要您觉得某些内容很明显应当是编程包的一部分,那么它很可能就包含在其中。
我意识到需要使用类似于 UNIX® 的 syslog 的工具。我想 PHP 很有可能有 syslog 功能,因此在快速查看了 PHP 文档后,我找到了它!PHP syslog() 函数是我多年来没注意到的函数,直到我签约来做这个项目。使用 syslog(),我可以搜索直至找到并消除生产系统中的大多数错误,除了需要几分钟时间执行各个函数之外,不会引入其他副作用。
随着知识的积累并且在专业领域中越来越有经验,显然可以采用不同的方法来做事情,并且某种方法将最终成为执行必要任务的首选方法。必须始终牢记的是您认为很明显的事情对其他人来说并不一定是明显的。对您来说很简单的事情对于其他人来说可能非常复杂。
|