您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關PHP怎樣將log信息寫入服務器中的log文件,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
php中如何寫類和如何使用類
期間,需要整理出一份,可配置的,通用的,log系統。
支持寫入log信息到log文件中。
【折騰過程】
1.搜:
php log to file
參考:
PHP: error_log – Manual
PHP: syslog – Manual
How to create logs with PHP – Web Services Wiki
Write to a log file with PHP | Redips spideR Net
下載代碼:
Download redips10.tar.gz
2.期間:
【已解決】PHP中函數前面加上at符號@的作用
3.然后用代碼:
crifanLib.php <?php /* [Filename] crifanLib.php [Function] crifan's php lib, implement common functions [Author] Crifan Li [Contact] http://www.crifan.com/contact_me/ [Note] 1.online see code: http://code.google.com/p/crifanlib/source/browse/trunk/php/crifanLib.php [TODO] [History] [v1.0] 1.initial version, need clean up later */ class crifanLib { private $logFile; private $logFp; /* Init log file */ function logInit($inputLogFile = null){ // set default log file name // in case of Windows set default log file //http://stackoverflow.com/questions/1482260/how-to-get-the-os-on-which-php-is-running //http://php.net/manual/zh/function.php-uname.php if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { $defautLogFile = 'C:/php/defLogFile.log'; } // set default log file for Linux and other systems else { $defautLogFile = '/tmp/defLogFile.log'; } $this->logFile = $inputLogFile ? $inputLogFile : $defautLogFile; // open log file for writing only and place file pointer at the end of the file // (if the file does not exist, try to create it) $this->logFp = fopen($this->logFile, 'a') or exit("Can't open $this->logFile!"); } /* Write log info to file */ function logWrite($logContent){ // if file pointer doesn't exist, then open log file if (!is_resource($this->logFp)) { $this->logInit(); } // define script name $script_name = pathinfo($_SERVER['PHP_SELF'], PATHINFO_FILENAME); // define current time and suppress E_WARNING if using the system TZ settings // (don't forget to set the INI setting date.timezone) $time = @date('[Y-m-d H:i:s] '); // write current time, script name and message to the log file fwrite($this->logFp, "$time ($script_name) $logContent" . PHP_EOL); } /* Deinit log */ function logDeinit(){ if (is_resource($this->logFp)) { fclose($this->logFp); } } } ?>
然后測試代碼:
<?php /* Author: Crifan Li Version: 2015-07-27 Contact: http://www.crifan.com/about/me/ Function: Wechat get access token */ include_once "crifanLib.php"; //test log $crifanLib = new crifanLib(); $crifanLib->logInit("/xxx/access_token/crifanLibTest.log"); $crifanLib->logWrite("This is crifanLib log test message."); $crifanLib->logDeinit(); ?>
然后去執行對應的代碼:
http://xxx/access_token/wx_access_token.php
頁面是沒有任何輸出的:
然后的確生成了log文件了:
root@chantyou:php# cd access_token/ root@chantyou:access_token# ll total 16 -rwxrwxrwx 1 root root 9335 Jul 27 17:51 crifanLib.php -rwxrwxrwx 1 root root 567 Jul 27 17:52 wx_access_token.php root@chantyou:access_token# ll total 20 -rwxrwxrwx 1 root root 9335 Jul 27 17:51 crifanLib.php -rw-r--r-- 1 apache apache 77 Jul 27 17:56 crifanLibTest.log -rwxrwxrwx 1 root root 567 Jul 27 17:52 wx_access_token.php root@chantyou:access_token# cat crifanLibTest.log [2015-07-27 10:10:33] (wx_access_token) This is crifanLib log test message. root@chantyou:access_token#
【注意】
要記得給對應的(此處是Linux服務器中的對應的文件夾添加寫權限:
root@chantyou:php# ll total 48 drwxr-xr-x 2 root root 4096 Jul 27 17:55 access_token -rwxr-xr-x 1 root root 1091 Sep 25 2014 errorCode.php -rw-r--r-- 1 root root 2230 Jun 10 14:16 MicromsgVerify.php -rwxr-xr-x 1 root root 4288 Sep 25 2014 pkcs7Encoder.php -rwxr-xr-x 1 root root 452 Sep 15 2014 Readme.txt -rwxr-xr-x 1 root root 724 Sep 22 2014 sha1.php drwxr-xr-x 2 root root 4096 Jul 20 12:34 wechat_encypt -rwxr-xr-x 1 root root 5327 Sep 15 2014 WXBizMsgCrypt.php -rwxrwxrwx 1 root root 2455 Jul 16 18:06 wx_didaosuzhou.php -rwxr-xr-x 1 root root 1346 Sep 22 2014 xmlparse.php root@chantyou:php# chmod ugo+wx access_token/ root@chantyou:php# ll total 48 drwxrwxrwx 2 root root 4096 Jul 27 17:55 access_token -rwxr-xr-x 1 root root 1091 Sep 25 2014 errorCode.php -rw-r--r-- 1 root root 2230 Jun 10 14:16 MicromsgVerify.php -rwxr-xr-x 1 root root 4288 Sep 25 2014 pkcs7Encoder.php -rwxr-xr-x 1 root root 452 Sep 15 2014 Readme.txt -rwxr-xr-x 1 root root 724 Sep 22 2014 sha1.php drwxr-xr-x 2 root root 4096 Jul 20 12:34 wechat_encypt -rwxr-xr-x 1 root root 5327 Sep 15 2014 WXBizMsgCrypt.php -rwxrwxrwx 1 root root 2455 Jul 16 18:06 wx_didaosuzhou.php -rwxr-xr-x 1 root root 1346 Sep 22 2014 xmlparse.php
否則會報錯的:
Can't open /xxx/access_token/crifanLibTest.log file!
4.不過突然想起來:
之前已經學過了,
file_put_contents
就可以替代了:fopen,fwrite,fclose了。
所以再去優化為:
crifanLib.php
<?php /* [Filename] crifanLib.php [Function] crifan's php lib, implement common functions [Author] Crifan Li [Contact] http://www.crifan.com/contact_me/ [Note] 1.online see code: http://code.google.com/p/crifanlib/source/browse/trunk/php/crifanLib.php [TODO] [History] [v2015-07-27] 1.add logInit, logWrite [v1.0] 1.initial version, need clean up later */ class crifanLib { private $logFile; private $logFp; /* Init log file */ function logInit($inputLogFile = null){ // set default log file name // in case of Windows set default log file //http://stackoverflow.com/questions/1482260/how-to-get-the-os-on-which-php-is-running //http://php.net/manual/zh/function.php-uname.php if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { $defautLogFile = 'C:/php/defLogFile.log'; } // set default log file for Linux and other systems else { $defautLogFile = '/tmp/defLogFile.log'; } $this->logFile = $inputLogFile ? $inputLogFile : $defautLogFile; } /* Write log info to file */ function logWrite($logContent){ // define script name $scriptName = pathinfo($_SERVER['PHP_SELF'], PATHINFO_FILENAME); // define current time and suppress E_WARNING if using the system TZ settings // (don't forget to set the INI setting date.timezone) $timeStr = @date('[Y-m-d H:i:s]'); // write current time, script name and message to the log file file_put_contents($this->logFile, "$timeStr ($scriptName) $logContent" . PHP_EOL, FILE_APPEND); } } ?>
測試文件為:
<?php /* Author: Crifan Li Version: 2015-07-27 Contact: http://www.crifan.com/about/me/ Function: test crifanLib log */ include_once "crifanLib.php"; //test log $crifanLib = new crifanLib(); $crifanLib->logInit("/xxx/logTest.log"); $crifanLib->logWrite("This is crifanLib log test message using file_put_contents"); ?>
效果是:
root@chantyou:access_token# ll
total 16
-rw-r--r-- 1 root root 9524 Jul 27 18:16 crifanLib.php
-rwxrwxrwx 1 root root 561 Jul 27 18:18 wx_access_token.php
root@chantyou:access_token# ll
total 20
-rw-r--r-- 1 root root 9524 Jul 27 18:16 crifanLib.php
-rw-r--r-- 1 apache apache 76 Jul 27 18:19 logTest.log
-rwxrwxrwx 1 root root 561 Jul 27 18:18 wx_access_token.php
root@chantyou:access_token# cat logTest.log
[2015-07-27 12:05:47] (wx_access_token) This is crifanLib log test message using file_put_contents
root@chantyou:access_token#
如圖:
關于“PHP怎樣將log信息寫入服務器中的log文件”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。