闲者博客 - 技术分享 https://bk1314.com/category/jsfx/2.html zh-CN Thu, 12 May 2022 15:49:00 +0800 Thu, 12 May 2022 15:49:00 +0800 魔方云节点最新安装方法 安装出现内核系统崩溃的可以选择下面方式 https://bk1314.com/92.html https://bk1314.com/92.html Thu, 12 May 2022 15:49:00 +0800 飞鱼 [scode type="yellow" size=""]魔方云安装教程地址:https://www.idcsmart.com/wiki_list/355.html[/scode]

首先我们看下内核崩溃的样子

执行到下一面这步

由于魔方云节点安装必须内核要大于指定的,所以参考我们下面的方式升级内核不用脚本提示的那种升级避免系统内核升级安装出现系统崩溃

1.首先执行升级内核

yum -y update
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-lt

安装中途需要输入y就输入y

安装完毕后 输入下面查看内核

awk -F \' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

下面是执行列子:

[root@AG01-A10 ~]# awk -F \' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (5.4.192-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1160.62.1.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-4a6d0061d909481088e06e57a0cbfd2d) 7 (Core)

这里可以看到0选项的5.4.192 那么我们就选择这个最新的 版本最高了
然后执行下面语句
grub2-set-default '内核名字'

grub2-set-default 'CentOS Linux (5.4.192-1.el7.elrepo.x86_64) 7 (Core)'

然后执行完毕 重启机器

reboot

重启好了 记得去检查网卡

cd /etc/sysconfig/network-scripts

这个目录下的 一般网卡
ifcfg-XXXX0 格式 我们这边是ifcfg-ens255f0
然后打开 删除多余的IP dns 一般主的设置8.8.8.8 副的设置114.114.114.114
DEVICE="ens255f0"
ONBOOT="yes"
HWADDR="2C:60:0C:83:B3:90"
ARPCHECK=no
GATEWAY="110.115.4.65"
IPADDR="110.115.4.66"
NETMASK="255.255.255.192"
DNS1="8.8.8.8"
DNS2="114.114.114.114"
然后 我们修改成是这样了 记住哦 网卡名称不要随便修改哦
然后重启网卡 执行命令:

service network restart

重启成功 我们安装魔方脚本
一般机器没有wget 所以我们还需要执行下安装wget

yum -y install wget

或者 我们直接使用下面的方式 一键执行

yum -y install wget;wget https://mirror.cloud.idcsmart.com/cloud/scripts/install-zjmf-cloud -O install-zjmf-cloud && chmod +x install-zjmf-cloud && ./install-zjmf-cloud

然后就是一律正常安装魔方脚本了

]]>
0 https://bk1314.com/92.html#comments https://bk1314.com/feed/category/jsfx/2.html
centos7下搭建rsync+inotify实现单向数据实时同步 https://bk1314.com/68.html https://bk1314.com/68.html Wed, 04 May 2022 01:24:24 +0800 飞鱼 测试环境,centos7

分别ip为server1:192.168.0.5

            server2:192.168.0.6

需求:把server1的/home目录下全部同步到server2的/home目录。

注意,先要确定在server1和server2上有这两个文件夹。

yum update -y
yum -y install epel*
yum install -y groupinstall pcre-devel zlib-devel gcc gcc-c++ autoconf automake make pcre-devel zlib-devel
yum -y install pcre-devel ctags-etags openssl openssl-devel
yum install lz4* libzstd* xx* net-tools -y

在server2上增加防火墙873端口

firewall-cmd --add-port=873/tcp --permanent
firewall-cmd --reload

分别在两台服务器上下载安装rsync最新版,你可以去rsync官网下载,解压后并安装

(可能需要安装wget yum -y install wget)

wget https://download.samba.org/pub/rsync/src/rsync-3.2.3.tar.gz

tar zxvf rsync-3.2.3.tar.gz
cd rsync-3.2.3
./configure
make&&make install

1.先配置server2也就是192.168.0.6的目标服务器(新服务器)

创建rsync配置文件

vi /etc/rsyncd.conf

复制左边的代码文件

|

