wordpress 修改 functions.php 添加网站日志函数,不用插件!

阅读次数: 2,226

  • A+
所属分类:PHP

很多文章都需要在当前主题的 functions.php 里添加代码,但很多新手(包括我)就不知道怎么添加,在这里用一篇文章统一回答一下。

functions.php 是主题的函数模板,在这里添加的代码类似于插件的作用,所以 functions.php 可以看成给一个添加函数功能代码的地方,WordPress 会在任何需要调用插件的地方同时调用 functions.php 文件。

functions.php 文件的位置:根目录/wp-content/themes/你的主题/ functions.php 

 

[danger]修改functions.php 文件的方法:[/danger]

  1. 可以用 WordPress 的在线编辑器添加代码,打开 “外观” → “编辑”,在右侧选择 functions.php 文件。
  2. 可以使用FTP工具将functions.php 文件下载到本地,然后再修改。
  3. 具体编辑:
    1. 打开 functions.php 文件,这一步,不能使用window 自带的txt工具!推荐使用vs code、sublime text。
    2. 插入函数的位置:一般在文件末尾即可。
    3. 注意,末尾是否有‘?>’,如果有,插入到‘?>’之前,
    4. 如果没有,插入到文件末尾即可。

[info]刚知道,php文件可以只有<?php,与之配对的‘?>’可以没有 :redface:[/info]

可以为 WordPress 生成网站访问日志,日志内容还是可以自定义的,这样就可以省去每次都要登录主机后台查询。

把下面的代码添加到主题的 function.php 文件中即可:

make_log_file();
function make_log_file(){
        //log文件名
	$filename = 'mylogs.txt'; 
        //去除rc-ajax评论以及cron机制访问记录
	if(strstr($_SERVER["REQUEST_URI"],"rc-ajax")== false 
		&& strstr($_SERVER["REQUEST_URI"],"wp-cron.php")== false ) {
		$word .= date('mdHis',$_SERVER['REQUEST_TIME'] + 3600*8) . " ";
                //访问页面
		$word .= $_SERVER["REQUEST_URI"] ." ";
                //协议
		$word .= $_SERVER['SERVER_PROTOCOL'] ." ";
                //方法,POST OR GET
		$word .= $_SERVER['REQUEST_METHOD'] . " ";
		//$word .= $_SERVER['HTTP_ACCEPT'] . " ";
                //获得浏览器信息
		$word .= getbrowser(). " ";
                //传递参数
		$word .= "[". $_SERVER['QUERY_STRING'] . "] ";
                //跳转地址
		$word .= $_SERVER['HTTP_REFERER'] . " ";
                //获取IP
		$word .= getIP() . " ";
		$word .= "\n";
		$fh = fopen($filename, "a");
		fwrite($fh, $word);    
		fclose($fh);
	}
}
//获取IP地址,网上现成代码
function getIP() //get ip address
    {
        if (getenv('HTTP_CLIENT_IP')) 
        {
            $ip = getenv('HTTP_CLIENT_IP');
        } 
        else if (getenv('HTTP_X_FORWARDED_FOR')) 
        {
            $ip = getenv('HTTP_X_FORWARDED_FOR');
        } 
        else if (getenv('REMOTE_ADDR')) 
        {
            $ip = getenv('REMOTE_ADDR');
        } 
        else 
        {
            $ip = $_SERVER['REMOTE_ADDR'];
        }
        return $ip;
    }
//获取浏览器信息,移动端,平板电脑数据还未加上。
 function getbrowser()
    {
        $Agent = $_SERVER['HTTP_USER_AGENT'];
        $browser = '';
        $browserver = '';

        if(ereg('Mozilla', $Agent) && ereg('Chrome', $Agent))
        {
            $temp = explode('(', $Agent);
            $Part = $temp[2];
            $temp = explode('/', $Part);
            $browserver = $temp[1];
            $temp = explode(' ', $browserver);
            $browserver = $temp[0];
            $browserver = $browserver;
            $browser = 'Chrome';
        }
		if(ereg('Mozilla', $Agent) && ereg('Firefox', $Agent))
        {
            $temp = explode('(', $Agent);
            $Part = $temp[1];
            $temp = explode('/', $Part);
            $browserver = $temp[2];
            $temp = explode(' ', $browserver);
            $browserver = $temp[0];
            $browserver = $browserver;
            $browser = 'Firefox';
        }
        if(ereg('Mozilla', $Agent) && ereg('Opera', $Agent)) 
        {
            $temp = explode('(', $Agent);
            $Part = $temp[1];
            $temp = explode(')', $Part);
            $browserver = $temp[1];
            $temp = explode(' ', $browserver);
            $browserver = $temp[2];
            $browserver = $browserver;
            $browser = 'Opera';
        }
        if(ereg('Mozilla', $Agent) && ereg('MSIE', $Agent))
        {
            $temp = explode('(', $Agent);
            $Part = $temp[1];
            $temp = explode(';', $Part);
            $Part = $temp[1];
            $temp = explode(' ', $Part);
            $browserver = $temp[2];
            $browserver = $browserver;
            $browser = 'Internet Explorer';
        }
        if($browser != '')
        {
            $browseinfo = $browser.' '.$browserver;
        } 
        else
        {
            $browseinfo = $_SERVER['HTTP_USER_AGENT'];
        }
        return $browseinfo;
    }

[success]文件提交后,刷新后,网站直接崩溃,而且网站还没有什么提示,直接就一句话:您的站点遇到了致命错误。[/success]

 

然后,开始查找问题所在:

    1. 首先,想到的是代码的中文字符问题,经排查,不是!
    2. 然后,在本地模拟错误文件,发现了更多的错误:

Uncaught Error: Call to undefined function ereg()

    1. 最后,锁定问题是函数问题。
    2. ereg():(PHP 4, PHP 5)   ereg — 正则表达式匹配,显然该函数适用于PHP 4, PHP 5之间,然后我自己的网站使用PHP7.2,该函数已过时了,可以使用preg_match()代替使用。
    3. 把上述代码中的ereg('Mozilla', $Agent)换成preg_match('/Mozilla/', $Agent)。
    4. Delimiter must not be alphanumeric or backslash
    5. 把preg_match('Mozilla', $Agent)换成preg_match('/Mozilla/', $Agent)。
    6. 问题排除!

这样,在你的站点根目录上就会生成mylogs.txt文件,你通过http://你的域名/mylogs.txt可以直接访问。这样的日志要比chinaz这种统计工具生成的日志精准的多,你可以通过日志得知哪些人访问哪些文件,哪些蜘蛛爬行过了等等信息。

  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信公众号扫一扫
  • weinxin
ChemistrySir

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: