npm源修改
在使用npm安装项目时,默认源在国外,导致速度贼慢甚至安装失败,这时可以通过以下命令修改源:
临时修改永久修改npm --registry https://registry.npm.taobao.org install xxxnpm config set registry https://registry.npm.taobao.org
通过以下命令查看是否修改成功:
npm config get registry
LaTeX章节编号样式自定义
在使用Latex写文章时,经常不满足于默认的章节编号样式,故有自定义编号样式的需求,例如需要改成中文的编号等等。本文总结了一些常见编号样式的修改方法。
%section
%修改编号为数字
\renewcommand\thesection{\arabic{section}}
%修改编号为小写字母
\renewcommand\thesection{\alph{section}}
%修改编号为大写字母
\renewcommand\thesection{\Alph{section}}
%修改编号为中文数字(需要导入ctex宏包)
\renewcommand\thesection{\chinese{section}}
其他诸如subsection之类的同理操作即可。
WordPress接入支付宝登录
搞了半天才发现微信开放平台不让个人号申请接入,因此我转战阿里系平台,花了一天时间接入了支付宝用户oauth接口。
支付宝开放平台的文档写的很详细,但仍有一些细节不到位,若开发者没什么基础,接入会比较困难。
其实支付宝开放平台提供了许多已经写好的SDK,但这SDK文档不详细,我懒得学,因此我自己写了一个脚本用以接入支付宝oauth。
代码见此gist,其中包含两个文件:RSA2.php与alipay.php。
接入方法如下:
首先在支付宝开放平台申请一个网页应用,(选择自研服务->网页&移动应用),申请成功后会获取一个APPID,将这个APPID填入alipay.php文件开头的define('Ali_APPID','');当中。
支付宝接口的安全性体现在其每次发起请求必须附带一个签名(sign),验签通过即确保参数未被篡改,接下来我将粗略讲一下这个签名是怎么生成的。
首先在支付宝开放平台进入你的应用,选择应用信息,在开发信息栏目中可以看到一行“接口加签方式”,点击进入。
作为普通开发者,这里选择加签模式为“公钥”,加签模式为“SHA256w ...
PHP的openssl模块怎么开启
昨天在本地跑PHP代码时,遇到一句报错,相信不少朋友们也遇到过:
PHP Fatal error: Uncaught Error: Call to undefined function openssl_sign()
要使用这个函数必须在PHP中开启openssl模块,很多网上的博客大多会提到这样一种方法:在php.ini文件中增加一句extension=php_openssl.dll。
加了这句代码后,运行时仍报了一个warning:
PHP Warning: PHP Startup: Unable to load dynamic library 'php_openssl.dll'
后来研究发现在php.ini中有一行代码描述了PHP扩展所在路径:extension_dir = "${phphome}\ext",而变量${phphome}在我这儿并没有定义,这一点很多其他博客并没有提到,这应该是一个环境变量,不过我之前没有设置过,因此我在前面加了一句:phphome='e:\php-7.3.22',为我的PHP安装目录,问题解决。 ...
WordPress接入微博登录
现在不少WordPress站点都接入了第三方登录,第三方登录不仅安全性高,还降低了注册成本、提高了注册效率,有助于吸引更多用户。
微博作为中国最大的网络平台之一,有着庞大的用户人群,本文将提供WP网站接入微博登录的方法。
首先源代码来源于此仓库:
引用站外地址,不保证站点的可用性和安全性
wp-oauth
GitHub
这位大佬还提供了很多其他平台的第三方接入教程。由于这位大佬写的不是很详细,因此我在这给出一个菜鸟教程,同时在代码中补充了CSRF验证,其他方面也有少量修改。
经过我修改后的微博登录代码可以从这个gist拿。
第一步,请确保你拥有一个微博开放平台审核通过的网站应用,将其App Key与App Secret复制到文件开头的代码中:
define('WB_APPID','your_appkey');//appkey
define('WB_APPSECRET','your_ap ...
WordPress记录、显示文章阅读次数
在使用WP建站时,我们可能会需要知道文章的受欢迎程度,其可以体现于其他人阅读文章的次数。今天我就提供一种简单的用以给文章浏览量进行计数的功能。
思路是在head部分加载的过程中执行一个计数+1的动作,将计数存入数据库的wp_postmeta表。在需要时将表中对应数据读出来即可。
将以下代码加入functions.php:
function post_views(){
global $post;
$post_ID = $post->ID;
$views = (int)get_post_meta($post_ID, 'visitors', true);
return '阅读(' .$views .')';
}
function record_visitors()
{
$currentUser = wp_get_current_user();
if(empty($currentUser->roles) || !in_array('administrator', $currentUser->roles))
if (is_single() ...
WordPress小工具标签云参数自定义
WP小工具有一个自带的标签云功能,可以为访客提供站点常用的关键词列表,便于访客在站内进行搜索。
标签云的生成函数wp_tag_cloud位于/wp-includes/category-template.php文件中,提供的参数数组如下:
$defaults = array(
'smallest' => 8,
'largest' => 22,
'unit' => 'pt',
'number' => 45,
'format' => 'flat',
'separator' => "\n",
'orderby' => 'count',
'order' => 'DESC',
'exclude' => '',
'include' => '',
'link' => 'view',
'taxonomy' => 'post_tag',
'post_type' => '',
'echo' => true,
'show_count' => 0,
); ...
在网页底部添加动态运行时间
很多人都在各种博客网站底部看到过动态变化的运行时间,比如“本站点已运行100天21小时56分17秒”,那么要想添加这样一行内容其实非常简单,只要用到基础的JS。
在网站底部添加以下代码即可:
<span id="runtime"></span>
<script>function show_runtime(){window.setTimeout("show_runtime()",1000);X=new Date("6/29/2020 18:14:10");Y=new Date();T=(Y.getTime()-X.getTime());M=24*60*60*1000;a=T/M;A=Math.floor(a);b=(a-A)*24;B=Math.floor(b);c=(b-B)*60;C=Math.floor((b-B)*60);D=Math.floor((c-C)*60);runtime.innerHTML="运行时间:"+A+"天"+B+"小时"+C+"分"+D+"秒"}show_runtime();</script>
WordPress不支持中文用户名注册的解决方法
WP默认是不支持中文用户名的,但身为中国人这岂能忍,本文带给大家一种方法,让WP支持中文用户名注册。
WP对注册用户名的限制写在/wp-includes/formatting.php文件中,对应函数是sanitize_user,其中限制中文的原因来自下面代码:
if ( $strict ) {
$username = preg_replace( '|[^a-z0-9 _.\-@]|i', '', $username );
}
在$strict=true时该语句将所有的非ASCII字符全过滤掉了。解决方法如下:
在functions.php文件中加入以下回调函数进行过滤:
// 支持中文用户名注册
function zh_sanitize_user ($username, $raw_username, $strict) {
$username = wp_strip_all_tags( $raw_username );
$username = remove_accents( $username );
$username = preg_repl ...
Windows系统修复图标显示问题
相信不少人都遇到过软件图标突然显示不了的问题,对于这种奇葩情况,我们可以用下面方法进行修复:
新建一个文本文档,内容是以下代码:
taskkill /f /im explorer.exe
attrib -h -i %userprofile%\AppData\Local\IconCache.db
del %userprofile%\AppData\Local\IconCache.db /a
start explorer
保存为.bat文件,双击运行即可解决问题。
服务器SSH配置出错导致无法连接问题的解决
有时候在操作服务器的过程中,一不小心(或有意)动了SSH的配置文件,导致其崩溃,关闭连接后无法再一次连接。就这个问题,本文从我个人的经验来写一些解决方法。
傻瓜式方法,一般提供服务器的厂商都会提供一键重装系统的功能,如果没什么重要数据,重装系统可以解决100%的问题。
如果有备份,也可以直接恢复备份。
提供服务器的厂商一般会提供紧急救援连接,比如阿里云,我们可以通过救援连接登录服务器,然后修改配置文件,若不会修改配置文件或是因为其他配置问题导致的崩溃,直接重装SSH也是可以的,以下是操作过程:
sudo apt-get remove openssh-server openssh-client --purge -y
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get install openssh-server openssh-client
安装完成以后,简单修改一下配置文件:
sudo vi /etc/ssh/sshd_config
添加root密码登录的配置:
PermitRootLogin yes
Passw ...
一句命令部署WordPress
写了许多WordPress相关的文章,但迟迟没有写部署的方法,目前比较简单的部署方法有宝塔面板一键部署或直接使用WordPress应用镜像。
而考虑到宝塔面板需要额外预留大约0.5G内存且最近刚出来一个非常严重的数据库安全漏洞(无法预知以后还会不会有);直接装WordPress应用镜像过于无脑。因此我在这里介绍一条被很多人忽略的部署方法——使用docker。
关于docker软件的安装及容器的部署过程,我已经在ShareLaTeX部署中提过一次了,这里不再做特别详细的介绍。
WordPress容器的配置文件可以参考下面内容,并根据需求自行修改配置文件:
version: '3.1'
services:
WordPress:
image: WordPress
restart: always
ports:
- 80:80
environment:
WordPress_DB_HOST: db
WordPress_DB_USER: root
...
WordPress主题二次开发——子主题
在WP开发过程中,直接修改主题文件对主题进行美化是不妥的,因为若主题升级,一切又得重来,而子主题可以完美解决这一问题。子主题是指一个继承了另一个主题——父主题全部功能样式的主题,同时它允许你自己添加一些功能与样式。
创建一个子主题比较容易:
首先进入themes文件夹,该文件夹下放置了你全部的主题,找一个你希望继承的父主题文件夹,这里假设名为theme-parent,接下来创建子主题只需要两个步骤:
在themes文件夹下创建一个新文件夹,命名为theme-child(表示子主题的文件夹名,可任意命名)
进入子主题文件夹,创建一个文件:style.css,内容如下:
/*!
Theme name:Theme-Child
Template:theme-parent
*/
@import url('../theme-parent/style.css')
Theme name后面内容是你的子主题名称,Template后面填写父主题文件夹名,下面的url修改成父主题下的style.css的相对路径。
此时子主题已经制作完成,它和父主题一毛一样,因为我们没有加任何新的内容。若想加入新的函数, ...
Apache字体文件跨域问题
开启cdn加速后,我在浏览器中遇到了数十条类似下面的报错:
...has been blocked by CORS policy: No 'Access-Control-Allow-Origin'...
就是个CORS跨域问题,这里出问题的文件基本都是一些诸如ttf、otf什么的字体文件。相信各位都比较清楚跨域是啥、什么时候会产生跨域,这里不再多说。要解决这个问题也非常容易,这里针对apache(apache2)进行说明,nginx也类似。
首先登录apache2所在的服务器,跑一句命令:
a2enmod headers
开启mod_headers模块,然后重新加载配置:
/etc/init.d/apache2 force-reload
接下来打开站点的配置文件(.htaccess文件)
写入下面一段代码保存即可:
<FilesMatch "\.(ttf|otf|eot|woff|woff2|)(.*)">
<IfModule mod_headers.c>
Header set Access-Control-A ...
WordPress配置CDN加速
CDN(内容分发网络)可以根据用户的位置就近获取网站静态资源,降低网络的拥塞、减轻服务器压力。
这里我选择的平台依旧是阿里云,进入阿里云的控制台,找到CDN→域名管理→添加域名。(若想配置DCDN,前往阿里云DCDN控制台进行下面类似的操作即可。)
以cdn.fyz666.xyz为例,按上图进行配置以后,域名管理栏中就出现了你刚刚设置的加速域名,接下来根据需求需要进行DNS解析即可。
稍等片刻,解析记录就生效了。接下来就可以前往WordPress修改静态资源链接了。但一个一个修改实在是累,而且万一哪天不用cdn了还得改回来,就很麻烦,这里推荐一款WP插件:CDN Enabler
至此全站加速基本配置完了,还有一些小bug需要处理,例如字体文件被CORS跨域阻止。解决方法戳这里。
使用密钥登录SSH
由于使用密码登录ssh相对而言安全性差一点(而且每次都输密码太麻烦了),我们可以使用密钥进行ssh连接。
先在本地生成一对rsa密钥:
ssh-keygen -t rsa -m PEM -b 3072
随后一路回车即可。
接下来进入用户目录C://Users/用户名/,可以发现已经生成了一个.ssh文件夹。里面包含id_rsa和id_rsa.pub两个文件,其中后者是公钥文件。将公钥文件id_rsa.pub上传到服务器需要密钥登录的用户名文件夹的.ssh目录下(如果没有.ssh目录就自己创建一个),并将公钥文件重命名为authorized_keys,例如/home/user1/.ssh/authorized_keys。
现在在本地进行ssh连接:ssh user1@ip 已经默认使用密钥了。
接下来需要禁止该用户使用密码登录:
登录服务器修改/etc/ssh/sshd_config文件:
sudo vi /etc/ssh/sshd_config
添加下面内容(user1是禁用密码登录的用户名):
Match user user1
PasswordAuthenticati ...
Linux系统禁止root用户SSH登录
Root用户在linux系统中拥有至高无上的权力与地位,可以做任何你想做的事,因此若一旦被不怀好意的人暴力破解root用户的密码,服务器就会陷入危险境地。
(我的服务器:这么看得起我???)咳咳,虽然我的服务器不值得被其他人暴破,但流程还是要走一下的。阿里云的Linux服务器自带了一个可以在控制台无密码登录的admin用户,因此只要禁止root登录SSH即可。而我不太喜欢阿里云的远程连接界面,故又创了一个新用户。
禁止root用户登录的操作:
# 打开以下文件
sudo vi /etc/ssh/sshd_config
方法一方法二# 翻到文件最下面将这一项修改为no
PermitRootLogin no
# 重启sshd
sudo systemctl restart sshd.service
但这种方法过于简单粗暴,也直接限制了root的sftp登录,如果想让root用户仍可以登录sftp,则可以使用方法二。# 这一项不修改
PermitRootLogin yes
# 添加下面两行
Match user root
ForceCommand internal-sftp
# ...
WordPress登录提示Cookies被阻止的解决办法
有一天,我正常在前台登录窗口输入自己的账号密码,却得到了一个登录失败的提示,F12查看Network之后发现报错内容如下:
我根本没当回事,轻车熟路打开浏览器设置页面找到cookie设置,却发现根本没有阻止网页的cookie。
查遍资料,大多解决办法都是在wp-config.php文件中加一句诸如这样的代码:define('COOKIE_DOMAIN', $_SERVER['HTTP_HOST'] );
但这并没能解决我的问题,后来经过研究我发现原来是WP自带的登录功能会先判断浏览器是否支持cookie,若支持则添加一个cookie,该cookie存在时尚能正常进行登录。这个cookie长这样:
于是我在登录函数里加了一段js代码来判断浏览器是否支持cookie,若支持则添加上面的cookie:
if (!navigator.cookieEnabled){
alert('浏览器未支持cookie,请更换浏览器或解除对本站cookie的阻止');
return;
}
if ($.cookie('WordPress_test_ ...
Docker for Windows磁盘映像文件迁移
最近在windows 10系统上安装了docker,随手pull了几个镜像后,发现C盘空间锐减(少了1-2个G),心想其默认镜像存储空间铁定在C盘了,故得想办法将其揪出来,并修改一下默认路径。
查了好多资料,基本都表示windows版的docker是基于hyper-v虚拟机运行的,需要去修改hyper-v虚拟机的一个虚拟磁盘路径,但我找了一下发现我甚至连hyper-v虚拟机都没有创建。。。那是怎么运行起来docker的呢?
后来了解到我的docker版本是2.3.0.4,这一版本已经不依赖于hyper-v了,而采用了WSL 2这种我没听说过的东西。
用TreeSizeFree软件扫描了一下C盘之后在AppData下面找到了一个很大的Docker文件夹,文件夹内部文件结构大概是:Docker/wsl/data/ext4.vhdx。
这个ext4.vhdx就是一个磁盘映像文件,非常大。下面是将其转移的操作步骤:
停止docker
关闭WSL:wsl --shutdown
导出数据到随便哪个盘:wsl --export docker-desktop-data F:\docker-deskt ...
WordPress媒体库图片不显示问题的解决
先写一个相关的小插曲,今天上午起床后打开博客,发现导航菜单炸了:所有一级、二级菜单都变成了没有url的自定义链接,有些菜单的导航标签也消失了。
这个问题虽然令我诧异(WP群里的大佬们也都表示没见过这个问题,一度怀疑是主题bug),但好在十分容易解决,删除菜单重新添加一个就行了,我也没多想。
后来我打开媒体库,发现所有媒体图片都无法显示,而显示成一张默认图片:
不过原图片并没有删掉,通过图片链接访问完全没有问题。
突然想起昨天搞了一下数据库,会不会是这个原因呢,我一通仔细排查果然发现了端倪。
昨天在优化数据库时,看了这篇文章
该文章表示wp_postmeta这张表可有可无,我就随手清空了一下,却不想这一清空后果相当严重,不仅导致导航菜单直接乱套,所有链接都没了,还导致媒体库图片的数据全部无法显示。经过很长时间的排查才发现是因为清了这张表,这张表一定不能乱清空!!!得谨慎啊。
找到问题以后,感觉基本没啥快捷的恢复方法了,因此我选择直接恢复服务器三天前的快照,不然重新传图片实在是太麻烦了。
最后,学到的教训:
对于自己不了解的操作,一定要谨慎操作!!!
操作数据库前,一定要备份!!!