本来该出去浪的大年初一被吃野味的进化不完全野蛮人搞出的病毒困在家里。。想下部电影还被某度网盘的10K/S限速搞得实在难以忍受今天就在家里的NAS装了Nextcloud自己搭网盘
和众多网盘一样,Nextcloud也有链接分享文件功能,分享后就能把链接发给别人让别人下载
但这日志实在有点不爽,只简简单单地记录了操作时间
我原以为数据库后台会有更详细的记录,看了数据库后发现后台居然真的就是这么简单。。
于是手动增加了记录IP和UA的功能,这样就能分析下载者的ISP、地理位置、设备类型、设备型号、浏览器等信息
方法如下:
1、在数据库执行以下语句给日志的表增加IP和UA字段
ALTER TABLE oc_activity ADD ip VARCHAR(50) NULL AFTER object_id, ADD ua VARCHAR(1000) NULL AFTER ip;
2、修改lib/private/Activity目录下的Event.php
使用以下代码在Event类中增加IP和UA元素及获取它们的函数
protected $ip='';
protected $ua='';
public function getIp(){return $this->ip;}
public function getUa(){return $this->ua;}
在大约34行之后插入上述代码,使原本的
class Event implements IEvent {
/** @var string */
protected $app = '';
/** @var string */
protected $type = '';
……
变为
class Event implements IEvent {
protected $ip='';
protected $ua='';
public function getIp(){return $this->ip;}
public function getUa(){return $this->ua;}
/** @var string */
protected $app = '';
/** @var string */
protected $type = '';
……
3、继续修改Event.php,使用以下代码在构造函数给元素赋值
$this->ip=$_SERVER['HTTP_REMOTE_ADDR'];
$this->ua=$_SERVER['HTTP_USER_AGENT'];
在大约85行之后插入上述代码,使原本的
public function __construct(IValidator $richValidator) {
$this->richValidator = $richValidator;
}
变为
public function __construct(IValidator $richValidator) {
$this->ip=$_SERVER['HTTP_REMOTE_ADDR'];
$this->ua=$_SERVER['HTTP_USER_AGENT'];
$this->richValidator = $richValidator;
}
4、修改apps/activity/lib目录下的Data.php,使用'ip' => $queryBuilder->createParameter('ip'),'ua' => $queryBuilder->createParameter('ua')
和ip' => $event->getIp(),'ua' => $event->getUa()
在保存Event进数据库时增加Event类中的IP和UA
在大约68行之后插入第一段代码,使原本的
$queryBuilder->insert('activity')
->values([
'app' => $queryBuilder->createParameter('app'),
……
变为
$queryBuilder->insert('activity')
->values([
'ip' => $queryBuilder->createParameter('ip'),
'ua' => $queryBuilder->createParameter('ua'),
'app' => $queryBuilder->createParameter('app'),
……
在大约84行之后插入第二段代码,使原本的
->setParameters([
'app' => $event->getApp(),
……
变为
->setParameters([
'ip' => $event->getIp(),
'ua' => $event->getUa(),
'app' => $event->getApp(),
……
P.S.按顺序完成一部分修改时不会影响正常运行,因此可按步骤直接在生产环境操作
大功告成数据库中从此就会保存所有下载文件者的IP和UA,就能通过phpMyAdmin等工具打开oc_activity表查看
2020年1月25日
能否贴下这两个文件,实在没检查出错误
可以,你看一下完整的吧
Event.php:https://pasteme.cn/45805
Data.php:https://pasteme.cn/45807
谢谢!
我这
$this->ip=$_SERVER[‘HTTP_REMOTE_ADDR’];
改为
$this->ip=$_SERVER[‘REMOTE_ADDR’];
可以
为什么我的ua有,但IP没有?