首页 » SEO优化 » phpdefineor技巧_PHP 缺点调试语法和函数

phpdefineor技巧_PHP 缺点调试语法和函数

访客 2024-10-28 0

扫一扫用手机浏览

文章目录 [+]

PHP系统将这些缺点进行了"分门别类"处理对待, 就行程了不同分级(种别)的缺点。

这些缺点,在系统内部终极都只是一个"系统常量"(预定义常量), 一旦发生某个类型的缺点, 就会产生一个对应的值(常量值)。

phpdefineor技巧_PHP 缺点调试语法和函数

比如:发生轻微的"未定义变量"缺点, 则产生一个E_NOTICE值。

phpdefineor技巧_PHP 缺点调试语法和函数
(图片来自网络侵删)

发生稍严重的"未找到包含文件"缺点, 则产生一个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);?>

标签:

相关文章