log file =/var/log/rloshubd.log
pidfile =/var/run/rloshubd.pid
lock file =/var/run/rloshub.lock
secretsfile = /etc/rsync.pass
motd file =/etc/rloshubd.Motd
[tlyan]
path = /home/
comment = tlyan
uid = root
gid = root
port=873
use chroot= no
read only =no
list = no
maxconnections = 200
timeout =600
auth users= tlyan
hosts allow= 192.168.0.5
hosts deny= 192.168.0.2
log file 日志文件位置,启动rsync后自动产生这个文件,无需提前创建pidfile pid文件的存放位置lock file 支持max connections参数的锁文件secretsfile 用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件motd file rsync启动时欢迎信息页面文件位置(文件内容自定义)[loshub] #自定义名称path rsync服务端数据目录路径comment 模块名称与[md]自定义名称相同uid 设置rsync运行权限为rootgid 设置rsync运行权限为rootport 默认端口use chroot 默认为true,修改为no,增加对目录文件软连接的备份read only 设置rsync服务端文件为读写权限list 不显示rsync服务端资源列表maxconnections 最大连接数timeout 设置超时时间auth users =认证用户,没用就是匿名hosts allow 允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开hosts deny 禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开

保存并退出后,创建用户名为tlyan用户密码为tlyan的认证文件,

或者:保存并退出后,创建用户名为tlyan用户密码为Beck的认证文件,

echo 'tlyan:tlyan ' >>/etc/rsync.pass

<br/><br/>

echo 'tlyan:Beck ' >>/etc/rsync.pass

设置权限

chmod 600 /etc/rsyncd.conf
chmod 600 /etc/rsync.pass

启动rsnc

rsync --daemon --config=/etc/rsyncd.conf

加入开机启动

echo "rsync --daemon --config=/etc/rsyncd.conf" >>/etc/rc.local
tail -1 /etc/rc.local
chmod +x /etc/rc.local

查看有无运行

ps -ef|grep rsync

成功以下

root       1528      1  0 13:57 ?        00:00:00 rsync --daemon --config=/etc/rsyncd.conf
root       1559   1481  0 14:01 pts/0    00:00:00 grep --color=auto rsync

2.配置源服务器也就是server1,192.168.0.5

配置rsnc文件

vi /etc/reyncd.conf

输入以下代码

log file = /var/log/rsyncd.log
pidfile = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
motd file = /etc/rsyncd.Motd
[loshub]
comment = loshub
uid = root
gid = root
port=873
保存并退出后,创建密码文件 
echo 'tlyan ' >>/etc/passwd.txt

<br/><br/>

echo 'Beck' >>/etc/passwd.txt

保存并退出,并给权限

chmod 600 /etc/passwd.txt

在server1上的/home目录里创建一个tlyan.txt文件并给权限

echo 'aaaaa ' >>/home/tlyan.txt
chown -R nobody:nobody /home/tlyan.txt

现在可以测试了

rsync -avH --port=873 --progress --delete -o -g /home/ [email protected]::tlyan --password-file=/etc/passwd.txt

rsync -avH --port=873 --progress --delete -o -g /home/ [email protected]::Beck --password-file=/etc/passwd.txt

<br/><br/>

现在到server2的/home/web目录里查看有没有tlyan.txt的文件

cd /home
ll

显示

-rw-r--r--. 1 nobody nobody 5 Sep  4 13:57 tlyan.txt

后面的就不关键了。。。。。。。

yum install git libtool* -y
cd /root
git clone  https://github.com/inotify-tools/inotify-tools.git
cd inotify-tools
sh autogen.sh
./configure
make&&make install

创建监控脚本

mkdir -p /inotify
vi /inotify/keep.sh

1输入以下代码,这个代码每次都是全备份,建议使用#2

#!/bin/bash
inotifywait -mrq --timefmt '%Y/%m/%d %H:%M' --format '%T %e %w%f' -e create,attrib,modify,moved_to,close_write,delete,move  /home/web/ |while read file
do
rsync -avH --port=873 --progress --delete -o -g /home/web/ [email protected]::loshub --password-file=/etc/passwd.txt
done

2,此源码来源于网络的(广州小朱)对于小文件优化的更好

