<?php


// 访问日志写入类 @author 王伟 2011.12.14
class Log{
    
    //项目跟路径
    private $root_path;
    
    //日志文件绝对路径
    private static $log_file_path;
    
    function __construct($root_path){
        $this->root_path = $root_path.DIRECTORY_SEPARATOR;
        self::$log_file_path = $this->root_path .'logfile'.DIRECTORY_SEPARATOR .date('Y_m_d',time()).'.log';
    }
   
    // 获取访问者ip地址
    private static function getRealIp(){
        $ip = false;
        if (!empty($_SERVER["HTTP_CLIENT_IP"])){
            $ip = $_SERVER["HTTP_CLIENT_IP"];
        }
        if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
            $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
            if ($ip){
                array_unshift($ips, $ip);
                $ip = false;
            }
            for ($i = 0; $i < count($ips); $i++){
                if (!eregi ("^(10|172\.16|192\.168)\.", $ips[$i])){
                    $ip = $ips[$i];
                    break;
                }
            }
        }
        return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
    }
   
    // 写访问日志
    public function writeLog(){
        
        //浏览当前页面的用户的主机名
        $uhost = (isset($_SERVER['REMOTE_HOST']) ? $_SERVER['REMOTE_HOST'] : '-');
        
        //请求时间
        $rtime =  date('Y-m-d H:i:s',$_SERVER['REQUEST_TIME']);
        
        //请求类型
        $rmethod = $_SERVER['REQUEST_METHOD'];
        
        //请求来路
        $ref = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '-');
        
        //请求协议类型
        $rprotocol = $_SERVER['SERVER_PROTOCOL'];
        
        //请求浏览器的用户浏览器信息
        $ragent = empty($_SERVER['HTTP_USER_AGENT']) ? 'Unknown' : $_SERVER['HTTP_USER_AGENT'];
        
        $durl = $_SERVER['REQUEST_URI'];

$logStr = self::getRealIp() .' '.$uhost.' '.$rtime.' "'.$rmethod.' '.$ref.' '.$rprotocol.'" '.$ragent.' '.$durl."\r\n";

if(!file_exists($this->root_path .'logfile')){
            mkdir($this->root_path .'logfile');    
        }
        
        $flog = fopen(self::$log_file_path,'a');
        fwrite($flog,$logStr);
        fclose($flog);
    }
}
?>

<?php
// 使用说明
// 在new Log类时传入想要生成日志文件的所在目录的绝对路径(注:不含末尾的 "/")
//会在这个目录下创建 logfile目录,并每天按日期命名生成一个访问日志文件

$log = new Log(想要生成日志文件的所在目录的绝对路径);
$log->writeLog();
?>

自制模仿apache访问日志文件格式的php日志类的更多相关文章

  1. 移动apache访问日志后如何立即生效

    一次偶然测试发现移动了apache下的access_log日志后或者修改了access_log的名称,该移动的日志或修改名称的日志文件仍记录了apache访问信息,即没有实时生效,后来查了资料才知道: ...

  2. apache用户认证、域名跳转、Apache访问日志(两种格式)

    1.apache 设置,用户访问时 目录或文件的认证: 对目录的认证: <Directory /var/www/222> //指定认证的目录AllowOverride AuthConfig ...

  3. Apache用户认证、域名跳转、Apache访问日志

    5月29日任务 课程内容: 11.18 Apache用户认证11.19/11.20 域名跳转11.21 Apache访问日志扩展 apache虚拟主机开启php的短标签 http://ask.apel ...

  4. Python基础(三):简化除法判断、分析apache访问日志、扫描存活主机、利用多线程实现ssh并发访问

    一.简化除法判断 目标: 编写mydiv.py脚本,主要要求如下: 提示用户输入一个数字作为除数 如果用户按下Ctrl+C或Ctrl+D则退出程序 如果用户输入非数字字符,提示用户应该输入数字 如果用 ...

  5. apache 访问日志access_log 配置和解析 rotatelogs分割日志

    一.解析访问日志        apache 的访问日志记载着大量的信息,学会高效快捷的读出其中关键信息对我们的工作有极大帮助.       如果Apache的安装方式是默认安装,服务器一运行就会有两 ...

  6. Linux centos7 VMware Apache访问日志不记录静态文件、访问日志切割、静态元素过期时间

    一.Apache访问日志不记录静态文件 网站大多元素为静态文件,如图片.css.js等,这些元素可以不用记录 vim /usr/local/apache2.4/conf/extra/httpd-vho ...

  7. Linux CentOS7 VMware LAMP架构Apache用户认证、域名跳转、Apache访问日志

    一.Apache用户认证 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把111.com那个虚拟主机编辑成如下内容 <Virtu ...

  8. 实时观察Apache访问情况的工具Apachetop

    Linux服务器的负载.进程等信息可以通过top命令查看.而Apache的运转如何实时的观察呢?“tail -f”log文件?这是个好方法,但是太累了! 所以,感谢Chris Elsworth为我们提 ...

  9. weblogic开启http访问日志并实时写入日志文件

    由于http访问会产生大量日志,耗去不少IO和CPU所以在生产一般是不启用的:但有时我们会想启用http访问日志,尤其是在系统上线调试的时候. weblogic的日志默认在domain_name/se ...

随机推荐

  1. 西交利物浦大学Java PAPER CODE: CSE105/12-13/S1/Resit Coursework

    Question 6:What is an accessor method?What is a mutator method? 答案参考:http://www.xmsydw.com Number An ...

  2. 使用Gson轻松解决复杂结构的Json数据解析

    转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50961803 JSON简介 JSON(JavaScript Object Notati ...

  3. 转载 eclipse中的include设置

    备注:在10.1版的niosii使用的eclipse中设置的方法是右键->properties->c/c++general->path and symbols->include ...

  4. LOJ10034 图书管理

    题意 图书管理是一件十分繁杂的工作,在一个图书馆中每天都会有许多新书加入.为了更方便的管理图书(以便于帮助想要借书的客人快速查找他们是否有他们所需要的书),我们需要设计一个图书查找系统. 该系统需要支 ...

  5. ansible playbook 使用

    ansible playbook 格式是json  yaml   1. 执行方法 ansible-playbook deply.yml 2. playbook 格式 关键字 hosts 主机ip 主机 ...

  6. 使用微软的MSBuild.exe编译VS .sln .csproj 文件

    最近在看一些算法和测试一些程序,以及帮团队测试程序,团队使用了vs开发环境创建的sln项目文件,我使用的是公司的机器,没有任何权限安装程序等操作,但是又需要编译一些程序,所以我想到了,使用MSBuil ...

  7. PHP实现同服务器多个二级域名共享 SESSion

    现在很多分类信息网站都会分出很多个二级域名出来,比如:sh.ganji.com(上海赶集网), su.ganji.com(苏州赶集网)等等,像这种拥有多个二级域名的网站,该如何实现同步共享sessio ...

  8. Java:Java 清单

    ylbtech-Java:Java 清单 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://ylb ...

  9. 源码编译安装ceph

    标签(空格分隔): ceph,ceph安装,ceph运维 centos7系统,aarch64架构下安装最新版本的ceph(13.0.0),x86架构的环境无需修改脚本即可. 一,物理环境: 内核版本: ...

  10. PHP 获取指定日期的星期几的方法

    <?php header("Content-type: text/html; charset=utf-8"); //获取星期方法 function get_week($dat ...