emlog pro 后台邮件通知不支持 Outlook 邮箱修复 技术文章
前言
缘起是博客的邮件通知插件突然挂掉了,在修的过程中,发现后台有个邮件通知功能,主要是用于找回密码,注册验证这类作用,测试了下也不行,就顺手修复了在此小计(水文)一篇
问题&解决
主要是 Outlook 邮箱的 SMTP 使用的是 STARTTLS:
STARTTLS,是一种明文通信协议的扩展,能够让明文的通信连线直接成为加密连线(使用SSL或TLS...
emlog 6.0特别版的BUG些 emlog
声明:本文仅供爱好者折腾参阅,且由于我这是我很久之前的手记,如有遗漏,表意不明的请多包涵。
一点关于安装出现错误编号2002的可能办法:
第一个就是发文章标签打不上之数据库标签表 emlog_tag
从emlog5.3.1升级过来或者是自己瞎折腾后发现发文章标签打不上或者没了的多半是这个原因。
gid 的值 开头和结尾必须是 英文逗号 不然 问的标签 不能存入 且...
emlog5.3.1升级到emlog6.0啦 emlog
今天登录后台发现有emlog6.0了,就去论坛看了下,结果那多这个懒虫并没有写emlog5.3.1升级到emlog6.0的脚本。不过在邻居星知苑哪里看到了,他也发布到了论坛里,这么勤劳,表扬一下,嘿嘿嘿-_- ,对比下emlog5.3.1和emlog6.0.0发现程序变化不大,主要是对tag标签进行了优化。如果经常关注emlog升级的朋友也许知道,我的邻居老司机-flyer在今年早些时候也搞过自制版和特别版的emlog6.0.升级步骤以及脚本如下:
升级方法:
1、确定程序是emlog5.3.1(本程序是对照5.3.1和6.0.0做的);
2、备份网站系统和数据库(非常重要);
3、把update.php上传到网站根目录,同config.php同一个目录;
4、浏览器访问update,按照提示输入数据库密码,确认等待升级完成;
5、上传emlog 6.0.0程序并覆盖,config.php和install.php不要上传。
6、进入博客后台,更新缓存,然后删除update.php
update下载地址:
emlog,连接数据库失败,请检查数据库信息,错误编号 2002 技术文章
今天起来发现博客打不开了,提示:连接数据库失败,请检查数据库信息,错误编号 2002。
首先看这个错误代码是2002,并不是emlog的配置文件有问题,因为从include/lib/mysql.php里面可以看到这个2002应该是MySQL本身出问题了,但是不一定,下面来排查是不是MySQL本身出问题了。
/**
* 内部实例对象
* @var object MySql
*/
private static $instance = null;
private function __construct() {
if (!function_exists('mysql_connect')) {
emMsg('服务器空间PHP不支持MySql数据库');
}
if (!$this->conn = @mysql_connect(DB_HOST, DB_USER, DB_PASSWD)) {
switch ($this->geterrno()) {
case 2005:
emMsg("连接数据库失败,数据库地址错误或者数据库服务器不可用");
break;
case 2003:
emMsg("连接数据库失败,数据库端口错误");
break;
case 2006:
emMsg("连接数据库失败,数据库服务器不可用");
break;
case 1045:
emMsg("连接数据库失败,数据库用户名或密码错误");
break;
default :
emMsg("连接数据库失败,请检查数据库信息。错误编号:" . $this->geterrno());
break;
}
}
if ($this->getMysqlVersion() > '4.1') {
mysql_query("SET NAMES 'utf8'");
}
@mysql_select_db(DB_NAME, $this->conn) OR emMsg("连接数据库失败,未找到您填写的数据库");
}
登上服务器,准备登录mysql,mysql -uroot -ppassword,报错如下:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
然后查看MySQL状态:
root@mrxn:/# service mysqld status
● mysqld.service - LSB: start and stop MySQL
Loaded: loaded (/etc/init.d/mysqld)
Active: active (exited) since Sun 2017-12-24 10:55:03 CST; 5min ago
Process: 536 ExecStart=/etc/init.d/mysqld start (code=exited, status=0/SUCCESS)
Dec 24 10:55:03 mrxn.guest mysqld[536]: Starting MySQL
Dec 24 10:55:03 mrxn.guest mysqld[536]: Couldn't find MySQL server (/usr/bin/mysqld_safe) ... failed!
Dec 24 10:55:03 mrxn.guest systemd[1]: Started LSB: start and stop MySQL.
注意看红色的部分,Couldn't find MySQL server (/usr/bin/mysqld_safe) ... failed! 现在可以进一步确定是MySQL本身出问题了。
问题原因就这与MySQL本身没有启动起来。我们先停止MySQL试试:service mysqld stop ,然后查看状态:
root@mrxn:/# service mysqld status
● mysqld.service - LSB: start and stop MySQL
Loaded: loaded (/etc/init.d/mysqld)
Active: inactive (dead) since Sun 2017-12-24 11:01:09 CST; 1s ago
Process: 1809 ExecStop=/etc/init.d/mysqld stop (code=exited, status=0/SUCCESS)
Process: 536 ExecStart=/etc/init.d/mysqld start (code=exited, status=0/SUCCESS)
Dec 24 10:55:03 mrxn.guest mysqld[536]: Starting MySQL
Dec 24 10:55:03 mrxn.guest mysqld[536]: Couldn't find MySQL server (/usr/bin/mysqld_safe) ... failed!
Dec 24 10:55:03 mrxn.guest systemd[1]: Started LSB: start and stop MySQL.
Dec 24 11:01:09 mrxn.guest systemd[1]: Stopping LSB: start and stop MySQL...
Dec 24 11:01:09 mrxn.guest mysqld[1809]: MySQL server PID file could not be found! ... failed!
Dec 24 11:01:09 mrxn.guest systemd[1]: Stopped LSB: start and stop MySQL.
然后Google搜索上面的红色关键词:Couldn't find MySQL server (/usr/bin/mysqld_safe) ... failed! ,借鉴这个的方法 http://www.cnblogs.com/olinux/p/5546371.html
查看MySQL的my.cnf 在那些位置存在:
root@mrxn:/# mysqld --verbose --help|grep my.cnf
2017-12-24 11:02:32 0 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.
2017-12-24 11:02:32 0 [Note] --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled
2017-12-24 11:02:32 0 [Note] mysqld (mysqld 5.6.37-log) starting as process 1867 ...
2017-12-24 11:02:32 1867 [ERROR] Can't find messagefile '/usr/share/mysql/errmsg.sys'
2017-12-24 11:02:32 1867 [Warning] Can't create test file /var/lib/mysql/mrxn.lower-test
2017-12-24 11:02:32 1867 [Warning] Can't create test file /var/lib/mysql/mrxn.lower-test
mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 2 - No such file or directory)
2017-12-24 11:02:32 1867 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
2017-12-24 11:02:32 1867 [Note] Plugin 'FEDERATED' is disabled.
mysqld: Unknown error 1146
2017-12-24 11:02:32 1867 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default
2017-12-24 11:02:32 1867 [Note] Binlog end
2017-12-24 11:02:32 1867 [Note] Shutting down plugin 'CSV'
2017-12-24 11:02:32 1867 [Note] Shutting down plugin 'MyISAM'
注意看红色的标注部分,没有那个文件或者路径。用ls -l /var/lib/ 查看下面确实没有mysql文件夹。
那么就新建一个mysql文件夹,并且设置好权限给mysql使用:
mkdir /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql/
然后删除多余的那个my.cnf :rm /etc/mysql/my.cnf
然后重启MySQL:service mysqld restart ,并且查看MySQL的状态:
root@mrxn:/# service mysqld restart
root@mrxn:/# service mysqld status
● mysqld.service - LSB: start and stop MySQL
Loaded: loaded (/etc/init.d/mysqld)
Active: active (running) since Sun 2017-12-24 11:09:00 CST; 5s ago
Process: 2121 ExecStop=/etc/init.d/mysqld stop (code=exited, status=0/SUCCESS)
Process: 2138 ExecStart=/etc/init.d/mysqld start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/mysqld.service
├─2153 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/mysql.pid
└─2992 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/l...
Dec 24 11:08:59 mrxn.guest systemd[1]: Starting LSB: start and stop MySQL...
Dec 24 11:08:59 mrxn.guest mysqld[2138]: Starting MySQL
Dec 24 11:09:00 mrxn.guest mysqld[2138]: ..
Dec 24 11:09:00 mrxn.guest systemd[1]: Started LSB: start and stop MySQL.
就OK了!
然后根据这个错误我发现了是有人在疯狂的扫描我的博客。。。醉了。。。但是我也不知道为嘛MySQL就抽风了,估计是死锁后我去重启,然后它就抽风了-_-|
emlog在nginx下设置伪静态的方法 emlog
今天把停了半年的博客又重新放出来了.换了个机器,故环境变了,不是apache了,之前的.htaccess配置在nginx下就没用了.所以就重新找到了方法,记录一下在nginx下设置emlog的伪静态规则:
引入自定义emlog伪静态nginx规则文件。假如没有emlog.conf文件,你可以在nginx配置文件夹里新建一个emlog.conf文件。内容如下:
location / { index index.php index.html; if (!-e $request_filename) { rewrite ^/(.+)$ /index.php last; } }
然后我们在nginx.conf引入这个伪静态规则即可.include emlog.conf;
然后重启nginx,service nginx reload .
简单修改emlog的checkcode.php给验证码增加干扰线和噪点 emlog
以下是在论坛看到ewceo的帖子里的,但是他并没有给出具体的代码,对于菜鸟们来说就不容易;
鉴于 @奇遇 的反垃圾评论插件(哪怕是最新3.5版)经常被非法侵入式清空设置并报错,也不知是啥BUG,只好亲自动手来反击显示为国外IP的长篇英文评论了
首先分析状况:咱EMLOG的所有文章评论表单都是使用一个相同的提交地址,只是将文章ID赋在一个INPUT之中,这就给了机器人可趁之机:提交地址固定的、验证码地址固定的(还TM特好识别),文章ID是数字的随机生成就好,EMLOG的评论表单被模似简直是史上最轻松啊!所以JS之类的手段在机器人面前都是渣……
8错,在尚无给力插件问世的情况下,治标治本的办法只有改内核文件了:
第1步:英文垃圾评论一大特色就是长篇的并夹杂着火星文字,所以必含中文这样的反制也弱爆了,comment_controller.php文件定义评论最大字符数居然为8000,这是干神马的节奏,很多文章都够不到4000字好吧,发条微博和说说都不能超140字,所以偶赶紧给改为几百压压惊,上千字的精彩评论偶不需要啊
完成第一步还得紧接着做第2步:额,斗个胆,EMLOG默认的验证码偶能吐个槽么,生成的文字中规中矩且颜色清晰好辨,根本就是鸡肋嘛,除了给真心评论的人制造一道坎外,简直就是垃圾评论机器人的帮凶,还有比这更好自动识别的验证码么?checkcode.php唯一可赞之处似乎是不涉及字体文件,代码也比较精炼,这是偶所喜欢的风格,因此就没给彻底换掉,只是加了一点代码:增加几个随机线条,文字颜色范围也弄宽了点(为了防止人眼难识别,增加了点击刷新)……
如此2招之后偶就已经开始坐等机器人了,别的没啥,偶就是在线时间多,突然发现与垃圾评论玩玩策略对抗也有点意思,话说机器人若玩不过偶就暂不上后招咯
学过php的人应该很容易修改,我在这里把我修改过的粗略代码贴出来,便于不会的朋友借鉴,也便于会的朋友给我指点:
<?php /** * Emlog图片验证码生成程序 * @copyright (c) Emlog All Rights Reserved * Modify By Mrxn * Emlog Site: http://www.emlog.net/ * Mrxn's Blog: https://mrxn.net/ */ session_start(); $randCode = ''; $chars = 'abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPRSTUVWXYZ23456789'; for ( $i = 0; $i < 5; $i++ ){ $randCode .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } $_SESSION['code'] = strtoupper($randCode); $img = imagecreate(75,25) or die("创建图像资源失败,请刷新页面"); $bgColor = isset($_GET['mode']) && $_GET['mode'] == 't' ? imagecolorallocate($img,245,245,245) : imagecolorallocate($img,255,255,255); $pixColor = imagecolorallocate($img,mt_rand(88, 245), mt_rand(55, 240), mt_rand(99, 200)); //画字符、大小 for($i = 0; $i < 5; $i++){ $x = $i * 13 + mt_rand(3, 7) - 2; $y = mt_rand(0, 3); $text_color = imagecolorallocate($img, mt_rand(100, 250), mt_rand(80, 180), mt_rand(90, 220)); imagechar($img, 5, $x + 5, $y + 3, $randCode[$i], $text_color); } //画干扰点 for($j = 0; $j < 240; $j++){ $x = mt_rand(0,100); $y = mt_rand(0,40); imagesetpixel($img,$x,$y,$pixColor); } //4条横斜线 for ($i=0; $i < 5; $i++) { $lineColor = imagecolorallocate($img, rand(50, 150), rand(50, 150), rand(50, 150)); $lineX1 = 0; $lineX2 = 80; $lineY1 = ($i + 1) * 8; $lineY2 = ($i + 1) * 15; imageline($img, $lineX1, $lineY1, $lineX2, $lineY2, $lineColor); } //4条竖斜线 for ($i=0; $i < 5; $i++) { $lineColor = imagecolorallocate($img, rand(50, 150), rand(50, 150), rand(50, 150)); $lineY1 = 0; $lineY2 = 30; $lineX1 = ($i + 1) * 8; $lineX2 = ($i + 1) * 15; imageline($img, $lineX1, $lineY1, $lineX2, $lineY2, $lineColor); } header('Content-Type: image/png'); imagepng($img); imagedestroy($img);
将以上代码保存为[code]checkcode.php[/code]放在 你网站根目录/include/lib/下 覆盖,然后重启Apache或者是Nginx 即可看到效果(当然需要后台开启验证码)。
为防止真正的读者不能识别验证码,请给验证码添加上 点击刷新 功能,
参考链接:给emlog5.3添加验证码刷新功能 https://mrxn.net/emlog-teach/242.html
[red]注:在进行DIY操作之前,请先备份相关文件,以防万一!本文基于emlog 5.31测试可行,理论上兼容所有版本,只要php版本不低于4[/red]
相关参考:
https://segmentfault.com/a/1190000002924386
http://bbs.emlog.net/thread-40567-1-1.html
对于反垃圾评论,也可以试试我这款插件:
https://mrxn.net/emlog-teach/emlog-math-comment-plugin.html
http://www.emlog.net/plugin/248
php判断某个日期是否为今天来高亮emlog当天发表的文章 PHP
先贴上简单的代码供大家参考:
<?php /** * PHP判断一个日期是不是今天 * @author Mrxn * @Blog https://mrxn.net/ */ echo '<meta charset="utf-8" />'; // 拟设一个日期 $a = '2015-12-19 10:10:10'; // 截取日期部分,摒弃时分秒 $b = substr($a,0,10); #或者是利用 gmdate()函数格式化,下面会有实例 // 获取今天的日期,格式为 YYYY-MM-DD $c = date('Y-m-d'); // 使用IF当作字符串判断是否相等 if($b==$c){ echo '是今天'; }else{ echo '不是今天'; } ?> <?php /** * PHP判断一个日期是不是今天 * @author Mrxn * @Blog https://mrxn.net/ */ echo '<meta charset="utf-8" />'; // 拟设一个日期 $a = '2015-12-19 10:10:10'; // 转换为时间戳 $a_ux = strtotime($a); // 转换为 YYYY-MM-DD 格式 $a_date = date('Y-m-d',$a_ux); // 获取今天的 YYYY-MM-DD 格式 $b_date = date('Y-m-d'); // 使用IF当作字符串判断是否相等 if($a_date==$b_date){ echo '是今天'; }else{ echo '不是今天'; } ?>
下面就是emlog中具体的利用了:
$nowtime = date('Y-m-d'); $endtime = gmdate('Y-m-d',$row['date']); $date = gmdate('m-d', $row['date']); $gid = $row['gid']; if ($is_list == "1") { $out .='<ul id="ul1">'; if ($nowtime==$endtime) { $out .= ' <li><span style="color:red;font-weight:bold" id="date">[' . $date . ']</span><a style="color:red;font-weight:bold" href="' . Url::log($row['gid']) . '" title="' . $row['title'] . '" ><span id="arrow">▪</span>' . $row['title'] . '</a></li> '; $out .='</ul>'; }else{ $out .= ' <li><span id="date">[' . $date . ']</span><a href="' . Url::log($row['gid']) . '" title="' . $row['title'] . '" ><span id="arrow">▪</span>' . $row['title'] . '</a></li> '; $out .='</ul>'; } }
效果如上图所示,当天发表的文章标题和日期为红色加粗,就是通过判断文章发表时间和当前时间是否为同一天,从而实施不同的css样式,达到想要的效果,当然,你也可以创新,自己修改,比如一周内更新的颜色,或者是几天内更新的又是什么颜色,只需要稍微修改一下if判断就好了。好了,就到这里了,如有什么疑问和建议,欢迎下方评论留言和我交流。
免费在线生成二维码API接口可以使用了,支持http和https PHP
本站在线二维码API接口 支持https和http 、支持 get 和 post 请求方式、
欢迎大家使用:普通http网站调用样例:http://api.mrxn.net/mrxnqrapi/api.php?data= + 文字/网址等内容 其实http的两个都可以使用的
需要使用https网站可以参看下面的调用方法:
https://mrxn.net/mrxnqrapi/api.php?size=4x4&data=mrxn.net 生成的二维码如下:
Mrxn二维码API参数说明
data:要转码的数据
level:默认L 纠错级别:L、M、Q、H
size:默认4 点的大小:1到10,用于手机端4就可以了
margin:默认1 边距 1到10
logo:默认为空 需要使用logo的请单独找我详谈!
作者:Mrxn Blog: https://mrxn.net Email:[email protected]
当然也有在线制作你喜欢样式的二维码:免费体验一下
制作初衷因为本站是https的,非https加密也是可以使用的,但是浏览器的绿色小锁就会显示感叹号,我这人有强迫症!而且但免费的网站很多的都不支持https,或者是很慢,果断觉得自己搞,问了@独狼一些,还有@php爱好者,最终自己搞定了。
下面给大家列出几个大家常用的国内外的免费在线生成二维码 API 的链接:
支持http的:
http://b.bshare.cn/barCode?site=weixin&url=https://mrxn.net
http://s.jiathis.com/qrcode.php?url=https://mrxn.net
http://qr.liantu.com/api.php?text=mrxn.net
http://api.k780.com:88/?app=qr.get&data=mrxn.net&level=L&size=6
最新发现的百度云盘的:http://pan.baidu.com/share/qrcode?w=150&h=150&url=mrxn.net
支持https的:
国外的:https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=mrxn.net
我自己的:https://mrxn.net/mrxnqrapi/api.php?data=mrxn.net
明月浩空的:https://limh.me/api/qrapibig.php?url=mrxn.net.jpg 他这个必须加括号里面的后缀才行(.jpg)
最新发现的百度云盘的:https://pan.baidu.com/share/qrcode?w=150&h=150&url=mrxn.net (不过加载了非加密的资源,强迫症就别用了!)
更多的二维码分享可以参看我这篇文章:https://mrxn.net/free/261.html
分享4个自动生成网址二维码图片的方法
emlog插件emlog-math-comment-plugin一款简单的防止垃圾评论的插件发布 emlog
emlog插件emlog-math-comment-plugin一款简单的防止垃圾评论的插件在Mrxn's Blog发布了,制作这款插件的原因是被广告骚扰严重,受不鸟了!先来看看她的样子:
就是简单的利用数学加减法和打钩确认法组合成的双验证,
打钩法,就不说了,很早以前就出来了,只不过都是通过修改模板文件来实现,移植性不强,集成插件,方便快捷!
数学加减法的验证是在看了某博客使用的wp上面有这个验证,感觉还不错,就移植到emlog上面来了,方便大家使用,对垃圾评论有一定的作用。
好了,多的不说了,使用方法:
下载插件压缩包,在后台直接上传,打开就可使用了,或则是下载压缩包后解压,上传解压后的文件夹到插件目录下,路径一般为:根目录/content/plugins/ ,上传完毕后,回到后台激活即可使用。
特别说明:
在更换模板前,请先停用此插件,否则或造成验证重复。停用插件后,需要清除浏览器缓存才能看到效果。
如果有重复验证,请按照以下步骤操作即可恢复正常:
1.停用插件
2.修改module.php,打开module.php搜索
<div style="position: relative;"><label 这样的代码,然后删除这两个div 之间的内容重新保存module.php即可。
3.如需再次重新使用,后台激活插件即可,其实在你更换模板或者是修改模板的时候,先停用插件就好了。
最后,在使用中,如有什么问题和建议,请在我的博客留言反馈。
插件下载:
Emlog 官方下载:http://www.emlog.net/plugin/248
本地下载:
因为论坛那多不知道干啥去了,已经两个月没有消息了,而且鉴于很多emer问我要,所以就干脆先发布了吧,就博主自己使用这一周来,广告就没看到了,但是,论坛有人说加法被破解了,不知道是不是真的哈,但是我确实没有收到广告,如果后面被破解了,我会尽快升级,修改验证机制的,其实不传播,自己使用就是最好的,就可以最大大降低被破解,一发布出去,广告知道了源码就难说了,哎 ,先不管了,先这样吧,博主这段时间也有事,有什么问题和建议,可以在这里评论反馈或者是留言板留言。
Apache下设置自动将http跳转到https方法 技术文章
今天有朋友问我怎么配置虚拟机,使其支持访问者打开首页时自动跳转到https,而非http,因为是虚拟机,重复-虚拟机,所以呢,配置服务器的那些方法不好使,搜索得到如下方法,利用修改 伪静态规则 文件- .htaccess ,使虚拟机也可以支持直接打开网站跳转到https,具体方法如下,在htaccess文件末尾添加如下代码即可实现:
RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
一行一条命令,其实就是利用伪静态将访问者跳转到443端口,从而实现了http到https的跳转。
注:此为虚拟机的方法,推荐使用服务器自己配置https,虚拟机的这样配置后,有可能导致蜘蛛不能抓取你的网站,对SEO不好,慎重选择!
操作前记得备份相关文件,以及数据!
服务器配置https方面可以参考如下文章:
emlog 使用ssl证书开启HTTPS安全访问三步曲
nginx配置ssl加密(单双向认证、部分https)
NginxRewrite规则判断普通用户与搜索引擎爬虫(UA)实现https跳转
SSL证书与Https应用部署小结