admin 发布的文章

// todo 获取当前位置经纬度
        handleLoacation(toast) {
            uni.getLocation({
                type: 'gcj02',
                success: res => {
                    console.log('success')
                    // 获取到经纬度后根据实际业务做处理,下面业务逻辑仅供参考

                    // 1、先把经纬度存入缓存中
                    // this.setLocation(res)
                    // 2、获取到经纬度后再请求对应数据
                    // this.getData()
                },
                fail: err => {
                    // 判断是否获取到了定位
                    // this.isLocation = false

                    // 根据不同需求做了两种类型提示,需要根据实际业务修改
                    if (toast) {
                        // this.$u.toast是用的框架里封装的弹出消息
                        let msg = '您已拒绝授权,相关功能会无法使用!'
                        console.log(dayjs().format('YYYY-MM-DD HH:mm:ss'), msg)
                        this.$u.toast(msg)
                        return
                    }
                    //用户已授权,但是获取地理位置失败,提示用户去系统设置中打开定位
                    uni.showModal({
                        title: '提示',
                        content: '请在系统设置中打开定位服务,重新进入小程序!'
                    })
                }
            })
        },
        // todo 定位获取位置信息授权逻辑
        getLocation() {
            let that = this
            // wx.getSetting是获取用户授权的信息的,除了应用在位置信息授权还能应用在用户信息授权等等
            uni.getSetting({
                success: res => {
                    console.log('获取用户的当前授权设置', res.authSetting)
                    // 微信返回 {scope.userLocation: false, scope.address: true, scope.invoice: true, scope.invoiceTitle: true, scope.userInfo: true}
                    // 支付宝返回 {location: false}
                    // 用户没有打开过小程序的位置授权设置时,支付宝没有location属性,微信没有scope.userLocation属性
                    // true说明已经授权,如果还拿不到定位信息,说明用户的手机没开启定位功能
                    let location = undefined
                    // #ifdef MP-WEIXIN
                    if (res.authSetting.hasOwnProperty('scope.userLocation')) location = res.authSetting['scope.userLocation']
                    // #endif
                    // #ifdef MP-ALIPAY
                    if (res.authSetting.hasOwnProperty('location')) location = res.authSetting['location']
                    // #endif
                    if (location === true) {
                        console.log('已经授权,非第一次')
                        //授权后默认加载,直接获取定位
                        that.handleLoacation()
                    }
                    // location === undefined 代表用户未授权且第一次登陆
                    else if (location === undefined) {
                        // 如果用户是第一次登陆且未授权的情况,会直接弹窗请求授权
                        // 使用 getlocation 获取用户 经纬度位置
                        console.log('第一次登陆且未授权')
                        that.handleLoacation(true)
                    }
                    // 小程序检测到用户不是第一次进入该页面,且未授权
                    else if (location !== undefined && location !== true) {
                        console.log('不是第一次进入该页面,且未授权')
                        that.handleLocationPermission()
                    }
                },
                fail: err => {
                    let msg = '未知错误,请重新打开小程序!'
                    console.log(dayjs().format('YYYY-MM-DD HH:mm:ss'), msg)
                    uni.showModal({
                        title: '提示',
                        content: msg
                    })
                }
            })
        },
        // todo 请求用户授权地理位置信息
        handleLocationPermission() {
            let that = this
            uni.showModal({
                title: '是否授权当前位置',
                content: '需要获取您的地理位置,请确认授权,否则无法获取门店数据',
                success: res => {
                    // 如果点击取消则显示授权失败
                    if (res.cancel) {
                        let msg = '您已拒绝授权!'
                        console.log(dayjs().format('YYYY-MM-DD HH:mm:ss'), msg)
                        this.$u.toast(msg)
                    }
                    // 如果点击确定会打开授权页请求二次授权
                    else if (res.confirm) {
                        uni.openSetting({
                            success: data => {
                                console.log('调起客户端小程序设置界面,返回用户设置的操作结果', data.authSetting)
                                // 微信返回 {scope.userLocation: false}
                                // 支付宝返回 {location: false, userInfo: false}
                                let location = undefined
                                // #ifdef MP-WEIXIN
                                if (data.authSetting.hasOwnProperty('scope.userLocation')) location = data.authSetting['scope.userLocation']
                                // #endif
                                // #ifdef MP-ALIPAY
                                if (data.authSetting.hasOwnProperty('location')) location = data.authSetting['location']
                                // #endif
                                if (location === true) {
                                    let msg = '授权成功'
                                    console.log(dayjs().format('YYYY-MM-DD HH:mm:ss'), msg)
                                    uni.showToast({
                                        title: msg,
                                        icon: 'success',
                                        duration: 2500
                                    });
                                    //再次授权,调用getLocationt的API
                                    that.handleLoacation()
                                } else {
                                    let msg = '授权失败'
                                    console.log(dayjs().format('YYYY-MM-DD HH:mm:ss'), msg)
                                    this.$u.toast(msg)
                                }
                            }
                        })
                    }
                }
            })
        },

主配置

# 查看日志文件状态
SHOW MASTER STATUS;
# 刷新日志
flush logs;

从配置

