关于 Discuz 的一些简单修改记录

由于每次更新可能都会用到这些小改动,所以干脆记录下来,免得每次都翻源代码。

去除模板右上角的快捷导航:√

打开 /template/default/common/header.htm ,找到以下代码并注释

<a href="javascript:;" id="qmenu" onmouseover="delayShow(this, function () {showMenu({'ctrlid':'qmenu','pos':'34!','ctrlclass':'a','duration':2});showForummenu($_G[fid]);})">{lang my_nav}</a>

 

拒绝游客查看注册用户资料:

打开 /source/module/home/home_space.php ,找到第23行,并且修改为以下内容

if(empty($_G['uid']) && in_array($_GET['do'], array('thread', 'trade', 'poll', 'activity', 'debate', 'reward','profile'))) {
 showmessage('login_before_enter_home', null, array(), array('showmsg' => true, 'login' => 1));
}

 

禁止用户访问其他注册用户资料:

打开 /source/include/space/space_profile.php ,在该文件21行下添加以下代码:

if(in_array($_G['groupid'], array(1))) {}
else {
showmessage('对不起,你无权查看他人资料');
}

 

array中的内容为用户组代码,message为弹出信息,均可以根据需求修改。

 

降低发帖时帖子售价的积分下限:

找到 /source/class/model 下的 model_forum_post.php 与 model_forum_thread.php,搜索 post_net_price_iszero ,并且注释相关语句即可。

 

禁止解析 ED2K 链接:

打开 source/function/function_discuzcode.php ,并注释以下几行代码:

 if($allowbbcode) {
 if(strpos($msglower, 'ed2k://') !== FALSE) {
 $message = preg_replace_callback("/ed2k:\/\/(.+?)\//", 'discuzcode_callback_parseed2k_1', $message);
 }
 }

 

电脑访问手机版链接不跳转为手机版安利页面:

打开 /source/class/discuz/discuz_application.php ,并且注释以下几行代码:

if(!$this->var['mobile'] && !$unallowmobile) {
 if($mobileflag) {
 dheader("Location:misc.php?mod=mobile");
 }
}

 

限制用户查看付费主题购买记录:√

打开 /template/default/forum/viewthread_node_body.htm ,搜索

<a href="forum.php?mod=misc&action=viewpayments&tid=$_G[tid]" onclick="showWindow('pay', this.href)">{lang pay_view}</a>

并且替换为以下语句:

<!--{if  $_G['groupid'] == 1}--><a href="forum.php?mod=misc&action=viewpayments&tid=$_G[tid]" onclick="showWindow('pay', this.href)">{lang pay_view}</a><!--{/if}-->

 

去除Title处的版权(注:仅因美观原因,底部留有相关版权及链接):√

打开 /template/default/common/header_common.htm ,去除相关字样并去除两个’ – ‘字符。

 

在板块下去除论坛名称:√

打开 /template/default/common/header_common.htm ,去除 $_G[‘setting’][‘bbname’]

 

使搜索框可以搜到分类信息:

打开 /source/module/search/search_forum.php ,找到:

$sqlsrch = $srchtype == 'fulltext' ?

将该行以下的两行内容修改为:

"FROM ".DB::table(forum_typeoptionvar)." o, ".DB::table(getposttable($seltableid))." p, ".DB::table('forum_thread')." t WHERE $digestltd t.fid IN ($fids) $topltd AND p.tid=t.tid AND p.invisible='0' AND o.tid=t.tid" :
 "FROM ".DB::table(forum_typeoptionvar)." o, ".DB::table('forum_thread')." t WHERE $digestltd t.fid IN ($fids) $topltd AND o.tid=t.tid";

接着搜索:

$srcharr = $srchtype == 'fulltext' ? searchkey($keyword, "(p.message LIKE '%{text}%' OR p.subject LIKE '%{text}%')", true) : searchkey($keyword,"t.subject LIKE '%{text}%'", true);

将其改为:

$srcharr = $srchtype == 'fulltext' ? searchkey($keyword, "(p.message LIKE '%{text}%' OR p.subject LIKE '%{text}%' OR o.value LIKE '%{text}%')", true) : searchkey($keyword,"t.subject LIKE '%{text}%' OR o.value LIKE '%{text}%'", true);

即可。

 

注:按这样修改只可以搜索到字符串类型的数据,并且该判定规则会使无分类信息的帖子无法被搜索到。a

一些现有服务的更新