#!/bin/bash
src=/home/web/                           # 需要同步的源路径
des=loshub                             # 目标服务器上 rsync --daemon 发布的名称,rsync --daemon这里就不做介绍了,网上搜一下,比较简单。
rsync_passwd_file=/etc/passwd.txt          # rsync验证的密码文件
host1=192.168.0.6                 # 目标服务器1
user=loshub                            # rsync --daemon定义的验证用户名
cd ${src}                              # 此方法中,由于rsync同步的特性,这里必须要先cd到源目录,inotify再监听 ./ 才能rsync同步后目录结构一致,有兴趣的同学可以进行各种尝试观看其效果
inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file         # 把监控到有发生更改的"文件路径列表"循环
do
        INO_EVENT=$(echo $file | awk '{print $1}')      # 把inotify输出切割 把事件类型部分赋值给INO_EVENT
        INO_FILE=$(echo $file | awk '{print $2}')       # 把inotify输出切割 把文件路径部分赋值给INO_FILE
        echo "-------------------------------$(date)------------------------------------"
        echo $file
        #增加、修改、写入完成、移动进事件
        #增、改放在同一个判断,因为他们都肯定是针对文件的操作,即使是新建目录,要同步的也只是一个空目录,不会影响速度。
        if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]         # 判断事件类型
        then
                echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'
                rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${host1}::${des}
                 #仔细看 上面的rsync同步命令 源是用了$(dirname ${INO_FILE})变量 即每次只针对性的同步发生改变的文件的目录(只同步目标文件的方法在生产环境的某些极端环境下会漏文件 现在可以在不漏文件下也有不错的速度 做到平衡) 然后用-R参数把源的目录结构递归到目标后面 保证目录结构一致性
        fi
        #删除、移动出事件
        if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
        then
                echo 'DELETE or MOVED_FROM'
                rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${host1}::${des} 
                #看rsync命令 如果直接同步已删除的路径${INO_FILE}会报no such or directory错误 所以这里同步的源是被删文件或目录的上一级路径,并加上--delete来删除目标上有而源中没有的文件,这里不能做到指定文件删除,如果删除的路径越靠近根,则同步的目录月多,同步删除的操作就越花时间。这里有更好方法的同学,欢迎交流。
        fi
        #修改属性事件 指 touch chgrp chmod chown等操作
        if [[ $INO_EVENT =~ 'ATTRIB' ]]
        then
                echo 'ATTRIB'
                if [ ! -d "$INO_FILE" ]                 # 如果修改属性的是目录 则不同步,因为同步目录会发生递归扫描,等此目录下的文件发生同步时,rsync会顺带更新此目录。
                then
                        rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${host1}::${des} 
                fi
        fi
done

如果需要有多个同步,使用#3此源码来源于网络的(广州小朱)对于小文件优化的更好

#!/bin/bash
src=/home/web/                           # 需要同步的源路径
des=loshub                            # 目标服务器上 rsync --daemon 发布的名称,rsync --daemon这里就不做介绍了,网上搜一下,比较简单。
rsync_passwd_file=/etc/rsyncd.passwd            # rsync验证的密码文件
host1=192.168.0.11                 # 目标服务器1
host2=192.168.0.12                 # 目标服务器2
user=loshub                            # rsync --daemon定义的验证用户名
cd ${src}                              # 此方法中,由于rsync同步的特性,这里必须要先cd到源目录,inotify再监听 ./ 才能rsync同步后目录结构一致,有兴趣的同学可以进行各种尝试观看其效果
inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file         # 把监控到有发生更改的"文件路径列表"循环
do
        INO_EVENT=$(echo $file | awk '{print $1}')      # 把inotify输出切割 把事件类型部分赋值给INO_EVENT
        INO_FILE=$(echo $file | awk '{print $2}')       # 把inotify输出切割 把文件路径部分赋值给INO_FILE
        echo "-------------------------------$(date)------------------------------------"
        echo $file
        #增加、修改、写入完成、移动进事件
        #增、改放在同一个判断,因为他们都肯定是针对文件的操作,即使是新建目录,要同步的也只是一个空目录,不会影响速度。
        if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]         # 判断事件类型
        then
                echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'
                rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${host1}::${des} &&         # INO_FILE变量代表路径哦  -c校验文件内容
                rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${host2}::${des}
                 #仔细看 上面的rsync同步命令 源是用了$(dirname ${INO_FILE})变量 即每次只针对性的同步发生改变的文件的目录(只同步目标文件的方法在生产环境的某些极端环境下会漏文件 现在可以在不漏文件下也有不错的速度 做到平衡) 然后用-R参数把源的目录结构递归到目标后面 保证目录结构一致性
        fi
        #删除、移动出事件
        if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
        then
                echo 'DELETE or MOVED_FROM'
                rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${host1}::${des} &&
                rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${host2}::${des}
                #看rsync命令 如果直接同步已删除的路径${INO_FILE}会报no such or directory错误 所以这里同步的源是被删文件或目录的上一级路径,并加上--delete来删除目标上有而源中没有的文件,这里不能做到指定文件删除,如果删除的路径越靠近根,则同步的目录月多,同步删除的操作就越花时间。这里有更好方法的同学,欢迎交流。
        fi
        #修改属性事件 指 touch chgrp chmod chown等操作
        if [[ $INO_EVENT =~ 'ATTRIB' ]]
        then
                echo 'ATTRIB'
                if [ ! -d "$INO_FILE" ]                 # 如果修改属性的是目录 则不同步,因为同步目录会发生递归扫描,等此目录下的文件发生同步时,rsync会顺带更新此目录。
                then
                        rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${host1}::${des} &&          
                        rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${host2}::${des}
                fi
        fi
