习惯了用python以后要我写php的代码,我各种不习惯。为什么变量前面要加个“$”?为什么要写“{}”这种东西?为什么居然可以乱七八糟不缩进?python估计是不用数组表示东西的,但实际上,在历遍的过程里有数组,而php这东西貌似不像python那样分列表和元组,字符串是肯定有的,字典可能也有,但这个我不确定。在计算某个东西长度的时候还得纠结到底我要分解到什么程度,我不就是要计算一下数组里元素有多少嘛。可能是我使用的方式不对,print_r的确把数组表达出来了,但一坨东西各种嵌套,你给我个缩进好不好,我都分不清谁是谁了。python里计算长度用len(),我已经用得很熟练很爽了,到php里变成了count(),如果数组里还有数组,也要算出长度还得加参数。不得不说,数组这个东西挺让我头痛。记得从前学C语言的时候我就挺烦数组这个东西,我感觉自己一直没学好。当我接触了python,让我明白到其实数组不就是那些东西,为什么就非得用索引号把他们定位表示呢?直接把数据按照数组的排列方式直接表达出来是可以,json就是这么玩的,那是一个混合长度的数组,同样的事情也可以发生在python的列表、字典和元组里。好像在C语言里数组的长度得一开始就设定好,现在看来,我觉得这样不好,因为有些东西的确是很难一开始就想清楚的,搞太小了,放不下,搞太大了浪费空间。学习各种编程语言让我明白到原来某些我觉得参不透的东西其实可能没必要一定用那种思路。
之所以要死磕php,因为我有点讨厌WordPress里的垃圾评论。虽然官方自带的Akismet插件已经免去了我很多烦恼,但还是会有些漏网之鱼,所以我的垃圾评论列表里总有东西,看着心烦。那些垃圾评论虽然不在前台显示,但是在导出数据里会看到,浪费我的空间。对付垃圾评论的方法有很多,插件大法是最适合小白使用的,WordPress自带的规则也能让评论不被摆上台面,但我想做到的是根本不让那些东西写入我的数据库,没有写入就不需要删除,不适合的东西直接滚,减轻数据库的负担。虽然呢,我的小网站向来没什么流量,不会负载超标之类,但每当网站很慢,发布个文章都等半天都开不完的时候我就会暗暗觉得是不是被垃圾评论拖累了。综上所述,所以我选择的垃圾评论对抗大法是“Akismet + 自定义代码”。Akismet这个东西是安装完WordPress以后自带的官方工具,启用、填API就好。自定义代码需要在WordPress模板的functions.php里加入一些东西。网上有很多教程,但哪个才最适合自己得自己试过才知道。评论里可控的参数可以参考comments.php。我的防垃圾评论自定义代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| function refused_spam_comments($incoming_comment) {
preg_match_all('/http/', $incoming_comment['comment_content'], $link); // 有两条或以上超链接的,滚!
if(count($link[0])>1) {
wp_die("垃圾评论!!!");
}
$ruattern = '/[А-я]+/u'; // 俄语的,滚!暂时我还没见过大批量日语、泰语、阿拉伯语的
if(preg_match($ruattern, $incoming_comment['comment_content'])){
wp_die( "垃圾评论!!!" );
}
$name = '/Henrylix/i'; // 中文广告
if(preg_match($name, $incoming_comment['comment_author'])){
wp_die( "垃圾评论!!!" );
}
$mail = '/(jjgfqijpo)|(.ru)/i'; // 其它广告
if(preg_match($mail, $incoming_comment['comment_author_email'])){
wp_die( "垃圾评论!!!" );
}
return($incoming_comment);
}
add_filter('preprocess_comment', 'refused_spam_comments'); |
function refused_spam_comments($incoming_comment) {
preg_match_all('/http/', $incoming_comment['comment_content'], $link); // 有两条或以上超链接的,滚!
if(count($link[0])>1) {
wp_die("垃圾评论!!!");
}
$ruattern = '/[А-я]+/u'; // 俄语的,滚!暂时我还没见过大批量日语、泰语、阿拉伯语的
if(preg_match($ruattern, $incoming_comment['comment_content'])){
wp_die( "垃圾评论!!!" );
}
$name = '/Henrylix/i'; // 中文广告
if(preg_match($name, $incoming_comment['comment_author'])){
wp_die( "垃圾评论!!!" );
}
$mail = '/(jjgfqijpo)|(.ru)/i'; // 其它广告
if(preg_match($mail, $incoming_comment['comment_author_email'])){
wp_die( "垃圾评论!!!" );
}
return($incoming_comment);
}
add_filter('preprocess_comment', 'refused_spam_comments');
WordPress自带的评论规则里有超链接超两条就自动不显示,自动落入待审核的垃圾评论,但这样我还得去清啊,直接不让进更好,貌似我没有在其它防垃圾评论代码里见过这条。很多教程里“wp_die”那里用的是“err”,我不知道其他人怎样,反正“wp_die”我用得挺好,前台后台都正常,但“err”前台后台都不行。有些人这样,有些人那样,是不是跟不同的WordPress版本有关呢?这个自定义代码只是暂时的,我还得根据垃圾评论继续调整,debug的过程永无止境。
我感觉会了代码,人生才算是有了主动权。