# 停止同步线程
stop slave;  
# 设置同步参数
change master to 
master_host='123.123.123.123',
master_port=3306,
master_user='root',
master_password='root',
master_log_file='binlog.000001',
master_log_pos=1000;
# 启动同步线程
start slave;
# 显示同步状态
show slave status;
# 设置会话时间默认可为空,针对导入数据库结构
set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

先安装新版 试验性 独立运行环境(py3.7)

curl -sSO http://download.bt.cn/install/install_panel.sh && bash install_panel.sh

完成后,运行bt命令会报错geven
但是当我人去安装geven的时候会提示失败,因为geven依赖gevent-websocket
那么使用btpip先行安装它,之后根据提示安装

yum install gcc*** 这里是需要补编译环境忘记了
btpip install gevent-websocket
btpip install paramiko

尝试bt命令启动 没有报错提示后
检查防火墙状态,可以先把关闭防火墙关闭了

systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service

面板8888端口还是不能访问,我们还去要去看/www/server/panel/logs/error.log查看面板日志的报错
需要把这里的报错处理掉才可以启动面板

btpip install psutil
btpip install flask

之后启动面板就可以访问了

登录面板后有些openssl错误,需要要我们采用不同方式安装,这是重点

btpip install cryptography -i https://pypi.douban.com/simple --only-binary=:all:
btpip install pyopenssl -i https://pypi.douban.com/simple --only-binary=:all:

由于FcgidInitialEnv不能配置在directory中

可以使用FCGIWrapper属性实现变量

不设置PHPRC环境变量,php会自动加载php-cgi.exe所在目录中的php.ini配置文件,只要把对应版本的php.ini配置文件放到对应的php-cgi.exe所在目录即可。

你那种方式无法实现,fcgid文档里面早有相关说明,引用如下,可供参考。

  • 某些依赖于虚拟主机的设置或其他概念,例如 FcgidInitialEnv 或进程类,仅当它们具有不同的服务器名称时才能区分虚拟主机。 在 FcgidInitialEnv 的情况下,如果两个虚拟主机具有相同的服务器名称但不同的环境作为由 FcgidInitialEnv 定义,用于特定请求的环境将是为导致 FastCGI 进程启动的请求的虚拟主机定义的环境。

相关文章
https://segmentfault.com/q/1010000009744399

Apache httpd 不将 PHP 作为 mod_php 加载,Apache http server 通过 mod_fcgid 将 PHP 作为 FastCgi 程序运行,可以实现多个版本的 PHP 同时运行,甚至还可以为一个网站的不同目录运行多个版本的PHP.

FcgidWrapper "path/to/bin/php/7.3/php-cgi.exe" .php
FcgidInitialEnv PHPRC "path/to/php/7.3/"

FcgidWrapper 指令的第一个参数用来指定 php-cgi.exe 的路径和参数,其中的参数可以省略。如果 FcgidWrapper 指定的 php-cgi.exe 路径或者运行 php-cgi.exe 的命令行参数包含空格,必须将对应的值放在引号里面,引号可以嵌套。由于反斜杠在apache配置文件、shell等多种环境中都是转义符,要想将\作为字符传递,需要多次转义,当指定的值是路径时,这所以使用/代表路径中的\,也是因为\是转义符,如果转义不当,会导致配置的值为预期的结果不一样。

FcgidWrapper '"C:/Program Files/wuxiancheng.cn/php/7.3/php-cgi.exe" -d disable_function="chgrp,chown,exec,shell_exec,system"' .php


FcgidWrapper '"C:/Program Files/wuxiancheng.cn/php/7.3/php-cgi.exe" -d open_basedir="\'C:/Program Files/wuxiancheng.cn/server/www/\'"' .php
FcgidWrapper "'C:/Program Files/wuxiancheng.cn/php/7.3/php-cgi.exe' -d open_basedir=\\\\"'C:/Program Files/wuxiancheng.cn/server/www/'\\\\"" .php

FcgidInitialEnv PHPRC 用来指定运行 PHP 时的 php.ini 配置文件所在的文件夹路径,以及其他需要传递组 php-cgi.exe 的环境变量。

使用 FcgidWrapper 指令为每个 VirtualHost 配置不同的 FAST CGI 程序, 即 php-cgi.exe ,即可实现一个 apache httpd 服务器同时运行多个版本的 PHP. 还可以使用 FcgidInitialEnv PHPRC 设置不同的 php.ini 配置文件.

想要为不同的虚拟主机配置不同的 php.ini 配置文件,除了 FcgidInitialEnv PHPRC 指定 php.ini 所在目录以外,还可以通过为 php-cgi.exe 添加 -c 命令行参数实现,-c 后面的参数值可以是 php.ini 的路径,也可以是 php.ini 所在文件夹的路径,建议使用绝对路径避免出现找不到文件的情况。php 配置文件的文件名可以不是 php.ini,可以是任意文件名,比如 php.conf.

FcgidWrapper '"C:/Program Files/wuxiancheng.cn/php/7.3/php-cgi.exe" -c "C:/Program Files/wuxiancheng.cn/php/7.3/php.ini" -d display_errors=On' .php

php.exe 和 php-cgi.exe 命令行参数 -d 用来配置 PHP 的配置参数,此处配置的值会替换掉 php.ini 配置文件中相同参数的值。
php-cgi.exe 的其他命令行参数,可以在命令行窗口中运行 php-cgi.exe -help 查看。

相关文章
https://www.51-n.com/t-4615-1-1.html