- A+
所属分类:PHP
很多文章都需要在当前主题的 functions.php 里添加代码,但很多新手(包括我)就不知道怎么添加,在这里用一篇文章统一回答一下。
functions.php 是主题的函数模板,在这里添加的代码类似于插件的作用,所以 functions.php 可以看成给一个添加函数功能代码的地方,WordPress 会在任何需要调用插件的地方同时调用 functions.php 文件。
functions.php 文件的位置:根目录/wp-content/themes/你的主题/ functions.php
[danger]修改functions.php 文件的方法:[/danger]
- 可以用 WordPress 的在线编辑器添加代码,打开 “外观” → “编辑”,在右侧选择 functions.php 文件。
- 可以使用FTP工具将functions.php 文件下载到本地,然后再修改。
- 具体编辑:
-
- 打开 functions.php 文件,这一步,不能使用window 自带的txt工具!推荐使用vs code、sublime text。
- 插入函数的位置:一般在文件末尾即可。
- 注意,末尾是否有‘?>’,如果有,插入到‘?>’之前,
- 如果没有,插入到文件末尾即可。
[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]
然后,开始查找问题所在:
-
- 首先,想到的是代码的中文字符问题,经排查,不是!
- 然后,在本地模拟错误文件,发现了更多的错误:
Uncaught Error: Call to undefined function ereg()
-
- 最后,锁定问题是函数问题。
- ereg():(PHP 4, PHP 5) ereg — 正则表达式匹配,显然该函数适用于PHP 4, PHP 5之间,然后我自己的网站使用PHP7.2,该函数已过时了,可以使用preg_match()代替使用。
- 把上述代码中的ereg('Mozilla', $Agent)换成preg_match('/Mozilla/', $Agent)。
- Delimiter must not be alphanumeric or backslash
- 把preg_match('Mozilla', $Agent)换成preg_match('/Mozilla/', $Agent)。
- 问题排除!
这样,在你的站点根目录上就会生成mylogs.txt文件,你通过http://你的域名/mylogs.txt可以直接访问。这样的日志要比chinaz这种统计工具生成的日志精准的多,你可以通过日志得知哪些人访问哪些文件,哪些蜘蛛爬行过了等等信息。
- 我的微信
- 微信扫一扫
-
- 我的微信公众号
- 微信公众号扫一扫
-