done

给权

chmod 755 /inotify/keep.sh

这时可以放入后台进行测试

/inotify/keep.sh &

加入开机启动

echo "/inotify/keep.sh &" >>/etc/rc.local
tail -1 /etc/rc.local
chmod +x /etc/rc.local

重启进行测试。完成

]]>
0 https://bk1314.com/68.html#comments https://bk1314.com/feed/category/jsfx/2.html
日主题prov2(ripro-v2)修改对接欢聚云usdt支付 https://bk1314.com/65.html https://bk1314.com/65.html Fri, 15 Apr 2022 11:59:46 +0800 飞鱼 一.修改支付图标

文件存放在/wp-content/themes/ripro-v2/img/FyusdtPay.png

/wp-content/themes/ripro-v2/assets/css/app.css #6844行添加下面

.swal2-popup .pay-button-box .pay-item i.usdt {
    display: inline-block;
    width: 40px;
    height: 100%;
    vertical-align: middle;
    background: url(../img/FyusdtPay.png) center no-repeat;
    background-size: 40px 40px;
}

二.修改app.js文件

/wp-content/themes/ripro-v2/assets/js/app.js

直接贴出整段内容给大家看把

搜索"function select_pay_mode(t)"改成如下的:

function select_pay_mode(t) {
    Swal.fire({
        title: "",
        html: riprov2.pay_type_html.html,
        showConfirmButton: !1,
        width: 300,
        padding: 10,
        showCloseButton: !0,
        onBeforeOpen: () => {
            const e = Swal.getContent(),
                i = e.querySelector.bind(e),
                n = i("#alipay"),
                a = i("#weixinpay"),
                o = i("#iconpay"),
                r = i("#paypal");
                u = i("#usdt");
            n && n.addEventListener("click", () => {
                t.pay_type = riprov2.pay_type_html.alipay, to_pay_data(t)
            }), a && a.addEventListener("click", () => {
                t.pay_type = riprov2.pay_type_html.weixinpay, to_pay_data(t)
            }), r && r.addEventListener("click", () => {
                t.pay_type = riprov2.pay_type_html.paypal, to_pay_data(t)
            }),u && u.addEventListener("click", () => {
                t.pay_type = riprov2.pay_type_html.usdt, to_pay_data(t)
            }), o && o.addEventListener("click", () => {
                t.pay_type = riprov2.pay_type_html.iconpay, to_pay_data(t)
            })
        },
        onClose: () => {}
    })
}

三.修改支付后台配置栏目

/wp-content/themes/ripro-v2/inc/options/admin-options.php文件

1883行插入(搜索"易支付-支付宝"那行备注然后在上面插入)

// 欢聚云-usdt
        array(
            'id'      => 'is_usdt',
            'type'    => 'switcher',
            'title'   => '欢聚云(USDT通道)',
            'label'   => '欢聚云(USDT通道)',
            'default' => false,
        ),

        array(
            'id'         => 'usdt',
            'type'       => 'fieldset',
            'title'      => '配置详情',
            'fields'     => array(
                array(
                    'id'      => 'appid',
                    'type'    => 'text',
                    'title'   => '商户ID',
                    'desc'    => '',
                    'default' => '',
                ),
                array(
                    'id'         => 'token',
                    'type'       => 'text',
                    'title'      => '商户KEY',
                    'desc'       => '',
                    'default'    => '',
                    'attributes' => array(
                        'type' => 'password',
                    ),
                ),
                array(
                    'id'      => 'apiurl',
                    'type'    => 'text',
                    'title'   => '支付API地址',
                    'desc'    => '请填写你的易支付usdt-接口地址,格式为:https://api.hjyusdt.com/api.php记得协议和最后的/别少',
                    'default' => 'https://api.hjyusdt.com/api.php',
                ),

            ),
            'dependency' => array('is_usdt', '==', 'true'),
        ),

四.修改支付配置文件

/wp-content/themes/ripro-v2/inc/template-shop.php文件

搜索 "易支付-微信" 在下面一行插入

