特色

今天修复了极验验证的wordpress插件

最近博客上的垃圾评论多起来了,感觉大部分都是毛子或者中东的黑客搞的鬼,于是想到给文章的评论框加一个验证码啥的,自己去写一个简单的验证码肯定是没问题的,但是想到极验验证的这种拖动滑块验证的效果体验更好,于是就在插件中心搜到了他们的插件,但是安装完后却不能生效。

把插件down了下来,结合他们官网的文档,发现插件确实存在一点问题:接口还是用的老的。于是对照着文档和他们提供的demo改了改,结果也跑起来了。

已经在极验验证官网联系了客服,他们说插件确实很久没更新了,现在已经在排期中。如果你需要现在就要用到该插件的话,我已经把修改过的插件代码传到Github上去了:

https://github.com/Jaggle/wp-geetest-3.0

修复WordPress 4.9.6的一点小问题

昨天发现WordPress 4.9.6可用了,但是比较忙,今天放假在家,随便看看自己的博客,顺便更新了一下,更新的内容对我来说似乎无关痛痒,但是发现了评论框上的一点小问题。

文章的评论框多了一个checkbox,checkbox的label上的文字是“Save my name, email, and website in this browser for the next time I comment.”。想了想应该就是WordPress更新添加的功能吧,但是为什么是英文的呢,检查了一下wp-content/languages/zh_CN.po文件,发现这一行文字的翻译还没加上去,那就手动处理一下吧:

下载一个软件,名字叫做Poedit(这个软件也是大名鼎鼎的游戏汉化工具,用起来非常的方便);然后将wp-content/languages/zh_CN.po这个文件用FTP等工具下载到本地后,用文本编辑器打开,在文件的末尾增加一行:

msgid ""
"Save my name, email, and website in this browser for the next time I comment."
msgstr "在当前浏览器保留我的昵称、邮箱和网站以便下次评论。"

保存后,用Poedit打开,然后直接点击菜单上的保存,这时你就可以看到这个.po文件的目录里多了一个.mo的文件,把这两个文件一并上传到服务器的wp-content/languages/目录替换掉旧的翻译文件,翻译这样就处理好了。

但是这行文字和前面的checkbox不在一行,看起来不是很美观,因为我的主题是用的TwentySixteen且经过自己的修改,虽然早上也一起更新了主题,但是对我当前的主题是没效果的,查找了一下,于是可以把那边的css代码复制到自己的模板中,在自己的style.css样式文件的末尾,添加这段代码即可恢复正常:

p.comment-form-cookies-consent label {
    display: inline;
    font-family: Merriweather, Georgia, serif;
    letter-spacing: 0;
    text-transform: none;
}

这样就算完成了,具体效果看本篇文章底部的评论框。

No supported encrypter found. The cipher and / or key length are invalid. – 解决办法

初次使用Laravel,对这个框架还不是很熟,项目拉下来后,提示以下错误:

No supported encrypter found. The cipher and / or key length are invalid.

解决办法为:

config/app.php文件中,找到类似的这行代码:

'key' => env('APP_KEY', 'SomeRandomString'),

将这里的SomeRandomString改成一个随意的32位的字符串,比如我的12345678901234567890123456789012(建议你改一个复杂一点的)

或者你也可以在项目的根目录创建一个名字为.env的文件,并且添加一行APP_KEY=12345678901234567890123456789012,下面是通过代码的方式操作:

# 首先 cd 到项目目录
echo 12345678901234567890123456789012 >> .env

bingo~

Apache路由重写

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

写了一个西部世界追剧脚本

简单写了一个脚本,将追剧结果发送到自己的邮箱中,目前还正常运行:

<?php

$current = file_get_contents(__DIR__ . '/cursor');
$current = str_replace("\n", '', $current);
$current = substr($current,0,1);

$next = $current+1;

$currentName = '第'.$current. '集';
$nextName = '第'.$next. '集';


#var_dump($currentName);die;

$html = file_get_contents('http://www.592meiju.com/video/7262.html');
$hasCurrent = strpos($html, $currentName);
$hasNext = strpos($html, $nextName);

if (empty($hasCurrent)) {
    exec('echo ""  | mail -s "西部世界报告:脚本异常" singviy@qq.com');
    exit();
}

if ($hasNext > 0) {
    $sub = '西部世界' . $nextName. '更新啦!';
    exec('echo ""  | mail -s "'.$sub.'" singviy@qq.com');
    file_put_contents(__DIR__ . '/cursor' , $next);
} else {
    $sub = '西部世界' . $nextName. '还没更新呢!';
    exec('echo ""  | mail -s "'.$sub.'" singviy@qq.com');
}

如何运行:

mkdir ~/west_world
vi ~/west_world/start.php # 复制以上代码
echo 3 > ~/west_world/cursor # 当前为播出到第3集

脚本需要服务器的mail能正常发送邮件,vi /etc/mail.rc修改你的配置,配置仅供参考:

set from=singviy@yeskn.com
set smtp=smtp.qq.com
set smtp-auth-user=singviy@yeskn.com
set smtp-auth-password=你的smtp服务的密码
set smtp-auth=login
set smtp-use-starttls
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

然后用crontab设置定时任务,我设置的每12小时查一次:

* */12 * * * php /root/west_world/start.php

Nginx中root指令和alias指令的区别

root指令和alias指令的作用都是将url path映射到对应的dir path上去。他们具体区别如下:

root指令

root指令映射到的目标路径是root+location的结果:

location /data/ {
    root /var/www;
}

这段代码匹配/data/index.html时成功,最后会响应/var/www/data/index.html中的内容。

alias指令

alias用于将匹配到的url映射到另外一个path:

location ^~ /.well-known/acme-challenge/ {
    alias /var/www/challenges/;
    try_files $uri =404;
}

这段代码在匹配/.well-known/acme-challenge/data/test.html时成功,最后会响应/var/www/challenges/data/test.html中的内容,注意:最后查找的path不包含location中的内容。

注意,alias指令需要location的条件有个前缀匹配(即”^”这个符号),在下面这个例子中:

location ~ /.well-known/acme-challenge/ {
    alias /var/www/challenges/;
    try_files $uri =404;
}

这将不会有任何意义,它会将所有包含/.well-known/acme-challenge/的url都指定到/var/www/challenges/这个目录,而不管这个url的其他内容(即不会像上面那样把url后面的data/test.html补充到alias指定的path上去)。