|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
一下弹出N多页面!很明显,你的留言本并没有做好安全防范,被人用JS代码小小的耍了一下,我很同情你这个时候的感受,但是没有别的办法了,继续努力吧! 固然您可使用 PHP 为体系办理和传统数据处置之类的义务创立号令行剧本,然而编程言语对 Web 使用法式的功能有次要影响。在利用过程当中,每一个 PHP 使用法式都驻留在办事器上,而且将经由过程代办署理(例如 Apache)挪用 PHP 使用法式处置到来的恳求。关于每一个恳求,典范的 PHP Web 使用法式在冗长运转后将失掉一个 Web 页面或 XML 数据布局。
假定经由复杂的运转后,一个分层机关的 Web 使用法式 —— 包含客户机、收集、HTTP 办事器、使用法式代码和底层数据库 —— 将会很难隔离 PHP 代码中的毛病。即便假定除 PHP 代码之外一切层都可以正常运转,跟踪 PHP 代码中的毛病也会十分难,特别是在使用法式使用较多的类时更是如斯。
PHP 语句 echo 和函数 var_dump()、debug_zval_dump() 和 print_r() 都是罕见且盛行的调试帮助东西,可以匡助处理多种成绩。然而,这些语句 —— 乃至更强健的东西,例如 PEAR Log package —— 都是取证东西,必需在高低文情况以外先辈行推想剖析才干生成证据。
在某种水平上,经由过程推论停止调试是一种蛮干的做法。搜集并挑选数据,测验考试推论动身生的成绩。假如短少主要信息,则必需从头测试代码、反复履行步调,然后从头入手下手研讨。一种加倍高效的办法是在 法式运转时探测使用法式。您可以对恳求参数分类,挑选进程挪用仓库,并查询任何所需的变量或对象。您可以临时中止使用法式而且可以在变量更改值时收到警报。在某些情形下,您可以经由过程交互式扣问 “假如……会如何?” 成绩来实践影响变量。
称为调试器 的特别使用法式撑持这类 “及时的” 或交互式的反省。调试器能够启动并毗连到历程上以便掌握历程并监测其内存。或,在利用注释言语的情形下,调试器可以直接注释代码。典范的古代图形化调试器可以索引并阅读代码,以合适人类浏览习气的模式轻松地显示庞杂的数据布局,并同时显示法式形态,如挪用仓库、两头输入和一切变量的值。例如,调试器凡是城市把类的属性和办法分类并停止描写。
在本文和下一篇文章中,我将引见的东西必定可以简化 PHP 调试。下一次,我将次要引见交互式调试和 Zend Debugger —— 一个出格针对 PHP 的强健调试器 —— 并探求它供应的很多功效。(Zend Debugger 是一款贸易产物,是 Zend PHP 集成开辟情况(IDE)的一局部)。我还将引见一款开源 PHP 调试器,以避免您只愿把钱花在啤酒上,而不是花在代码上。然而,本文将次要引见若何更好地取证。
相似《犯法现场查询拜访》,只是更使人厌恶
代码失足、未能生成某个所需了局或完全溃散时,您需求回覆四个 w 成绩:where、what、why 和 when:
“where” 是使用法式最初一次正常运转时地点的文件和行号。
“what” 是出错的代码 —— 好比说,嫌疑犯。
“why” 是毛病的实质。能够它是一个逻辑毛病和/或与操作体系停止交互所招致的毛病,或二者兼具。
而 “when” 是呈现毛病时的高低文。在法式终止前产生了甚么情形?像在一切犯法行动中一样,假如您可以搜集到足够的线索,那末线索就能够匡助您找到囚徒。
一种取证东西 Xdebug(上一篇文章中利用的东西,用于剖析 PHP 使用法式功能),如称号所示,将供应几个申明法式形态的功效,而且是应该添加到指令体系中的价值颇高的研讨东西(请参阅 参考材料)。装置后,Xdebug 将禁止无穷次递归(外表上是如许)、修改关于仓库跟踪和函数跟踪的毛病动静和监督内存分派,并供应其他功效。Xdebug 还包含一组函数,您可以将这组函数添加到代码中以停止运转时毛病诊断。
例如,上面的代码将利用一些 xdebug_...() 步调测试 callee() 函数,以便输入挪用法式的详细地位,包含文件名、行号和挪用函数的称号。
清单 1. 测试 callee() 函数的步调
function callee( $a ) {
echo sprintf("callee() called @ %s: %s from %s",
xdebug_call_file(),
xdebug_call_line(),
xdebug_call_function()
);
}
$result = callee( "arg" );
?>
这段代码将生成:
callee() called @ /var/www/catalog/xd.php: 10 from {main}
回页首构建和装置 Xdebug
Xdebug 可以很轻松地从 UNIX |
|