'66' => array('name' => '欢聚云usdt', 'sulg' => 'usdt'),

搜索"$_the_type == 'paypal'"在上面一行插入

    //欢聚云USDT

    if ($_the_type == 'usdt') {
        $yzfConfig = _cao("usdt");
        $ddh=$order_data['order_trade_no'];
        $appid=trim($yzfConfig['appid']);
        $token=trim($yzfConfig['token']);
        $money=$order_data['order_price'];
        $note=get_bloginfo('name');
        $notify_url=get_template_directory_uri() . '/inc/shop/usdt/notify.php';
        $return_url=get_template_directory_uri() . '/inc/shop/usdt/return.php';
        $name=$order_data['order_name'];
        $apiurl=trim($yzfConfig['apiurl']);
//下面是开始构造提交,上面为需要的数据
        $data = array(
            "appid" => "$appid",//你的支付ID
            "ddh" => "$ddh", //唯一标识 可以是用户ID,用户名,session_id(),订单ID,ip 付款后返回
            "money" => "$money",//金额元
            "note" => "$note",//自定义参数
            "notify_url" => "$notify_url",//通知地址
            "return_url" => "$return_url",//跳转地址
            "name" => "$name",//跳转地址
        ); //构造需要传递的参数
        ksort($data); //重新排序$data数组,数组按照键名进行升序排序
        reset($data); //内部指针指向数组中的第一个元素,把内部指针移动到数组的首个元素,即 Bill
        $sign = ''; //初始化需要签名的字符为空
        $urls = ''; //初始化URL参数为空
        foreach ($data AS $key => $val) { //遍历需要传递的参数
            if ($val == ''||$key == 'sign') continue; //跳过这些不参数签名
            if ($sign != '') { //后面追加&拼接URL
                $sign .= "&";
                $urls .= "&";
            }
            $sign .= "$key=$val"; //拼接为url参数形式
            $urls .= "$key=" . urlencode($val); //拼接为url参数形式并URL编码参数值

        }
        $query = $urls . '&sign=' . md5($sign .$token); //创建订单所需的参数
        $urls = "$apiurl?{$query}"; //支付页面

            echo json_encode(array('status' => '1', 'type' => '2', 'msg' => $urls, 'num' => $order_data['order_trade_no']));die;
        }

搜索"function _ripro_get_pay_type_html()" 修改整个子程序也可以自己对照修改

function _ripro_get_pay_type_html() {
    global $ri_pay_type_options;
    $is_alipay = $is_weixinpay = $is_iconpay = $is_cdkpay = $is_paypal =  $is_usdt = false;
    $alipay_type = $wxpay_type = $iconpay_type = $cdkpay_type = $paypal_type = $usdtl_type =  0;

    $is_login_user_no_pay = _cao('is_login_user_no_pay',false);

    foreach ($ri_pay_type_options as $k => $v) {

        $_type = $k % 10;

        //登录用户仅限站内余额购买资源
        if ( $is_login_user_no_pay && is_user_logged_in() && $_type !== 9 && is_singular('post') ) {
            continue;
        }

        //充值仅限在线充值
        if ( is_user_logged_in() && get_query_var('action') == 'coin' && $_type == 9 ) {
            continue;
        }

        //开通站内会员仅限在线支付
        if ( _cao('is_pay_vip_no_coin',false) && get_query_var('action') == 'vip' && $_type == 9 ) {
            continue;
        }

        //未登录用户不允许余额支付
        if ( !is_user_logged_in() && $_type == 9 ) {
            continue;
        }


        if (($is_alipay && $_type == 1) || ($is_weixinpay && $_type == 2) || ($is_paypal && $_type == 5) || ($is_usdt && $_type == 6)) {
            continue;
        }


        if ( !_cao('is_' . $v['sulg']) ){
            continue;
        }

        switch ($_type) {
            case 1:
                $is_alipay   = true;
                $alipay_type = $k;
                break;
            case 2:
                $is_weixinpay = true;
                $wxpay_type   = $k;
                break;
            case 5:
                $is_paypal   = true;
                $paypal_type = 55;
                break;
            case 6:
                $is_usdt   = true;
                $usdt_type = 66;
                break;
            case 9:
                $is_iconpay   = true;
                $iconpay_type = 99;
                break;
            default:
                # no...
                break;
        }

        if ($is_alipay && $is_weixinpay && $is_iconpay && $is_paypal && $is_usdt) {
            break;
        }

    }


    $html = '<div class="pay-button-box">';

    if ($is_paypal) {
        $html .= '<div class="pay-item" id="paypal" data-type="'.$paypal_type.'"><i class="paypal"></i><span>' . esc_html__('PayPal', 'ripro-v2') . '</span></div>';
    }
    if ($is_usdt) {
        $html .= '<div class="pay-item" id="usdt" data-type="'.$usdt_type.'"><i class="usdt"></i><span>' . esc_html__('USDT.TRC20', 'ripro-v2') . '</span></div>';
    }
    if ($is_alipay) {
        $html .= '<div class="pay-item" id="alipay" data-type="' . $alipay_type . '"><i class="alipay"></i><span>' . esc_html__('支付宝', 'ripro-v2') . '</span></div>';
    }

    if ($is_weixinpay) {
        $html .= '<div class="pay-item" id="weixinpay" data-type="' . $wxpay_type . '"><i class="weixinpay"></i><span>' . esc_html__('微信支付', 'ripro-v2') . '</span></div>';
    }


    if ($is_iconpay) {
        $html .= '<div class="pay-item" id="iconpay" data-type="' . $iconpay_type . '"><i class="iconpay"></i><span>' . esc_html__('余额支付', 'ripro-v2') . '</span></div>';
    }

    $html .= '</div>';
    return array('html' => $html, 'alipay' => $alipay_type, 'weixinpay' => $wxpay_type, 'paypal' => $paypal_type, 'usdt' => $usdt_type, 'iconpay' => $iconpay_type);
}

