存档

作者存档

WordPress 代码高亮插件:Pure-Highlightjs(支持可视化下插入代码)

2018年8月24日 没有评论

Pure-Highlightjs 一个基于 Highlightjs 实现的 WordPress 代码高亮插件,支持 N 多种语言高亮,还提供多种主题。支持在 WordPress 可视化编辑模式下插入代码。

代码主页:

https://github.com/icodechef/Pure-Highlightjs

1、到代码主页,找到zip文件下载到本地

2,进入 WordPress 后台管理页面,“插件 》安装插件 》上传插件”,上传刚才下载的 ZIP 文件,然后安装。

3,安装完毕后,在已经安装的插件里启用 “Pure Highlightjs”。

4,可直接在可视化编辑界面点击“插入代码”按钮,然后选择代码类型,粘贴代码插入即可

nginx实现apache的功能php_admin_value open_basedir

2018年8月8日 没有评论

nginx实现apache的功能php_admin_value open_basedir

今天将apache下面的所有虚拟主机站点改成nginx+php-fpm模式运行
考虑到虚拟主机的安全性不受各个站点的影响,所以需要在nginx下实现和apache一样的功能:php_admin_value open_basedir
也就是所说的:防跨目录设置
在apache中,我们只要在加入php_admin_value open_basedir就可以实现
比如:站点路径为/www/webroot/aaa.com
那么就是:php_admin_value open_basedir “/www/webroot/aaa.com:/tmp”
加入tmp是为了不影响用户上传文件,因为会先往临时目录上传

接下来就要进入主题,如何在nginx实现apache的功能php_admin_value open_basedir

查阅了相关文档,本人推荐的实现方式只有1种,方便,快捷,可拓展
当然还有一种其次的推荐方式,先聊聊第一种推荐的吧

======================
第一种:

在每个虚拟主机的server {}的location ~ \.php$ {}中增加:
fastcgi_param PHP_ADMIN_VALUE “open_basedir=/www/webroot/aaa.com/:/tmp/”;
注意,nginx下面,如果你输入的是:aaa.com(而不是aaa.com/)(结尾有/),就会造成是模糊匹配
比如aaa.com额aaa.com.cn,这2个都可以有权限访问

保存,重启nginx+php-ftpm就可以实现效果了
但是,很不幸,如果你有多个虚拟主机站点,访问aaa.com一切正常,访问bbb.com会时而报错:
no input file specified

这个原因是你有多少个虚拟主机,就要把全部虚拟主机的server {}的location ~ \.php$ {}中增加上,不要只增加某一个
否则会报错:no input file specified

一开始我调试的时候,只加了一个aaa.com,其他没加,网上找了很多方法都不行,后来不知脑袋怎么就考虑到要把全部的加上。

===================
第二种:

这种方法不是很推荐,因为需要在每个网站的根目录下增加一个文件,不方便拓展和管理

在每个虚拟主机的根目录下,增加.user.ini文件
比如aaa.com/.user.ini
.user.ini文件的内容就是:
open_basedir=/www/webroot/aaa.com/:/tmp/

当然还需要开启php.ini中的2个参数
sudo vim /etc/php/5.6/fpm/php.ini
开启:
user_ini.filename
user_ini.cache_ttl

重启php-fpm就可以生效了,这个等于不用配置nginx,当然也可以不用重启php-fpm,等待user_ini.cache_ttl设置的时间后,自动生效

这种方法,如果需要把ftp给别人,或者当某个虚拟主机站点受到黑客的时候,会造成.user.ini被串改或者被删除,等待

所以,还需要将文件的权限设置下:
sudo chattr +i /www/webroot/aaa.com/.user.ini
这样ftp里面就无法修改,删除,重命名该文件
当你想要自己修改的时候,进入服务器
sudo chattr -i /www/webroot/aaa.com/.user.ini
就可以重新操作了(+和-参数的区别)
具体chattr命令的参数,可以自行百度

==========================

使用了第二种方法,可以只对某个虚拟主机增加.user.ini,其他虚拟主机访问的时候并不会出现报错:no input file specified
这点和第一种方法不一样,第一种方法必须要把所有的都加上,才能保证每个虚拟主机都能正常访问

ubuntu 18.04以后如何修改固定ip和固定dns

2018年8月7日 没有评论

ubuntu 18.04以后如何修改固定ip和固定dns这个问题可能刚接触18.04系统的还不知道怎么修改,我们都知道老版本可能很简单,就是修改:

sudo vim /etc/network/interfaces

输入类似:

输入:
auto eth0
iface eth0 inet static
address 192.168.2.1
gateway 192.168.2.254
netmask 255.255.255.0

就可以搞定了

但是自ubuntu 18.04开始,这样就不行啦,/etc/network/interfaces文件已经忽略

