声明:本文为斯人原创,全部为作者一一分析得之,有不对的地方望赐教。 http://imsiren.com/archives/617 PHP有一个很强大的日志处理函数:error_log, 我们可以用它来记录我们程序中出现的错误,比如SQL错误等。 通过 PHP手册,我们可以知道,该函数可以向服务
声明:本文为斯人原创,全部为作者一一分析得之,有不对的地方望赐教。
它接受四个参数:
error 必需。要记录的错误消息。
type 可选。规定错误记录的类型。
可能的记录类型:
0 – 默认。根据在 php.ini 文件中的 error_log 配置,错误被发送到服务器日志系统或文件。
1 – 错误被发送到 destination 参数中的地址。只有该类型使用 headers 参数。
2 – 通过 PHP debugging 连接来发送错误。该选项只在 PHP 3 中可用。
3 – 错误发送到文件目标字符串。type 为1.
error_log("this is a test string",1,"imsiren@163.com","From:imsiren@163.com");
error_log("this is a test string",3,"/home/admin/log/error_log");
PHP_FUNCTION(error_log) { char *message, *opt = NULL, *headers = NULL; int message_len, opt_len = 0, headers_len = 0; int opt_err = 0, argc = ZEND_NUM_ARGS(); long erropt = 0; if (zend_parse_parameters(argc TSRMLS_CC, "s|lss", &message, &message_len, &erropt, &opt, &opt_len, &headers, &headers_len) == FAILURE) { return; } if (argc > 1) { opt_err = erropt; } if (opt_err == 3 && opt) { if (strlen(opt) != opt_len) { RETURN_FALSE; } } if (_php_error_log_ex(opt_err, message, message_len, opt, headers TSRMLS_CC) == FAILURE) { RETURN_FALSE; } RETURN_TRUE; }
PHPAPI int _php_error_log_ex(int opt_err, char *message, int message_len, char *opt, char *headers TSRMLS_DC) /* {{{ */ { php_stream *stream = NULL; switch (opt_err) { case 1: /*send an email */ if (!php_mail(opt, "PHP error_log message", message, headers, NULL TSRMLS_CC)) { return FAILURE; } break; case 2: /*send to an address */ php_error_docref(NULL TSRMLS_CC, E_WARNING, "TCP/IP option not available!"); return FAILURE; break; case 3: /*save to a file */ stream = php_stream_open_wrapper(opt, "a", IGNORE_URL_WIN | ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL); if (!stream) { return FAILURE; } php_stream_write(stream, message, message_len); php_stream_close(stream); break; case 4: /* send to SAPI */ if (sapi_module.log_message) { sapi_module.log_message(message); } else { return FAILURE; } break; default: php_log_err(message TSRMLS_CC); break; } return SUCCESS; }
case 1:php_mail函数会根据我们php.ini里面sendmail_path的配置来发送邮件;
case 2:这个就不说了,我从来没用过
case 3:通过IO函数写入到文件中。
case 4:这个可以通过sapi接口记录我们的日志内容
default: 根据 error_log的配置,将日志写到该文件中。。
http://imsiren.com/archives/617