display_errors = Off error_reporting = E_ALL
display_errors = On
error_reporting = E_ALL & ~E_NOTICE
php_flag display_errors on php_value error_reporting 2039
<?php print("The next line generates an error.<br>"); printaline("PLEASE?"); print("This will not be displayed due to the above error."); ?>
<?php $j = ""; print("Lets retrieve all the variables submitted to this "); print("script via a GET request:<br>"); foreach($_GET as $key => $i){ print("$key=$j<br>"); } if($_GET['Submit'] == "Send GET Request") $j = "done!<br>"; ?> <form method="GET"> Name: <input name="name"><br> Email: <input name="email" size="25"><br> <input name="Submit" type="submit" value="Send GET Request"> </form>
... foreach($_GET as $key => $i){ print("Correct data? " . $_GET[$key] . "<br>"); print("$key=$j<br>"); } ...
放进去的 print 语句是粗体。注意,现在已经知道在 Web 浏览器上显示的 $key 值是正确的,但是由于某些原因,值没有正确地显示。请看新的输出,如图 3 所示。
图 3. 修改后的 test2.php 的输出
现在已经知道应用程序正确地从 GET 请求接收到了变量,那么肯定是在代码中有 bug。查看之后注意到,用来显示值的变量 $j 是错误的。在 foreach 语句中指定的是 $i,所以它肯定会有正确的值,但是无意之中输入了 $j。所以通过把 $j 替换成 $i,迅速地修正了错误,重新载入页面之后,就看到了正确的输出,如图 4 所示。
图 4. 修正后的 test2.php 的输出
现在可以删除或注释掉刚才添加的 print 语句了,因为已经发现了代码中的 bug。注意,这只是在调试应用程序时可能遇到的许多错误中的一个很小的子集。对于使用数据库时可能遇到的问题,一个好的解决方案是输出 SQL 语句,以确保执行的 SQL 就是想要执行的。
现在要来看看如何使用 Eclipse IDE 和 PHPEclipse 插件及调试器扩展进一步在调试历程中提供帮助。
新闻热点
疑难解答