五.配置回调文件

/wp-content/themes/ripro-v2/inc/shop/usdt/notify.php(usdt文件夹不存在需要自己创建)异步通知文件内容如下:

<?php

/**
 * epay异步通知
 */

header('Content-type:text/html; Charset=utf-8');
date_default_timezone_set('Asia/Shanghai');
ob_start();
require_once dirname(__FILE__) . "../../../../../../../wp-load.php";
ob_end_clean();
if (empty($_GET)) {exit;}
$hjyusdtConfig = _cao('usdt');


//var_dump($hjyusdtConfig);
if (empty($hjyusdtConfig['appid']) || empty($hjyusdtConfig['token'])) {
    exit('no');
}
$jg=xy($_GET);
if ($jg) {
    // 处理本地业务逻辑
    if ($_GET['zt'] == 'SUCCESS') {
        //商户本地订单号
        $out_trade_no = $_GET['ddh'];
        //易支付交易号
        $trade_no = $_GET['fromuser'];
        //发送支付成功回调用
        $RiClass = new RiClass;
        $RiClass->send_order_trade_notify($out_trade_no, $trade_no);
        echo 'ok';exit();
    }
    echo 'no';exit();

} else {
    //验证失败
    echo "no";exit();
}
 function xy($data1){
    $hjyusdtConfig = _cao('usdt');
    $token=$hjyusdtConfig['token'];
    $data = array(
        "appid" => $data1['appid'],//你的支付ID
        "ddh" => $data1['ddh'], //唯一标识 可以是用户ID,用户名,session_id(),订单ID,ip 付款后返回
        "money" => $data1['money'],//金额
        "note" => $data1['note'],//自定义参数
        "name" => $data1['name'],//产品名称
        "fromuser"=> $data1['fromuser'],//付款方
        "transaction_id"=> $data1['transaction_id'],//转账id
        "zt"=> $data1['zt'],//付款状态
        "paytime"=> $data1['paytime'],//付款时间
    ); //构造需要传递的参数
    ksort($data); //重新排序$data数组
    reset($data); //内部指针指向数组中的第一个元素
    $sign = ''; //初始化需要签名的字符为空
    $urls = ''; //初始化URL参数为空
    foreach ($data AS $key => $val) { //遍历需要传递的参数
        if ($val == ''||$key == 'sign') continue; //跳过这些不参数签名
        if ($sign != '') { //后面追加&拼接URL
            $sign .= "&";
            $urls .= "&";
        }
        $sign .= "$key=$val"; //拼接为url参数形式
    }

    if(empty($token)){
        return false;
    }
    //echo $sign."<br><br>";
    // echo $sign."<br>";
    $jmsign=md5($sign.$token);
    $fhsign=$data1['sign'];
    //echo "这里是对比:获取的".$fhsign."-----现在加密的".$jmsign."<br>".md5($sign.$token)."<br>".$sign.$token."<br>";
    //die;
    if($fhsign==$jmsign){

        return true;
    }
    return false;
}

