微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP如何将log信息写入服务器中的log文件

将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.然后用代码

<div class="jb51code">
<pre class="brush:PHP;">
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,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);
}
}
}
?>

然后测试代码

rush:PHP;"> logInit("/xxx/access_token/crifanLibTest.log"); $crifanLib->logWrite("This is crifanLib log test message."); $crifanLib->logDeinit(); ?>

然后去执行对应的代码

页面是没有任何输出的:

然后的确生成了log文件了:

<div class="jb51code">
<pre class="brush:php;">
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服务器中的对应的文件夹添加写权限:

<div class="jb51code">
<pre class="brush:php;">
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

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

测试文件为:

logInit("/xxx/logTest.log"); $crifanLib->logWrite("This is crifanLib log test message using file_put_contents"); ?>

效果是:

# 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 # 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 # cat logTest.log [2015-07-27 12:05:47] (wx_access_token) This is crifanLib log test message using file_put_contents # 如图:

注:

期间参考:

PHP: is_resource – Manual

【总结】

1.此处可以通过:

fopen创建log文件 fwrite写入文件信息 fclose关闭文件 去实现log信息写入到文件中的。

2.更好的做法是:

直接用更方便的

file_put_contents直接输出内容到log文件 即可。

以上就是将log信息写入服务器中的log文件文件全部内容,希望大家喜欢。

原文地址:https://www.jb51.cc/php/21410.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