PHP核心功能研究之error_log

來源:互聯網
上載者:User
聲明:本文為斯人原創,全部為作者一一分析得之,有不對的地方望賜教。
歡迎轉載,轉載請註明出處 。
本文地址:http://imsiren.com/archives/617

PHP有一個很強大的Tlog函數:error_log,

我們可以用它來記錄我們程式中出現的錯誤,比如SQL錯誤等。

通過 PHP手冊,我們可以知道,該函數可以向伺服器、檔案或遠程目標發送一個錯誤記錄檔。

它接受四個參數:

error必需。要記錄的錯誤訊息。

type可選。規定錯誤記錄的類型。

可能的記錄類型:

0 – 預設。根據在 php.ini 檔案中的 error_log 配置,錯誤被發送到伺服器日誌系統或檔案。

1 – 錯誤被發送到 destination 參數中的地址。只有該類型使用 headers 參數。

2 – 通過 PHP debugging 串連來發送錯誤。該選項只在 PHP 3 中可用。

3 – 錯誤發送到檔案目標字串。
destination可選。規定向何處發送錯誤訊息。該參數的值依賴於 “type” 參數的值。
headers可選。只在 “type” 為 1 時使用。
規定附加的頭部,比如 From, Cc 以及 Bcc。由 CRLF (\r\n) 分隔。
注釋:在寄送電子郵件時,必須包含 From 頭部。可以在 php.ini 檔案中或者通過此參數設定。

error_log函數支援四種方式記錄錯誤記錄檔
1.到預設的檔案
type為0.
根據在 php.ini 檔案中的 error_log 配置,錯誤被發送到伺服器日誌系統或檔案。
2.郵件

type 為1.

error_log("this is a test string",1,"imsiren@163.com","From:imsiren@163.com");

很簡單,它可以向某個郵箱發送郵件,第三個參數是收件者,第四個是發送人的郵箱
3
通過 PHP debugging 串連來發送錯誤。該選項只在 PHP 3 中可用。
我從來沒用過
4.發送到檔案
type=3

error_log("this is a test string",3,"/home/admin/log/error_log");

這種 方式,是我們經常用到的,將我們指定的錯誤內容寫入到某一個檔案。
==============================================================================
下面看看PHP是如何?的error_log
在ext/tandard/basic_functions.c檔案中:

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;}

這個沒什麼說的,檢測傳入過來的參數,然後調用_php_error_log_ex函數。
看看它的定義

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.