如果你先在ubuntu 18.04系统中使用固定ip,包括固定dns,请参考如下修改:

sudo vim /etc/netplan/50-cloud-init.yaml

代码:##################

# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init’s network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
enp4s0:
addresses: [61.191.56.18/24]
dhcp4: no
dhcp6: no
optional: true
gateway4: 61.191.56.1
nameservers:
addresses: [114.114.114.114,114.114.115.115]
version: 2

代码:##################

保存,然后执行:sudo netplan apply

搞定。

分类: ubuntu高手 标签: , ,

触发器报错The user specified as a definer root@ip does not exist

2018年7月27日 没有评论

如果你的某个表加了触发器TRIGGER,有可能莫名其妙的出现错误提示:
The user specified as a definer root@ip does not exist
这个问题可能是这样的,比如你有A服务器,A服务器的mysql用户中有用户名为root且host地址为:
localhost+127.0.0.1+%+固定ip(比如192.168.1.110),4个用户
你用远程连接连接了mysql,比如本地的ip是192.168.1.110,当你用192.168.1.110连接mysql的时候,创建的触发器TRIGGER(从上面4个用户中固定ip的优先级最高,所以这个时候使用的是root@192.168.1.110)
这个时候,创建触发器之后,会在information_schema库中的TRIGGERS表中DEFINER字段,增加相应记录;
值为:root@192.168.1.110
如果后来你把A服务器的root@192.168.1.110用户删除了,就会提示这个错误。

再比如,你是用其他ip链接mysql,则使用的是root@%这个用户链接,则值为:root@%
同样,你如果删除了root@%,也会出现错误

所以,我建议在创建触发器的时候,直接登录A服务器,用命令行创建触发器,这个时候,就会是:root@localhost
因为我们肯定要保证mysql用户中至少有root@localhost和root@127.0.0.1存在
这样后期添加其他或者删除其他用户,都不会影响触发器的执行,也不会报这个错误了。

另外提醒:登录服务器用命令行创建触发器,默认的时候用英文的分号(;)结束会报错,所以可以类似:

DELIMITER $
触发器语句
END$

这样完整的触发器语句才会被正确的执行,否则会报错
当然如果你用远程连接比如navicat连接,可以不用上面的语句,但是后期可能又会出现刚才的错误提示。
所以还是登陆服务器用命令行创建吧。

比如:

DELIMITER $

CREATE TRIGGER `copy` AFTER INSERT ON `infos` FOR EACH ROW BEGIN

INSERT INTO binfos SELECT * FROM infos WHERE id= NEW.id;

IF NEW.isyp=1 THEN
INSERT INTO cinfos SELECT * FROM infos WHERE id=NEW.id;
END IF;

END$

DELIMITER $
CREATE TRIGGER `update` AFTER UPDATE ON `infos` FOR EACH ROW BEGIN

IF NEW.isyp=1 THEN
DELETE FROM cinfos WHERE id=NEW.id;
INSERT INTO cinfos SELECT * FROM infos WHERE id=NEW.id;
END IF;

IF NEW.isyp=0 THEN
DELETE FROM cinfos Where id=NEW.id;
END IF;

END$

DELIMITER $
CREATE TRIGGER `delete` AFTER DELETE ON `infos` FOR EACH ROW BEGIN

IF OLD.isyp=1 THEN
DELETE FROM cinfos WHERE id=OLD.id;
END IF;

END$

php-fpm模式下间歇性无法获取不到$_SERVER或者$_REQUEST数据

2018年7月3日 没有评论

最近安装了一台新的服务器,nginx+php-fpm模式

使用过程中发现$_SERVER或者$_REQUEST(不排除$_POST或者$_GET)间歇性无法获取数据

但是只要重启php-fpm服务就可以解决,但是运行一段时间之后又会反复出现

由此分析应该为php-fpm问题(重启可以解决,个人推测为php-fpm进程问题),一开始以为是当前版本php的bug,后来降低php版本后依然存在,找了很多google资料,都没有遇到类似问题。

花了2天左右时间,对服务器软件配置文件参数逐一排查调试,都没有找到问题所在。

最后,只能从拓展插件上着手,暂时锁定了问题所在:

xcache拓展和opcache拓展建议只开启一个,似乎discuz里面用的是xcache,所以建议只安装xcache
在php-fpm模式下,如果同时安装xcache和opcache,会导致莫名其妙的$_SERVER或者$_REQUEST无法获取数据(间歇性)

所以个人推测:2个都用的话(双层cache)会导致php-fpm的部分进程假死,前段请求发送到假死的进程上后,则无法返回数据,当发送到没假死的进程就可以返回数据(当重启php-fpm服务又正常了)

关闭opcache拓展后,目前运行了近1.5天,已经没有发现此问题。

css.php