更新 php 5.5.9 至 5.6.29:

1,卸载 php 5.5:

apt-get purge php5 php5-common php5-cli 等

2,添加 php 高版本源,感谢 ondrej 大神提供:

add-apt-repository ppa:ondrej/php5

apt-get update

3,执行安装 php 5.6:

apt-get install php5.6 php5.6-gd php5.6-mcrypt php5.6-cli php5.6-json php5.6-mysql php5.6-common

 

更新 ss-panel 至 V3:

根据wiki安装升级即可。

Windows Server 2016 安装相关设置

微软两个月前放出了正式版的 Server 2016,不过我直到今天才有时间更新。

设置时遇到一些曾碰到并有所困惑的小问题,为了免得下次安装时再次踩坑,记录在这里。

 

共享相关

Q:设置好各文件夹的匿名共享权限后,发现依旧无法通过其他终端直接访问。

A:打开网络于共享中心——高级共享设置——所有网络,并且关闭密码保护共享。

使用相关

Q:开始菜单中新安装的软件及文件夹点击无反应

A:在PowerShell中键入:

Get-AppXPackage -AllUsers | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “$($_.InstallLocation)\AppXManifest.xml”}

即可解决。

Q:网络发现时常无法正确运行

A:在 服务 中,将以下服务打开:

Function Discovery Resource Publication
SSDP Discovery
UPnP Device Host

并设置为自动运行,即可解决该问题。

禁止cron调用sendmail发送用户邮件

感谢公子月提供的资料,本文大部分内容均转自此文。

 

很多人写脚本时都不考虑标准输出和错误输出如何处理。当cron的具体执行中有输出时,cron就会把输出内容通过邮件发送给当前用户。

比较普通的处理方法就是在每条cron后面添加如下方法进行屏蔽:

>/dev/null 2>&1.

OR

&> /dev/null

like:

*/2 * * * * /usr/local/sbin/dog_lighttpd.sh >/dev/null 2>&1

同时cron本身也提供了方法来解决此问题:

crontab -e


在第一行添加:MAILTO=""

这样可在crontab中定义收件人,所以将收件人滞空即可。

其实最根本的方法还是大家养成脚本规范的好习惯。

今天我删了一堆编曲相关资源

多年前在广电工作时,有过一些收集资源的习惯。拜当年的网络不发达、下载渠道少,以及消费能力低下,这些数据曾经陪伴我征战了大量的音频工作实例,非常感谢当年借我硬盘拷数据的兄弟们^_^

然而时光飞逝,离开制作圈已有些时日,这些装满数据的硬盘,被我视作珍贵的记忆。现在我虽然已经不打算靠搞音乐吃饭了,偶尔弄弄也只是出于好玩,但是一来是觉得这些东西对我可能很难用到或者上手了(因为学习成本的问题),二来现在的传播与下载已没有以前那么困难,三就是自己学习与摸索资料的姿势水平也高了很多,最重要的是我很想断条后路,有种不破不立的感觉。

所以我清理了大概7TB的数据,只留下了不到30G,扯半天其实也不是为什么,就是为了爽!

利用ArDNSPod+OpenWRT实现DDNS

近期官方的DnsPodLiteClient出了一些小问题,导致获取的IP信息不正确。

奈何又有使用DDNS的需求,只能开始折腾,搜索之后发现了这个神器:ArDNSPod

根据该页面的指南进行配置,完毕后运行时出现如下报错:

wget: can't execute 'openssl': No such file or directory
wget: error getting response: Connection reset by peer

搜寻后根据该帖末尾的解决方案,顺利解决问题:

opkg install wget ca-certificates

最后在cron里设置好任务,全部配置成功。

MySQL炸毛的check脚本

最近貌似经常被攻击,MySQL总是炸毛。

解决方法:使用脚本每隔一段时间检测MySQL的pid是否正常,关闭了就自动重启MySQL。

新增一个脚本:

vi /root/tools/mysql_check.sh

添加内容如下:

#!/bin/bash
pgrep -x mysqld &> /dev/null
 
if [ $? -ne 0 ]
 
then
 
echo "At time: `date` :MySQL  is stop .">> /home/wwwlogs/mysql_messages
 
service mysql start
#echo "At time: `date` :MySQL server is stop."
 
else
 
echo "MySQL server is running ."
 
fi

添加定时任务,每隔5分钟检测一次:

crontab -e
*/5 * * * * /bin/bash /root/tools/mysql_check.sh