😯
其实蛮早就有关注这个程序,只不过是关注加星而已,最近稍微研究了下,其实是研究了下PT,仔细想想,PT对比BT,更加符合”P2P”的概念.毕竟早些年国内的宽带上行都是小的不要不要的,大部分人用完BT就关闭了上传,生怕抢了上行宽带.至于现在嘛,我也不清楚为嘛上传宽带宽裕了,大家还是不乐意分享.废多了.
下面我用的Nexusphp是基于itzmx的二次修改版,具体他修改了些什么,你们自己去看,内容也有部分收集于itzmx,我还是给出网址.https://bbs.itzmx.com/thread-4271-1-1.html
安装教程
搭建NexusPHP需要memcache组件的支持,现在绝大数空间都不支持memcache主机,所以如果要搭建NexusPHP的话,你只好选择价格不菲的VPS主机了。
配置环境可以选用apache+php+Mysql+memcache,推荐linux环境,代码执行效率更高。作者代码所提供的安装介绍也是在linux环境下的,而且全是英文介绍,这让我这六级不过的情何以堪啊,小小的鄙视下。。。
Windows下推荐win2003,如果你对PHP有一定了解,可以自己动手搭建IIS或apache+PHP+MysqL+memcache的环境,具体教程可以google。不过这种方法很繁琐,经常会出莫名其妙的错误,你要有心理的准备。
最好的方式是选用环境集成包,比如Apmserv5.2.6功能很全,支持apache+php+mysql+memcache,还有一个集成包,nginx+php+mysql+memcache,这个集成包相当简陋,只是各种包的聚合,没有控制界面和控制面板,使用起来很不方便。这应该是众多集成包里唯一两个支持memcache的集成包了。
好了,环境搭建完毕,解压程序包,然后导入数据库文件,(根目录_db下的dbstructure.sql文件)导入完毕后修改配置文件,在config文件下下面有一个allconfig.php的文件,修改下面的内容:
‘SITENAME’=>‘站点名称’
‘baseURL’=>‘网站URL’
‘announce_url’=>‘localhost/announce.php’(announce的url地址)
‘mysql_host’=>‘MySQL主机’
‘mysql_user’=>‘数据库用户名’
‘mysql_pass’=>‘数据库密码’
‘mysql_db’=>‘数据库名’
以上无误的话应该就可以登陆NexusPHP的界面了,赶紧注册管理员账号吧。
好了,注册好用户名后,接着进入数据库管理(phpMyAdmin),在users表里面找到你注册的用户,编辑它的class属性为16,便是主管权限了。
还可以通过下面的方法设置:
1.使用正常方式在网站注册一个新用户,假设用户名为admin。
2.输入以下命令进入MySQL命令行管理工具:mysql-uroot-pnexusrocks-hlocalhost注意:将’root’,’nexusrocks’,’localhost’分别替换成你的MySQL用户名、密码、主机地址。
2.在MySQL命令行管理工具输入以下命令:USEnexus;UPDATEusersSETclass=’16′WHEREusername=’admin’;注意:将以上命令中的’nexus’替换成你的数据库名,将’admin’替换成你注册的用户名。
3.退出MySQL命令行管理工具:
到这里PT基本上就架设完毕了,现在只需要利用主管帐号对站点进行设置和调整就可以了
NexusPHP pt站点memcache中清除页面缓存的方法
地址栏输入
域名/index.php?clearcache=1
或者?forceall=1也可以试试
例如修改了news规则sql语句没有立即生效。
index.php替换成你要清除的PHP文件
NexusPHP设置站点不在线后管理员无法登录的问题
搜索配置文件找到解决方法
在allconfig.php文件里面,找到
‘site_online’=>’no’修改为’yes’
保存即可。
nexusphp使用文件缓存,支持未安装memcache的服务器
编辑classes/class_cache.php 在其第2行插入
class Memcache{
private $lifetime = 3600;
private $path = 'cache';
function set($name,$value,$time=0){
if($time) $this->lifetime = $time;
$filename = $this->path.'/'.md5($name).'.php';
@unlink($filename);
$valuecache['cache'] = $value;
$valuecache['cachetimeuntil']=time()+$this->lifetime;
$array = "<?php\n\$filecache['".$name."']=".var_export($valuecache, true).";\n?>";
$strlen = file_put_contents($filename, $array);
@chmod($filename, 0777);
return $strlen;
}
function get($name){
$filename = $this->path.'/'.md5($name).'.php';
include_once $filename;
if($filecache[$name]['cachetimeuntil']>time())
return $filecache[$name]['cache'];
else
return false;
}
function delete($name){
$filename = $this->path.'/'.md5($name).'.php';
@unlink($filename);
}
function connect(){
return true;
}
}
然后在网站根目录创建一个文件夹,名为“cache”用于保存缓存文件
编辑include/cleanup.php 搜索
//5.delete old login attempts
在其前插入
//4.delete cache files
$dp = @opendir('cache');
while (($file = readdir($dp)) !== false) {
if(time() - filemtime('cache/'.$file) > 24*3600)@unlink('cache/'.$file);
}
closedir($dp);
if ($printProgress) {
printProgress("delete cache file");
}
每24小时自动清空一次缓存
NexusPHP用户组名字修改,NexusPHP用户组汉化
在\lang\chs\lang_functions.php中修改257-266行即可,如下图.
NexusPHP汉化“管理组面板”位置
在adminpanel表、modpanel表、sysoppanel表里面修改
Ps.这个我没去仔细看,居然写到数据库里面去了???
修改pt程序nexusphp代码支持compact=1参数返回二进制文件的 ipv6 peers列表用于客户端互相连接下载的方法
问题所在:
d8:intervali3600e12:min intervali30e8:completei67e10:incompletei0e5:peers354:q"…uZ…G…=5.J.(<.,T#’{x…e.jT.w.p.z%F7.y.zk…r.6.1W:.0T…qM.-…*.P.=…7…8…S…_.J…z.K
.S…vp… <…!..4…1D:…s…Su…=…ps.]A.y…qo\e…A…M.1.}MY…q…]…3…xi.r.H…1.n.v…]…e…Fo…]…3…0k…=3/…=.gVn.z…#'w!..-…9.WM.:7B…H .~U…
…uQ.=#&qQ.4…x.+.r.f…}u…p…eA.s…A…j…e
“peers”后面的354字节二进制数据都是ipv4 peer,每个ipv4 peer含4字节ip和2字节port共6字节,所以peer个数是354/6=59。ipv6 peers二进制数据按照协议是在“peers6”节点返回,从抓包看没有。
现在的pt程序,客户端收不到ipv6地址的,只能连接ipv4
这是修改过的,可以直接让客户端拿到ipv6
如果两边都是内网ipv4,那么,就会可能导致无法连接
如果连接成功,客户端才会互相汇报本地ipv6到对方客户端进行连接
直接服务器下发列表,客户端拿到了可以直接请求,不需要先ipv4建立
修改:
announce.php文件
114行搜索
$peer_list = "";
下方增加
$peer6_list = "";
130行搜索
$peer_list .= pack("Nn", sprintf("%d",$longip), $row['port']);
下方增加
else
{
$ipv6_packed = inet_pton($row['ip']);
if ($ipv6_packed)
$peer6_list .= $ipv6_packed . pack("n", $row['port']);
}
147行搜索
$resp .= "l".$peer_list."e";
下方增加
if ($compact == 1 && strlen($peer6_list) > 0)
{
$resp .= benc_str("peers6").benc_str($peer6_list);
}
修改pt程序nexusphp代码支持download.php强制返回rss的https地址
在67行,把下发的http改成https就行了,这样输出也就是https了
if ($_COOKIE["c_secure_tracker_ssl"] == base64("yeah"))
$tracker_ssl = true;
else
$tracker_ssl = false;
if ($tracker_ssl == true){
$ssl_torrent = "https://";
if ($https_announce_urls[0] != "")
$base_announce_url = $https_announce_urls[0];
else
$base_announce_url = $announce_urls[0];
}
else{
$ssl_torrent = "https://";
$base_announce_url = $announce_urls[0];
}
pt做种tracker不能返回全部peer list用户数据,可连接否检测
这个问题仅针对使用ITZMX修改版的用户.
发现全站的可连接全是“否”状态,但是在其它站点可以正常连接和上传
所以分析tracker所用到的文件也就是announce.php文件
直接修改356行代码
$connectable = "no";
变为
$connectable = "yes";
然后在分号后面回车新建一行插入代码
@fclose($sockres);
这时候从353行代码到363行代码将显示为如下所示
$sockres = @pfsockopen($ip, $port, $errno, $errstr, 5);
if (!$sockres)
{
$connectable = "yes";
@fclose($sockres);
}
else
{
$connectable = "yes";
@fclose($sockres);
}
然后保存文件。
这时候再测试发现可连接全都变成“是”了
做种后需要3-30秒时间才会有数据,然后其它人已经可以获取到tracker服务器返回的用户数了
NexusPHP程序同一个服务器上的多个PT共用memcache
这个问题,换到13年的我肯定不知道,当然现在一看就知道是缓存标识符重复了.解决办法如下.
1.下载解压附件得到class_cache.php文件,打开,
找到195行,将WinCache改为Memcache。(如果不是memcahce自己灵活更改);
2.找到210行,将ANTSOUL_改为与服务器上现存PT代码中对应设置不同的任意字符。(只要不傻乎乎地改为中文或特殊字符就不会有问题)
3.将class_cache,php文件上传到/classes/下,替换原有文件。
4.大功告成!!
缓存支持WinCache_Memcache_APCCache_XCache_eAccelerator
nexusphp程序默认邮件通知提示勾选收到短讯的时候提醒我,设置显示包括断种,数据库结构修改
users表单
notifs默认值
[pm][email][incldead=0]
pm字段是收到短讯的时候提醒我。
email字段是当默认分类中有新种子的时候通知我。
incldead=0字段是搜索默认显示全部种子
新用户注册默认勾选了,老用户怎么办呢?
直接sql语句升级一下
update users set notifs='[pm][email][incldead=0]';
修改pt程序nexusphp代码支持details.php种子链接让BT客户端直接下载的办法
106行,搜索
$download = "<a title="".$lang_details['title_download_torrent']."" href="download.php?id=".$id.""><img class="dt_download" src="pic/trans.gif" alt="download" /> <b><font class="small">".$lang_details['text_download_torrent']."</font></b></a> | ";
替换如下,加入&passkey=$CURUSER[passkey]参数即可
$download = "<a title="".$lang_details['title_download_torrent']."" href="download.php?id=".$id."&passkey=$CURUSER[passkey]"><img class="dt_download" src="pic/trans.gif" alt="download" /> <b><font class="small">".$lang_details['text_download_torrent']."</font></b></a> | ";
让NexusPHP支持@功能
[download id=”720″]
先下载文件包,将里面的三个文件上传至文件夹根目录(当然,js和css样式文件可以传到其它目录,确保路径正确就行了),这里为了省事,我上传的是根文件夹下面
1、修改include文件夹下面的functions.php文件
funtion.php搜索:
print("<td align=\"left\"><textarea class=\"bbcode\" cols=\"100\" style=\"width: 650px;\" name=\"".$text."\" id=\"".$text."\" rows=\"20\" onkeydown=\"ctrlenter(event,'compose','qr')\">".$content."</textarea>");
在下面添加
?>
<link rel="stylesheet" href="userAutoTips.css" type="text/css">
<script type="text/javascript" src="userAutoTips.js"></script>
<script type="text/javascript">userAutoTips({id:'<?php echo $text?>'});$(window).bind('scroll resize', function(e){userAutoTips({id:'<?php echo $text?>'})})</script>
继续搜索function quickreply($formname, $taname,$submit){
在该方法的最后一行添加
<link rel="stylesheet" href="userAutoTips.css" type="text/css">
<script type="text/javascript" src="userAutoTips.js"></script>
<script type="text/javascript">userAutoTips({id:'qrbody'});$(window).bind('scroll resize', function(e){userAutoTips({id:'qrbody'})})</script>
该方法中textarea 添加ID参数
print("<textarea id=\"qrbody\" name='".$taname."' cols=\"100\" rows=\"8\" style=\"width: 450px\" onkeydown=\"ctrlenter(event,'compose','qr')\"></textarea>");
2、种子回复评论页面为comment.php,论坛帖子回复页面为:forums.php
*下面以修改forums.php页面为例,(comment.php回复的话系统会自动发送消息的,只不过由于改了functions.php,@还是会显示用户名的,不过不发送系统定义消息)
在// ————- start: functions ——————//下面添加如下方法
function at_user_message($topicid,$body,$postid){
global $Cache;
$subject="You may be @";
$url=$BASEURL."/forums.php?action=viewtopic&topicid=".$topicid."&page=p".$postid."#pid".($postid);
$address="[url=$url]"."Click here to view the detail"."[/url]";
preg_match_all( "/\[@([0-9]+?)\]/ei",$body,$useridget);
$useridget[1] = array_unique($useridget[1]);
for($i = 0;$i < min(10,count($useridget[1])); $i++){
sql_query("INSERT INTO messages (sender, receiver, subject, msg, added) VALUES(0, " . $useridget[1][$i] . ",'$subject','$address', ".sqlesc(date("Y-m-d H:i:s")).")");
$Cache->delete_value('user_'.$useridget[1][$i].'_unread_message_count');
$Cache->delete_value('user_'.$useridget[1][$i].'_inbox_count');
}
}
搜索$postid = mysql_insert_id()
在这一行下面添加如下部分(调用上面的函数语句)
at_user_message($topicid,$body,$postid);
然后就可以使用功能了,@某一位后,系统会发送短消息的。(comment.php可以根据需求修改at_user_message函数)