PHP系统将这些缺点进行了"分门别类"处理对待, 就行程了不同分级(种别)的缺点。
这些缺点,在系统内部终极都只是一个"系统常量"(预定义常量), 一旦发生某个类型的缺点, 就会产生一个对应的值(常量值)。
比如:发生轻微的"未定义变量"缺点, 则产生一个E_NOTICE值。

发生稍严重的"未找到包含文件"缺点, 则产生一个E_WARNING值。
紧张有如下几种缺点"代号":
系统缺点:
E_ERROR: 严重缺点, 此缺点一旦发生, 程序终止运行。(如:调用未定义函数)E_WARNING: 警告缺点, 次严重。(如:加载include不存在的文件)E_NOTIECE: 提示缺点, 不太严重, 轻微。(如:调用未定义的变量、常量、数组元素(下标)未定义)
用户自定义:
E_USER_ERROR: 用户自定的严重缺点, 此缺点一旦发生, 程序终止运行。E_USER_WARNING: 用户自定的警告缺点E_USER_NOTICE: 用户自定的提示缺点
其他:
E_STRICT: 常日是在高版本PHP中, 利用了低版本php的一些已经由时的语法而产生的缺点E_ALL: 它是一个"所有缺点的"统称。
二 缺点触发
(1) 程序运行过程中发生缺点, 自然就触发了--最一样平常情形。
(2) 我们也可以根据运用中的须要, 自己去"创建"缺点提示信息——用户触发(用户便是指我们程序员)。
我们通过如下函数来创建(触发)一个用户缺点:
trigger_error("出错提示", 用户缺点代号);
用户缺点代号包括: E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE
实例:
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /><title>trigger_error</title></head><body><?php if($_POST){ $age = $_POST['age']; if(!is_numeric($age) || $age < 0 || $age > 127){ trigger_error("你的年事数据有误", E_USER_ERROR); } if($age >= 0 && $age < 18){ echo "你尚未成年!
"; } else if($age >= 18 && $age <= 30){ echo "年轻人!
"; } }?><form action="" method="Post">请输入年事:<input type="text" name="age" /><input type="submit" value="提交" /></form></body></html>
三 将缺点报告写入日志中(配置文件)
指定缺点报告 error_reporting = E_ALL
error_reporting = E_ALL & ~E_NOTICE
关闭缺点输出 display_errors = off (display:显示)
开启缺点日志功能 log_errors = on
1. 默认如果不指定缺点日志位置, 则默认写WEB做事器的日志中
2. 为error_log选项指定 一个文件名(可写)
3. 写入到操作系统日志中error_log = syslog
把稳:符号"&"表示与, 符号"|"表示或, 而"~"表示否定。
函数的利用方法
error_reporting(E_ALL);error_reporting(0); 关闭缺点报告error_reporting(E_ALL&~(E_WARNING|E_NOTICE));error_reporting(E_ERROR|E_PARSE|E_CORE_ERROR));
如要关闭以下警告信息:
Warning: Cannot modify header information - headers already sent by ...'
则利用语句: error_reporting(E_ERROR | E_PARSE);
ini_set("error_reporting", "E_ALL&~(E_WARNING|E_NOTICE)"); //只对当前的网页有效ini_set("display_errors", "off");ini_set("error_log", "syslog");ini_set("MAX_FILEUPLOAD", 200000000);echo ini_get("upload_max_filesize");error_log("this is a error message!!!!");
1 利用指定文件的记录缺点报告日记
php.ini配置文件修正
error_reporting = E_ALLdisplay_errors = offlog_errors = onlog_errors_max_len = 1024error_log = /usr/local/error.log
error_log — 发送缺点信息到某个地方
bool error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] )
0 message 0 - 默认。根据在 php.ini 文件中的 error_log 配置, 缺点被发送到做事器日志系统或文件。
1 message 利用mail()函数发送到第三个参数 destination 设置的邮件地址。
2 则将缺点信息送到TCP做事器中, 此时第三个参数destination表示目的地IP及port
3 message 被发送到位置为 destination 的文件里。 字符 message 不会默认被当做新的一行。
4 message 直接发送到 SAPI 的日志处理程序中。
php.ini文件中 error_log = syslog 写入操作系统的日志里
error_log = /usr/local/error.log 写入日记文件中
<?phpif(!Ora_Logon($username, $password)){ //Ora_logon() -- 打开一个 Oracle 连接error_log("Oracle数据库不可用!", 0); //将缺点写入到操作系统日志或文件中,取决于error_log的设置}if(!($foo=allocate_new_foo()){ //手册上没有allocate_new_foo()没有此函数error_log("涌现大麻烦了!", 1, "webmaster@www.mydomain.com"); //发送到管理员邮箱中}error_log("搞砸了!", 2, "localhost:5000"); //发送到本机对应5000端口的做事器中error_log("搞砸了!", 3, "/usr/local/errors.log"); //发送到指定的文件中?>
2 缺点信息记录到操作系统的日志里
php.ini配置文件修正
error_reporting = E_ALLdisplay_errors = offlog_errors = onlog_errors_max_len = 1024error_log = syslog
向操作系统发送定制日志信息
php.ini配置文件(error_log = syslog)
<?phpdefine_syslog_variable();openlog("php5",LOG_PID,LOG_USER);syslog(LOG_WARNING,"警告报告向syslog中发送的演示,警告韶光:".date("Y/m/d H:i:s"));closelog();?>
define_syslog_variable();
在利用openlog()、syslog()及closelog()三个函数之前必须先调用该函数,它会根据现在的系统环境为下面三个函数初使化一些必需的变量
openlog() 打开一个到系统日志记录程序的连接。
int openlog(string ident, int option, int facility)
ident 参数ident会加到信息中
option 参数option的值包括了LOG_PID、LOG_CONS、LOG_ODELAY、LOG_NDELAY、LOG_NOWAIT、LOG_PERROR,在Win32系统中,只有LOG_PID有效
facility 参数facility的值可能为LOG_KERN、LOG_USER、LOG_MAIL、LOG_DAEMON、LOG_AUTH、LOG_SYSLOG、LOG_LPR、LOG_NEWS、LOG_UUCP、
LOG_CRON或LOG_AUTHPRIV,在Win32系统上,本参数是无效的字段
syslog() 本函数产生一个别系日志信息。
int syslog(int priority, string message)
该函数将message字符串写到系统日志中,参数priority的值为LOG_EMERG、LOG_ALERT、LOG_CRIT、LOG_ERR、LOG_WARNING、LOG_NOTICE、LOG_INFO、
LOG_DEBUG。本函数调用UNIX操作系统的syslog()函数,在Windows NT系统上,系统日志信息记录在事宜检讨器中。
closelog() 该函数在向系统日志中发送完成定制往后调用,关闭由openlog()函数打开的日志连接。
3 PHP写日志
我们在测试代码的时候, 须要理解代码实行情形, 而这中实行时在后台运行的, 前台无法知道是否运行正常, 在这种情形下, 我们一样平常用写日志的形式来调试代码
function logResult($str=""){ $fp = fopen("log.txt", "a"); flock($fp, LOCK_EX); fwrite($fp, "实行日期:".strftime("%Y%m%d%H%M%S", time())."\n".$str."\n"); flock($fp, LOCK_UN); fclose($fp);}
4 如何让PHP脚本文件实行更长的韶光:
ini_set("max_execution_time", 0); //开始/ php脚本文件/ini_set("max_execution_time", 60); //结尾set_time_limit(0) //设置脚本最大实行韶光/ php脚本文件/
5 关闭过期函数的缺点提示的方法
如:mysql_list_tables()该函数已经被删除了, 请不要再利用该函数, 过期的函数并非不能用, 只是会涌现E_DEPRECATED缺点。
如: Deprecated: Function mysql_list_tables() is deprecated in D:\phpStudy\WWW\test.php on line 19
办理方法:
在php.ini中设置error_reporting, 不显示方法过期提示信息
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
规定不同的缺点级别报告, 不显示方法过期提示信息
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
利用自定义函数代替过期函数
列出 MySQL 数据库中的表
<?php/ Better alternative to mysql_list_tables (deprecated)/function mysql_tables($database=''){$tables = array();$list_tables_sql = "SHOW TABLES FROM {$database};";$result = mysql_query($list_tables_sql);if($result)while($table = mysql_fetch_row($result)){$tables[] = $table[0];}return $tables;}# Usage example$tables = mysql_tables($database_local);?>