/wp-content/themes/ripro-v2/inc/shop/usdt/return.php(usdt文件夹不存在需要自己创建)同步通知文件内容如下:

<?php

/**
 * epay同步回掉
 */

header('Content-type:text/html; Charset=utf-8');
date_default_timezone_set('Asia/Shanghai');
ob_start();
require_once dirname(__FILE__) . "../../../../../../../wp-load.php";
ob_end_clean();

$orderNum = RiSession::get('current_pay_ordernum',0);
if (empty($orderNum)) {
    $orderNum = (!empty($_COOKIE["current_pay_ordernum"])) ? $_COOKIE['current_pay_ordernum'] : 0 ;
}


if(!empty($orderNum)){
    $RiClass = new RiClass;
    $order = $RiClass->get_pay_order_info($orderNum);

    // 有订单并且已经支付
    if (!empty($order) && $order->status == 1) {
        if (!is_user_logged_in() && _cao('is_ripro_v2_nologin_pay')){
            $RiClass->AddPayPostCookie(0, $order->post_id, $order->order_trade_no);
            RiSession::set('current_pay_ordernum',0);
        }
  
        if( $order->post_id>0 ){
            wp_redirect( get_the_permalink( $order->post_id ) );exit;
        }else{
            wp_redirect(get_user_page_url());exit;
        }
    }
}

wp_redirect(home_url('/'));exit;

echo 'success';exit();
]]>
0 https://bk1314.com/65.html#comments https://bk1314.com/feed/category/jsfx/2.html
关闭浏览器输入http强制跳转到https[适合谷歌内核的 一般都是比如360浏览器] https://bk1314.com/64.html https://bk1314.com/64.html Thu, 14 Apr 2022 18:01:43 +0800 飞鱼 关闭谷歌浏览器默认跳转https

浏览器地址输入:

chrome://flags/

然后搜索:

Omnibox Updated connection security indicators
然后 这个选择disabled 重启浏览器就好了
]]>
0 https://bk1314.com/64.html#comments https://bk1314.com/feed/category/jsfx/2.html
LINUX IPTABLES 服务器多IP解决循环出口IP,否则永远是主IP请求别人机器 https://bk1314.com/61.html https://bk1314.com/61.html Fri, 11 Mar 2022 21:22:00 +0800 飞鱼 希望:实现对外发送请求时,对方看到我的出口ip每次都是不一样的,多个ip轮训作为出口IP

方案:iptables的nth模块

more

一.查看防火墙状态

 service firewalld status

防火墙状态

(disabled 表明 已经禁止开启启动 enable 表示开机自启,inactive 表示防火墙关闭状态 activated(running)表示为开启状态)

安装iptables防火墙及操作:

yum install iptables-services

常用命令如下:

systemctl start iptables #启动

systemctl status iptables #查看运行状态

systemctl restart iptables.service #重启

systemctl stop iptables.service #停止

systemctl enable iptables.service #设置开机启动

systemctl disable iptables.service #禁止开机启动

iptables -F -t nat #清空nat规则 也就是下面的多IP设置的规则里面

二.查看服务器请求外网IP

curl icanhazip.com

多执行几次看看是不是同一个

三.要多IP服务器循环出口IP

 /sbin/iptables -t nat -I POSTROUTING -m state --state NEW -p tcp -m multiport --dports 80,443 -o eth0 -m statistic --mode nth --every 1 --packet 0 -j SNAT --to-source 122.52.62.33

#解释上面命令意思:
--dports 80,443意思80和443 意思请求别人的这些端口就循环IP
-o eth0 这个是你网卡 出口网卡哦
--every 1 这个数字1是代表第一条IP 如果你输入多次就每次数字叠加
--to-source 122.52.62.33  你多个IP其中一个IP

列如我现在添加第二条
/sbin/iptables -t nat -I POSTROUTING -m state --state NEW -p tcp -m multiport --dports 80,443 -o eth0 -m statistic --mode nth --every 2 --packet 0 -j SNAT --to-source 122.52.62.34

四.执行后记得需要保存

service iptables save

(好了 你可以尝试curl icanhazip.com看看 每次IP都不一样了,注意哦 防火墙需要启动哦)

]]>
0 https://bk1314.com/61.html#comments https://bk1314.com/feed/category/jsfx/2.html
解决CentOS6停止更新支持后yum源失效 https://bk1314.com/57.html https://bk1314.com/57.html Fri, 04 Mar 2022 22:11:53 +0800 飞鱼 最近CentOS 6已经停止更新支持,同时官方也把yum源删除了,目前CentOS 6系统使用yum命令安装软件包基本都是失败,因此需要更换yum源。

