7.1.2 运行错误
运行错误相对于语法错误而言,更加复杂一些。通常运行错误是在语法没有错误的情况
发生的。常见的运行错误有以下几种类型:
(1)被访问的数据库或者数据库表不存在;
(2)包含的文件或者文件路径不存在;
(3)PHP 服务器进程没有访问某个文件的权限;
(4)检查输入数据失败;
(5)连接到网络服务;
(6)调用不存在的函数。
下面通过实例来分析以上的各种运行错误。
1.包含的文件不存在
首先看代码 7-7 所示。
【代码 7-7】 debug_7.php
<?php
require ("debug_100.php");
?>
从表面上看,代码7-7 没有任何错误,但是执行后会发现提示错误。执行结果如图7-7
所示。
图 7-7 包含文件不存在
在前面章节已经学习了 include()和require()函数,这两个函数可以包含其他的PHP 文件。
在php.ini 文件中,有一个include_path 选项,如果代码试图包含一个不在include_path 路径
中的文件或者该文件不存在,则会提示。
以上代码中由于 debug_100.php 文件不存在,所以提示错误,如果将其改成debug_1.php,
则不会产生错误。
2.计算式错误
首先查看代码 7-8。
【代码 7-8】 debug_8.php
<?php
$a=1;
$b=0;
206 PHP 网络编程技术与实例
$c=$a/$b;
?>
代码7-8 很容易理解,被除数是不能为0 的,所以运行该代码会出现错误,如图7-8 所示。
图 7-8 计算式不合法
虽然实际编程中不会这么写,但是很多时候“$b”可能是由用户手工输入的,如果不做
处理,则可能导致运行错误。
3.文件操作与权限
编程人员在使用 fopen 函数进行文件操作的时候,如果没有考虑到被操作文件的权限,
可能会导致运行错误。代码7-9 试图向一个只读文件写数据。
【代码 7-9】 debug_9.php
<?php
$fp=fopen("temp.txt","w");
fwrite($fp,"hello world");
fclose($fp);
?>
由于temp.txt 文件被设置成只读文件,因此如果强行向此文件写入数据,则会提示错误,
如图7-9 所示。
图 7-9 文件操作失败
解决这种问题的方法是首先获得该文件的属性判断,是否为可写,如果坚持要写,可以
修改其权限。
另外由于 fopen 函数有返回值,因此根据其返回值来操作也是明智之举,如果返回值为
FALSE,则应该停止向文件写入数据。
4.调用不存在的函数
很多时候,由于编程人员疏忽,会调用不存在的函数。有些时候,内置函数也会出现命
名不一致的情况。不但在当前脚本里容易调用自己编写的不存在的函数,而且其他地方也容
易这样调用。如果传递给函数的参数个数不正确,也会发生错误。
【代码 7-10】 debug_10.php
<?php
strstr();
第7 章 错误调试与异常处理 207
?>
由于没有给strstr 函数传递参数,所以会提出警告,如图7-10 所示。
图 7-10 函数调用错误
5.连接数据库错误
数据库编程是PHP 中最重要的内容,关于数据库的错误处理信息,请参考数据库编程章节。
6.连接到网络服务器
网络编程也是 PHP 中重要的内容。关于网络编程中的常见运行错误,将会在网络编程章
节中介绍。