在ssh界面执行以下命令即可一键更换yum源为CentOS的Vault源(包括CentOS官方和阿里云的源):

wget -O /etc/yum.repos.d/CentOS-Base.repo http://file.kangle.odata.cc/repo/Centos-6.repo
wget -O /etc/yum.repos.d/epel.repo http://file.kangle.odata.cc/repo/epel-6.repo
yum makecache
]]>
0 https://bk1314.com/57.html#comments https://bk1314.com/feed/category/jsfx/2.html
LIUNX rz与sz上传下载文件 https://bk1314.com/56.html https://bk1314.com/56.html Thu, 03 Mar 2022 15:47:00 +0800 飞鱼 作中需要在 Linux 完成上传下载操作

sz下载

从Linux下载文件到本机 , 在Linux终端输入命令回车后,选择本地存储路径即可。

格式:

sz filename  下载文件filename
sz file1 file2  下载多个文件
sz dir/*   下载dir目录下所有文件

rz上传

从本地上传文件到 Linux,在Linux终端(xshell)输入命令回车后,选择本地要上传的文件即可,可一次指定多个文件

格式:

rz

注意:

如果Linux上没有安装过 lrzsz 安装包,则无法使用rz和sz命令.

可使用yum命令安装:yum install -y lrzsz

]]>
0 https://bk1314.com/56.html#comments https://bk1314.com/feed/category/jsfx/2.html
由于POST请求过大导致PHP7无法正常处理解决办法 https://bk1314.com/55.html https://bk1314.com/55.html Thu, 03 Mar 2022 15:40:00 +0800 飞鱼 概述

在巡检优化过程中,发现POST请求至PHP接口处理时,php服务无法读取到请求内容。
通过php.ini开启display_errors = Off后发现页面输出如下内容:

<br />
<b>Notice</b>: file_get_contents(): file created in the system's temporary directory in
<b>/var/www/html/api.php</b> on line <b>10</b><br />
<br />
<b>Warning</b>: file_get_contents(): Unable to create temporary file, Check permissions in temporary files directory. in
<b>/var/www/html/api.php</b> on line <b>10</b><br />

解决办法

由于sys_temp_dirupload_tmp_dir设置的临时目录不存在,mkdir后修改目录权限即可。

[scode type="share"]来源于:闲云博客[/scode]

]]>
0 https://bk1314.com/55.html#comments https://bk1314.com/feed/category/jsfx/2.html
liunx centos yum update kernel 命令方法 https://bk1314.com/54.html https://bk1314.com/54.html Thu, 03 Mar 2022 01:43:00 +0800 飞鱼 1.查看当前kernel版本

uname -r

2.查看已安装版本

rpm -q kernel

3.查看可升级kernel版本

yum list kernel

4.升级kernel版本

yum update kernel

5.删除旧的内核

方法一:安装yum-utls:

yum install -y yum-utils

设置你想要保留多少旧的内核,比如我想保留两个:

sudo package-cleanup --oldkernels --count=2

方法二:直接删除对应版本

rpm -e kernel-*

6.设置永久的内核安装数量

vim /etc/yum.conf

设置installonly_limit=2,2为数量

7.服务器重启后,使用前几步查看的信息会变为新的kernel版本信息

[post cid="53" /]

[post cid="52" /]

]]>
0 https://bk1314.com/54.html#comments https://bk1314.com/feed/category/jsfx/2.html
CentOS yum update 不升级内核版本方法 https://bk1314.com/53.html https://bk1314.com/53.html Thu, 03 Mar 2022 01:39:00 +0800 飞鱼 1.查看操作系统版本

[root@ser875814510906 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core) 

2.执行yum update 进行升级

# yum update
[root@ser875814510906 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

可以看到系统默认升级到了7.9版本

3.如果不想升级内核及系统版本,则在执行 yum update之前在 /etc/yum.conf 的 [main] 后面添加以下配置

exclude=kernel* 
exclude=centos-release*
  1. 这样,执行 yum update 后
[root@ser875814510906 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

还是原来的系统版本

4.还要一种直接命令实现不更新内核

yum -y upgrade

yum -y update:升级所有包同时,也升级软件和系统内核;
yum -y upgrade:只升级所有包,不升级软件和系统内核,软件和内核保持原样。

[post cid="54" /]

[post cid="52" /]

]]>
0 https://bk1314.com/53.html#comments https://bk1314.com/feed/category/jsfx/2.html