-- 创造无限可能

项目背景

1、项目属于二开项目
2、基础功能都有
3、后端使用的fastadmin

开发中遇到的问题

1、原始系统有些功能不能正常使用,但又不能另外加费用
2、客户一开始不愿意给预付款,但又急着想完成开发
3、客户期望参考飞zhu小程序开发,一开始设计了很多功能,但是后来和客户沟通这些功能实际用不上
4、开发对前端不熟,遇到问题不能快速处理

总结

1、二开项目的开发成本需要提高一些,主要是熟悉原始系统的成本,遇到问题开发起来会很南
2、利益一开始要谈好

场景

从mysql5.6导出数据,导入到mysql5.7的数据库

问题

mysql数据导入时报Incorrect date value: '0000-00-00' for column 'date' at row

问题分析

mysql5.7以上的版本默认不允许datetime格式的数据出现’0000-00-00’的情况

问题处理

修改数据库的mysql.int参数,添加以下代码
sql_mode="NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

注意:谨慎使用清空操作

语法

删除数据:delete from 表名 where id='1';,如果数据多,会慢
清空表:truncate table 表名:速度快,清空后无法恢复
删除表:drop table if exists 表名;

使用场景

软件开发中通常情况下是不需要使用到mysql函数的。有时候需要对原始数据处理的时候就需要用到一些mysql字符串处理函数

常用字符串截取函数

  • left(str, length),从左边第一位开始截取指定长度字符串
  • right(str, length) ,从右边第一位开始截取指定长度字符串
  • substring(str, index, length),从指定开始位置截取指定长度字符串,index从1开始,如果是负数,表示用右开始数
  • substring_index(str, dim, length) ,从指定字符位置开始截取指定长度字符串

1、如果不能全款,一定要用公积金买房,能剩下很多钱,不要看利率只低了一两个点

场景

使用window开发时候,会出现端口被占用的情况,导致应用打开不了
之前的应用没有正常关闭,导致端口一直被占用

解决方案

  1. 打开cmd命令行
  2. 查找占用端口的进程netstat -aon | findstr "端口号"
    netstat -aon:查询所有网络端口占用
    findstr "端口号":从上一步获得的数据中,过滤出符合要求的数据
  3. 终结进程 taskkill -pid 查到的PID
    有时候终结不了需要使用强制管理,添加/Ftaskkill -pid 查到的PID /F
    注意:强制结束进程前,请确保关闭的PID是否正确

知识拓展

  1. netstatnet+stat,网络统计,Netstat是在内核中访问网络连接状态及其相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。
    参数含义
    -a 显示所有socket,包括正在监听的。
    -n 以数字形式显示地址和端口号。
    -r 显示核心路由表,格式同“route -e”。
    -t 显示当前连接卸载状态。
    -v 显示正在进行的工作。
    -p proto 显示proto指定的协议的连接。
    -b 显示在创建每个连接或侦听端口时涉及的可执行程序。
    -e 显示以太网统计。此选项可以与 -s 选项结合使用。
    -f 显示外部地址的完全限定域名(FQDN)。
    -o 显示拥有的与每个连接关联的进程PID。
    -q 显示所有连接、侦听端口和绑定的非侦听 TCP 端口。
    -s 显示每个协议的统计。
    -x 显示 NetworkDirect 连接、侦听器和共享端点。
    -y 显示所有连接的 TCP 连接模板。无法与其他选项结合使用。
    
  2. findstr:搜索包含关键词的数据
    参数,不区分大小写
    /B 在一行的开始配对模式。
    /E 在一行的结尾配对模式。
    /L 按字使用搜索字符串。
    /R 将搜索字符串作为一般表达式使用。
    /S 在当前目录和所有子目录中搜索匹配文件。
    /I 指定搜索不分大小写。
    /X 打印完全匹配的行。
    /V 只打印不包含匹配的行。
    /N 在匹配的每行前打印行数。
    /M 如果文件含有匹配项,只打印其文件名。
    /O 在每个匹配行前打印字符偏移量。
    /P 忽略有不可打印字符的文件。
    /OFF[LINE] 不跳过带有脱机属性集的文件。
    /A:attr 指定有十六进位数字的颜色属性。请见 "color /?"
    /F:file 从指定文件读文件列表 (/ 代表控制台)。
    /C:string 使用指定字符串作为文字搜索字符串。
    /G:file 从指定的文件获得搜索字符串。 (/ 代表控制台)。
    /D:dir 查找以分号为分隔符的目录列表 strings 要查找的文字。
    

场景

接口可能重复请求,如果该接口涉及到数据的插入,可能导致数据的重复添加

解决方案

  1. 数据库建立唯一索引,在数据库层面防止数据重复插入
  2. 插入前做数据判断(通过redis实现),如果存在则禁止插入
  1. 数据库
  2. 最好原作者演示一遍
  3. 源代码
  4. 是否有其他配置:比如redis,rabbitMQ
  1. 数据库
  2. 最好原作者演示一遍
  3. 源代码
  4. 是否有其他配置:比如redis,rabbitMQ

问题

使用uview的案例组件,页面显示空白

问题分析

uview组件目前有两个版本,版本一和版本二不兼容

解决

查看自己使用的是什么版本的组件,确认后再使用

环境

服务器:centos7
运行环境:phpstudy+nginx

问题

重启nginx服务报错

nginx: [emerg] unknown directive "<IfModule" in D:/phpstudy_pro/**/public/nginx.htaccess:5

分析

nginx.htaccess文件的代码不是nginx的配置格式

解决

重新生成配置文件

  1. 涉及前后端分开的项目,一定要先做好前端原型,如果没有原型,优先需要做好前端
    前期分析不够的情况下,原型上可能会存在较大的问题,这时候已开发好的后端,就需要进行修改

  2. 在使用一个框架前,需要了解框架的常用功能的使用

  3. 需要把一些基础的功能模块化方便复用
    单图片上传
    多图片上传
    表单动态生成
    联动下拉框
    多级复杂选项选择
    日期工具集合:获取当前日期,获取一段时间后的日期,

项目完成主要有以下几个节点

1、有一个想法
2、分析想法是否可行
3、得出核心的需求
4、核心业流程图
5、系统流程图、数据字典、功能结构图、页面结构图
6、原型图
7、前端实现
8、后端接口实现
9、测试
10、发布上线

场景

在插入数据的时候,报错unknow column 'name' in 'New',也会在导入数据的时候出现

问题分析

插入数据触发了数据表的触发器,字段不存在,导致问题出现

解决

检查数据表的触发器

场景

项目开发完,需要对数据表的id重置为1

方法

ALTER TABLE 表名 AUTO_INCREMENT = 1;

问题描述

网站打开慢

问题分析

  • F12打开调试工具
  • 刷新页面,发现页面打开正常,怀疑只是第一次打开慢
  • 反复调试,确实只是第一次打开慢,出现这种情况原因可能是服务器有连接限制

    问题处理

  • 改用nginx服务或者是修改连接数限制

timer = window.setInterval(function() {}

  1. 找出关键词或明确关键词
  2. 如果是英文,需要知道对应的中文
  3. 明确该知识点的作用
  4. 知道使用场景
  5. 知道用法
  6. 写案例

例子

我们需要学习window.setInterval

  1. 关键词:window.setInterval
  2. 中文:每隔一段时间执行一次代码
  3. 作用:可以按照指定的时间调用函数,
    规则:setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。
  4. 常用场景:计时器,背景颜色切换,轮播图切换
  5. 用法
         timer = window.setInterval(function() {}
         计时器 = 函数每隔一段时间调用一次
    
  6. 实际例子
  • 案例一
    let timer
    timer = window.setInterval(function() {
      time++
    },1000//间隔一秒)
    
  • 案例二
    ```

```

document.getElementById(“timer”).innerHTML = time;

  1. 找出关键词或明确关键词
  2. 如果是英文,需要知道对应的中文
  3. 明确该知识点的作用
  4. 知道使用场景
  5. 知道用法
  6. 写案例

例子

我们需要学习getElementById("timer").innerHTML

  1. 关键词:getElementById innerHTML
  2. 中文:通过ID获取元素,获取ID标签内的HTML结构
  3. 作用:可以通过ID获取元素,获取ID标签内的所有元素,显示到网页上面
    1.规则:getElementById(“”) 方法通过ID获取ID标签内的内容
    2.修改dom元素内的内容
  4. 常用场景
    修改标签内容
  5. 用法
         document.getElementById("timer").innerHTML = time;
         修改id为timer元素内的内容
    
  6. 实际例子
  • 案例一
    ```
    <span id="timer">00:00</span>

document.getElementById(“timer”).innerHTML = time;
```

  1. 找出关键词或明确关键词
  2. 如果是英文,需要知道对应的中文
  3. 明确该知识点的作用
  4. 知道使用场景
  5. 知道用法
  6. 写案例

例子

我们需要学习Array.sort

  1. 关键词:Array.sort
  2. 中文:Array.sort
  3. 作用:可以按照自定义的规则对数组进行排序,如:升序,降序,其他自定义规则
    自定义规则:sort内的函数返回值小于0, firstElement排在secondElement前面; 返回值等于 0, firstElement,secondElement相等顺序无关要紧; 返回值大于 0, firstElement排在secondElement后面;
  4. 常用场景:排行榜,排名,按时间显示数据
  5. 用法
         新数组 = 久数组.sort([排序函数])
    
  6. 实际例子
  • 案例一
    var arr = [5,7,5,1,2,6,3,4,7]
    var arrNew = arr.sort() // 默认排序
    
  • 案例二
    var arr = [5,7,5,1,2,6,3,4,7]
    var arrNew = arr.sort(function(a,b){
    return a-b
    }) // 默认排序
    

环境

服务器:阿里云虚拟主机+nginx
后端框架:thinkphp5.1

问题

只有主页能打开,其他页面显示404

问题分析

  1. 这种情况一般是伪静态没有生效,尝试修改.htaccess问题,没有生效
  2. 确认运行环境为nginx,所以修改.htaccess文件没有生效

解决

  1. 打开虚拟主机控制台
  2. 左侧菜单-》高级环境配置-》NGINX设置
  3. 修改配置
location / {
    if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php?s=/$1 last;
        break;
    }
}

场景

现在有两个分支,一个主分支,一个开发分支,开发分支上有多次提交,现在只想合并某次提交到主分支

解决方案

可以使用 git cherry-pick 命令将指定的提交合并到主分支。

具体步骤如下:

  1. 切换到主分支:
git checkout main
  1. 查看开发分支的提交历史:
git log --oneline <dev-branch>

其中,<dev-branch> 是开发分支的名字。

  1. 找到想要合并的提交的 ID,复制它。

  2. 将复制的提交 ID 应用到主分支中:

git cherry-pick <commit-id>

其中,<commit-id> 是刚刚复制的提交 ID。

  1. 如果有冲突,手动解决冲突,然后进行提交:
git add <冲突文件>      # 添加已解决冲突的文件
git cherry-pick --continue    # 继续进行 cherry-pick 操作
  1. 完成 cherry-pick 操作后,将改动推送到远程仓库:
git push

这样就可以将某次提交从开发分支合并到主分支了。

1、编辑java文件Shop.java

//类名大写
class Shop{
    // 入口方法,不从属任何对象
    public static void main(String[] args){
        System.out.println('hello');
    }
}

2、编译 javac Shop.java,生成Shop.class文件
3、运行 java Shop,注意不要带class

1、编辑java文件Shop.java

//类名大写
class Shop{
    // 入口方法,不从属任何对象
    public static void main(String[] args){
        System.out.println('hello');
    }
}

2、编译 javac Shop.java,生成Shop.class
3、运行 java Shop.class

  1. 打开cmd
    输入:jshell

hello world
System.out.println("helle.world")

  1. 退出\exit

jvm: JVM是JavaVirtualMachine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
jre:Java Runtime Environment,简称JRE
jdk:Java Development Kit (JDK) 是Sun公司(已被Oracle收购)针对Java开发员的软件开发工具包

J2EE的全称是Java 2 Platform Enterprise Edition,Java2平台企业版
它是由SUN公司领导、各厂家共同制定的工业标准,或者说,它是在SUN公司领导下,多家公司参与共同制定的企业级分布式应用程序开发规范。J2EE是市场上主流的企业级分布式应用平台的解决方案。

使用场景

在熟悉新项目或者二开项目的时候,有时为了查询某个字段在哪个数据表

mysql、Oracle数据库


(1)精确查询语句如下:

SELECT * FROM information_schema.columns WHERE column_name='column_name';

(2)模糊匹配查询

SELECT * FROM information_schema.columns WHERE column_name LIKE '%column_name%';

SQLServer数据库

SQLServer数据库查询带有某个字段的所有表名:

(1)精确查询语句如下:

SELECT [name] FROM [库名].[dbo].sysobjects WHERE id IN (SELECT id FROM [库名].[dbo].syscolumns WHERE name = '字段名')

(2)模糊匹配查询

SELECT [name] FROM [库名].[dbo].sysobjects WHERE id IN (SELECT id FROM [库名].[dbo].syscolumns WHERE name LIKE '%字段名%')

使用场景

有时候为了方便需要查询的结果拼接成语句以便执行;

concat

SELECT CONCAT("name=",name) AS name_str from table;

(1) 文本、图片等行内元素

<style>
    .parent {
        text-align: center;
    }
</style>
<div class='parent'>
    文本
</div>
<div class='parent'>
    <img src=''>
</div>

(2) 定宽块级元素

<style>
    .child {
        width:800px;
        margin: 0 auto;
    }
</style>
<div class='child'>

</div>

(3) 不定宽块元素

方法1:设置内容为行内元素,同(1)
方法2:table + margin

<style>
    .child {
        display: table;
        margin: 0 auto;
    }
</style>
<div class='child'>

</div>

方法3:float + relative

<style>
    .parent {
        float: left;
        position: relative;
        left: 50%;
    }
    .child {
        position: relative;
        left: -50%;
    }
</style>

方法4:absolute + transform

<style>
    .parent {
        position: relative;
    }
    .child {
        position: absolute;
        left: 50%;
        transform: translateX(-50%);
    }
</style>

(4) 多个块级元素(单个块级元素也可用)

方法1:inline-block + text-align

<style>
    .parent {
        text-align: center;
    }
    .child {
        display: inline-block;
        *display: inline;
        *zoom:1;
    }
</style>

方法2:flex + justify-content

<style>
    .parent {
        display: flex;
    }
    .child {
        justify-content: center;
    }
</style>

参考:https://www.jianshu.com/p/b591e2b4faee

场景

有时发送的请求太多没有返回,为了终止之前发送的请求。也可以设置请求的超时时间

$.xhrPool = [];
$.xhrPool.abortAll = function() {
    $(this).each(function(idx, jqXHR) {
        jqXHR.abort();
    });
    $.xhrPool = [];
};

$.ajaxSetup({
    beforeSend: function(jqXHR) {
        $.xhrPool.push(jqXHR);
    },
    complete: function(jqXHR) {
        var index = $.xhrPool.indexOf(jqXHR);
        if (index > -1) {
            $.xhrPool.splice(index, 1);
        }
    }
});

// Everything below this is only for the jsFiddle demo
$('#cancelBtn').click(function() {
    $.xhrPool.abortAll();
});

参考:https://blog.csdn.net/fay462298322/article/details/51910565

场景

有时发送的请求太多没有返回,为了终止之前发送的请求。也可以设置请求的超时时间

$.xhrPool = [];
$.xhrPool.abortAll = function() {
    $(this).each(function(idx, jqXHR) {
        jqXHR.abort();
    });
    $.xhrPool = [];
};

$.ajaxSetup({
    beforeSend: function(jqXHR) {
        $.xhrPool.push(jqXHR);
    },
    complete: function(jqXHR) {
        var index = $.xhrPool.indexOf(jqXHR);
        if (index > -1) {
            $.xhrPool.splice(index, 1);
        }
    }
});

// Everything below this is only for the jsFiddle demo
$('#cancelBtn').click(function() {
    $.xhrPool.abortAll();
});

GBK基础

中文名:汉字编码字符集
外文名:Chinese Internal Code Specification
GBK编码,是对GB2312编码的扩展,因此完全兼容GB2312-80标准。GBK编码依然采用双字节编码方案,其编码范围:8140-FEFE,剔除xx7F码位,共23940个码位。共收录汉字和图形符号21886个,其中汉字(包括部首和构件)21003个,图形符号883个。GBK编码支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。GBK编码方案于1995年12月15日正式发布,这一版的GBK规范为1.0版.

UTF-8基础

  • UTF-8是Unicode的一种实现方式,也就是它的字节结构有特殊要求,所以我们说一个汉字的范围是0X4E00到0x9FA5,是指unicode值,至于放在utf-8的编码里去就是由三个字节来组织,所以可以看出unicode是给出一个字符的范围,定义了这个字是码值是多少,至于具体的实现方式可以有多种多样来实现。

  • UTF-8是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。
    如表:
    1字节 0xxxxxxx
    2字节 110xxxxx 10xxxxxx
    3字节 1110xxxx 10xxxxxx 10xxxxxx
    4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    因此UTF-8中可以用来表示字符编码的实际位数最多有31位,即上表中x所表示的位。除去那些控制位(每字节开头的10等),这些x表示的位与UNICODE编码是一一对应的,位高低顺序也相同

  • 实际将UNICODE转换为UTF-8编码时应先去除高位0,然后根据所剩编码的位数决定所需最小的UTF-8编码位数。 因此那些基本ASCII字符集中的字符(UNICODE兼容ASCII)只需要一个字节的UTF-8编码(7个二进制位)便可以表示。二者字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1。

  • 至于UTF-8编码则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的论坛则用UTF-8节省空间。

    UTF-8与GBK的区别

  • GBK包含全部中文字符;UTF-8则包含全世界所有国家需要用到的字符。
  • GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准(好像还不是国家标准)
  • UTF-8编码的文字可以在各国各种支持UTF8字符集的浏览器上显示。
    比如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,而无需他们下载IE的中文语言支持包。 所以,对于英文比较多的论坛 ,使用GBK则每个字符占用2个字节,而使用UTF-8英文却只占一个字节。

  • UTF8是国际编码,它的通用性比较好,外国人也可以浏览论坛,GBK是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBK大。

  • UTF-8是一种国际化标准的文字编码,我们已知Windows系统程序已经将最初的UTF-8转向Unicode,而GBK的存在是为了中国国情而创造的,不过GBK也将伴随着中文字符的一直流传下去。

  • GBK的文字编码是双字节来表示的,即不论中、英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1。

  • 至于UTF-8编码则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的论坛则用UTF-8节省空间。

  • UTF-8编码的文字可以在各国各种支持UTF8字符集的浏览器上显示。

  UTF-8版本虽然具有良好的国际兼容性,但中文需要比GBK/BIG5版本多占用50%的数据库存储空间,因此并非推荐使用,仅供对国际兼容性有特殊要求的用户使用。

  总结:

  GBK就是在保存你的帖子的时候,一个汉字占用两个字节。外国人看会出现乱码,此为我中华为自己汉字编码而形成之解决方案。

  UTF8就是在保存你的帖子的时候,一个汉字占用3个字节。但是外国人看的话不会乱码,此为西人为了解决多字节字符而形成之解决方案。

  ASCII(ISO-8859-1)是鼻祖,最简单的方式,字节高位为0。

  GB2312、GBK、GB18030,这几个是中文编码方式,并向下兼容。GB2312包含7000多个汉字和字符,GBK包含21000多个,GB18030更厉害,到了27000多个。他们都是用2个字节来表示一个汉字。跟ascii是怎么区分的呢?如果高字节的高位为1(也就是高字节大于127),就表示是汉字,低字节并无明显特征。

  Unicode是统一编码,它建立了一个全世界统一的码表。世界上的所有文字,在这张码表中都是唯一的。

  UTF-8是Unicode的一种存储、传输方式。它将整个Unicode码表分为3部分。

  0000 - 007F 这部分是最初的ascii部分,按原始的存储方式,即0xxxxxxx。

  0080 - 07FF 这部分存储为110xxxxx 10xxxxxx。

  0800 - FFFF 这部分存储为1110xxxx 10xxxxxx 10xxxxxx。

  因此,一个汉字究竟被存储为什么,就需要:先查unicode码表,然后根据在码表的位置进行计算。例如:“电”字,在码表中是3575,计算成utf8就是E794B5,而在GB2312的码表中为B5E7。

  UTF-8的好处:兼容ASCII,存储英文文件都是单字节,文件小。当然,当以存中文为主时就变成了3字节编码了,比GB系列还大!如何标明一个文件是utf8格式呢?这个标记是可选的:EF BB BF。比如,用windows自带的记事本创建一个utf8格式的文件,就会加上这个标记。但是,如果用ultraedit创建utf8文件,并不会加上这个标记。这个标记有个术语,叫做BOM(Byte Order Mark)。不带BOM的utf8文件和GB2312文件怎么区分呢?我也不知道。唯一能想到的办法就是:先用一种试,如果出现乱码,就用另一种再试。

  简言而知,GBK编码方式的编码是以中国国情而创造的,在国际上的兼容性不好,这也是为什么大多数的网页是使用UTF-8编码而不是GBK。

版权声明:本文为CSDN博主「江月未来」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_52072846/article/details/121617621

背景

$configuration = Configuration::forSymmetricSigner(
    // You may use any HMAC variations (256, 384, and 512)
    new Sha256(),
    // replace the value below with a key of your own!
    InMemory::base64Encoded('YWFhc0pOU0RLSkJITktKU0RiamhrMTJiM2Joa211')
    // You may also override the JOSE encoder/decoder if needed by providing extra arguments here
);

使用jwt生成秘密的时候,报错Key provided is shorter than 256 bits, only 240 bits provided

问题分析

使用InMemory::base64Encoded时密钥少了四位字符,导致生成的密钥长度只有240

报错

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:71:19)
    at Object.createHash (node:crypto:133:10)
    at module.exports (\node_modules\webpack\lib\util\createHash.js:135:53)
    at NormalModule._initBuildHash (\node_modules\webpack\lib\NormalModule.js:417:16)
    at handleParseError (\node_modules\webpack\lib\NormalModule.js:471:10)
    at \node_modules\webpack\lib\NormalModule.js:503:5
    at \node_modules\webpack\lib\NormalModule.js:358:12
    at \node_modules\loader-runner\lib\LoaderRunner.js:373:3
    at iterateNormalLoaders (\node_modules\loader-runner\lib\LoaderRunner.js:214:10)
    at iterateNormalLoaders (\node_modules\loader-runner\lib\LoaderRunner.js:221:10)
    at \node_modules\loader-runner\lib\LoaderRunner.js:236:3
    at runSyncOrAsync (\node_modules\loader-runner\lib\LoaderRunner.js:130:11)
    at iterateNormalLoaders (\node_modules\loader-runner\lib\LoaderRunner.js:232:2)
    at Array.<anonymous> (\node_modules\loader-runner\lib\LoaderRunner.js:205:4)
    at Storage.finished (\node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:55:16)
    at \node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:91:9
node:internal/crypto/hash:71
  this[kHandle] = new _Hash(algorithm, xofLen);
                  ^

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:71:19)
    at Object.createHash (node:crypto:133:10)
    at module.exports (\node_modules\webpack\lib\util\createHash.js:135:53)
    at NormalModule._initBuildHash (\node_modules\webpack\lib\NormalModule.js:417:16)
    at handleParseError (\node_modules\webpack\lib\NormalModule.js:471:10)
    at \node_modules\webpack\lib\NormalModule.js:503:5
    at \node_modules\webpack\lib\NormalModule.js:358:12
    at \node_modules\loader-runner\lib\LoaderRunner.js:373:3
    at iterateNormalLoaders (\node_modules\loader-runner\lib\LoaderRunner.js:214:10)
    at Array.<anonymous> (\node_modules\loader-runner\lib\LoaderRunner.js:205:4)
    at Storage.finished (\node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:55:16)
    at \node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:91:9
    at \node_modules\graceful-fs\graceful-fs.js:123:16
    at FSReqCallback.readFileAfterClose [as oncomplete] (node:internal/fs/read_file_context:68:3) {
  opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}

Node.js v18.11.0

问题出现场景

框架:vue-element-admin
nodejs版本:18.11

问题原因

高版本的node.js由于一些严格的限制导致

问题解决

卸载高版本nodejs,安装16版本的nodejs

问题出现场景

框架:vue-element-admin
nodejs版本:18.11

问题原因

高版本的node.js由于一些严格的限制导致

问题解决

卸载高版本nodejs,安装16版本的nodejs

一.通过命令配置淘宝镜像

切换为淘宝镜像命令

npm config set registry https://registry.npm.taobao.org

切换原始镜像

npm config set registry https://registry.npmjs.org

查看当前使用的镜像地址命令

npm config get registry
#https://registry.npm.taobao.org

nodjs官网是:https://nodejs.org/en/download/, 但是国内下载可能慢
可以使用国内镜像网址:http://nodejs.cn/download/

版本兼容性问题

vue 只兼容ie8以上版本;

ie8及以下版本不支持Object.defineProperty方法,但这个是vue实现响应式的所必须的,所以从Vue的源码来看根本就无法支持IE8
2、IE 不兼容 axios的promiss对象;

在项目中使用了ES6 promise对象

安装:npm install es6-promise;
3、IE 不兼容es6语法;

IE不支持ES6语法

安装:npm install —save babel-polyfill;

配置:module.exports = { entry: [“babel-polyfill”, “./src/main.js”] };

main.js中配置:import ‘babel-polyfill’ //放在最顶部,确保全面加载。

http网络请求(跨域)

http 组件使用 axios,xios 对 ie9 版本以下跨域由前端项目打包的解决方案 webpack 代理webpack 的 devServer.proxy的功能实现。

devServer: {

    public: "",

    // 代理



    proxy: {

        "/api": {

            target: process.env.VUE_APP_USE_IP,

            changeOrigin: true,

        },

    },

},

IE浏览器下功能无效

1、dom.click()方法无点击事件进行下载ie认为是漏洞,判断下是不是IE浏览器,然后特殊处理:

let blob = 'xxx' // blob对象

if (!!window.ActiveXObject || 'ActiveXObject' in window) {

    window.navigator.msSaveBlob(blob, imgText + '.png')

} else {

    let a = document.createElement('a')

    a.setAttribute('href', URL.createObjectURL(blob))

    a.clock()

}

:IE11 中app.js报语法错误或者缺少‘:’ ‘等

     是因为文件里面还有ES6语法,需要转换,修改build/webpack.base.conf.js文件

   {

test:/.js$/,

    loader:"babel-loader",

    include:[

//把这个⽂件添加进去让他进⾏babel编译

resolve(

“node_modules/_vue-particles@1.0.9@vue-particles/src/vue-particles”

),

resolve(“src”),

resolve(“test”),

}

ie11打不开vue项⽬,报错 “对象不⽀持“addEventListener”属性或⽅法

在head标签中加⼊< meta http-equiv=“X-UA-Compatible” content=“IE=EDGE”/>这个属性主要是设置浏览器优先使⽤什么模式来渲染页⾯的。代码IE=edge告诉IE使⽤最新的引擎渲染⽹页,这个在需要兼容IE浏览器的情况下都可以加上这句话。

4、:IE 11 flex:1;样式会出错,跟实际想要的效果不同:

因为IE11 flex:1;会识别为flex:1 1 0;⽽其他浏览器是flex:1 1 auto;

所以改为width:100%;flex:1 1 auto; 或width:100%;flex-grow:1
4、elementui框架在ie9浏览器下的兼容性问题

1、el-select组件内在IE9中会出现下图样式错乱,解决办法:

// select框固定下拉箭头兼容ie9

.el-select .el-input .el-input__suffix .el-icon-arrow-up{

-ms-transform: rotate(180deg)\0;

}

2、IE9中elementui的message提示框会出现样式错乱,解决方法:

// 兼容ie9,使提示框显示正常, \0是让这条代码只在IE9中生效;

.el-message .el-message__content{

display: inline-block\0;

}

3、IE9中el-cascader组件下拉没有水平对齐,解决方法:

// ie9 el-cascader兼容性问题

.el-cascader-menulist .el-cascader-node .el-cascader-nodepostfix,

.el-cascader-menulist .is-active .el-cascader-nodeprefix{

top: 10px\0;

}

4、IE9日期组件样式问题解决方法:

/ 解决IE9 日期组件样式问题 /

.demonstration, .el-date-editor—datetimerange {

display: inline-block !important;

vertical-align: middle;

line-height: 24px;

}

5、IE9的弹性布局flex都会失效,凡是在IE9中使用flex的都需要改成float浮动布局或者使用display: inline-block;属性来纠正。

6、如果要想使某一行代码在IE9中生效那么只需在代码后面添加 \0 ,例如: float: left\0;
————————————————
版权声明:本文为CSDN博主「赵晓霞」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42459543/article/details/124987901

背景

使用Navicat导入数据表,报错:Incorrect datetime value: ‘0000-00-00 00:00:00’ for column ‘update_time’,

问题分析

因为update_time字段是datetime/timestemp类型,那么它的值不能为 ‘0000-00-00 00:00:00’

问题原因

具体出现这个问题的原因就是MySQL的配置不一致导致的。

问题处理

  1. 编辑配置文件:

    [mysqld]
    sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    
  2. 重启数据库

1、初始化git仓库

git init

2、设置仓库接受代码提交

允许远程提交代码

git config receive.denyCurrentBranch ignore

3、服务器端更新钩子

3.1 编辑钩子文件

vim .git/hooks/post-update
3.1.1 post-update文件内容
#!/bin/sh
unset GIT_DIR
cd ..
git checkout -f

3.2 设置文件权限

chmod +x .git/hooks/post-update

基础

i → Insert 模式,按 ESC 回到 Normal 模式.
x → 删当前光标所在的一个字符。
:wq → 存盘 + 退出 (:w 存盘, :q 退出)   (陈皓注::w 后可以跟文件名)
dd → 删除当前行,并把删除的行存到剪贴板里
p → 粘贴剪贴板
/ 字符串 全局搜索字符串
n 下一个匹配的结果
o 向上插入一行
O 向下插入一行

插入模式

a → 在光标后插入
o → 在当前行后插入一个新行
O → 在当前行前插入一个新行
cw → 替换从光标所在位置后到一个单词结尾的字符
  • 复制公钥到被管理机器
    ssh-copy-id -i ~/.ssh/id_rsa.pub 172.29.0.*
    
  • 禁用密码登陆
    PasswordAuthentication no  //修改为no
    
  • 启用密钥验证
    RSAAuthentication yes
    PubkeyAuthentication yes
    
  • 指定公钥数据库文件(默认、一般无需修改)
    AuthorizedKeysFile  .ssh/authorized_keys
    
  • 重启服务
    service sshd restart
    

场景:PHP系统有时候上传文件会报错,可能是php配置限制了上传大小

1、memory_limit内存设置限制

2、max_execution_time程序执行时间限制

3、post_max_size最大POST数据限制

4、upload_max_filesize最大上传文件大小限制

场景:支付场景情况下,需要对参数进行加密

问题:使用RSA对参数进行加密时,报错:

openssl_sign(): supplied key param cannot be coerced into a private

处理流程
1、检查是否时使用公钥
2、检查公钥是否一行显示,公钥文件通过都是多行显示
3、不需要填写文件头和尾,代码会对公钥进行拼接
4、检查代码里面的拼接是否正常,有的代码凭借的是

----BEGIN PRIVATE KEY----

实际上是

----BEGIN RSA PRIVATE KEY----


为了记录支付回调的信息,以便测试,可以再回调接口,添加记录,把回调信息记录下来,判断回调是否正常

if(strtolower($_SERVER['REQUEST_METHOD']) == 'post'){}  //判断是否POST提交


问题:设置captcha报错

    public function captcha()
    {
        $captcha_data = ThinkCaptcha::create(null, true);
        $captcha_id = md5(uniqid(null, true));
        // 验证码10分钟有效
        Cache::set($captcha_id, $captcha_data[ 'code' ], 600);
        return success(0, '', [ 'id' => $captcha_id, 'img' => $captcha_data[ 'img' ] ]);
    }

原因:captcha版本
解决:更新、降低captcha版本



安装

yun install openssl

打开openssl

openssl #打开
exit #退出

基础使用

genrsa -out rsa_private_key.pem 1024 #生成私钥
rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem


问题出现:

composer require 包名

出现报错:

Installation failed, reverting ./composer.json to its original content.

可能原因:
你安装的包依赖包A2.0,但由于另外一个包依赖包 A1.0,导致冲突。
解决:先移除包,再安装

composer remove 包名





场景:
composer版本对应的php版本过低,导致composer安装失败
解决:

1、删除原来的php版本

rm -f /usr/bin/php

2、关联新版本到跟命令

ln -sf php安装路径/bin/php /usr/bin/php



ln -s 源文件 目标地址        #建立软连接
ln 源文件 目标地址               #建立硬连接




问题分析:libonig.so.2不存在

可能原因:php版本升级、切换或者库名不对
解决:
1、检查库是否不存在、有可能存在其他版本的库文件

ll /usr/lib64/

2、安装库

yum install oniguruma - y
yum install libsodium -y

3、查看库是否下载

ll /usr/lib64/

4、如果存在其他版本的库文件

ln -s /usr/lib64/实际有的文件 /usr/lib64/libonig.so.2


composer require 包名 版本号

原因:php版本过高7.3,且代码中有相应的代码不支持7.3版本
解决:使用小于7.3版本的php

a标签添加download即可下载

<a href="下载地址" download="下载名称">名称</a>

a标签下载跨域文件


<a @click="downloadFile(fileUrl,fileName)">下载文件</a>

downloadFile(url, fileName) {
    var x = new XMLHttpRequest();
    x.open("GET", url, true);
    x.responseType = 'blob';
    x.onload=function(e) {
        var url = window.URL.createObjectURL(x.response)
        var a = document.createElement('a');
        a.href = url
        a.download = fileName;
        a.click()
    }
    x.send();
},

Xshell新建ssh会话使用秘钥登录时,导入密钥时提示:“用户秘钥导入失败”/“无法加载用户密钥”

原因:导入密钥为“OPENSSH密钥”,xshell仅支持“RSA密钥

解决:

在linux服务器上执行.

id_rsa 为openssh密钥
id_rsa.pem 为rsa密钥
yum install -y putty
puttygen id_rsa -o id_rsa.ppk
puttygen id_rsa.ppk -O private-openssh -o id_rsa.pem

原因:

没有安装fileinfo扩展

解决:安装fileinfo扩展

查看文件夹大小

du -sh –max-depth=1 *

zip -r 压缩文件名.zip -x "需要压缩的文件"

  • 防止文件被篡改:可检测 WP 核心文件、主题文件、插件文件是否被篡改、挂马、插后门。
  • 后门检测:可检测网站所有文件中是否含有数据库里已知的恶意脚本和代码。
  • 防火墙:可通过防火墙规则自动屏蔽正在从事危险行为的访客。 具备一定的防 DDOS 能力。
  • 防爆破:可防止黑客对后台密码进行暴力破解。
  • 清除缓存:媒体库里没使用的图片,过期的网站模板,插件,wordpress 的安装包等都可以有效的清除。
  • 评论安全:可检测评论中是否包含钓鱼网站等危险 URLs。
  • 隐藏 wordpress 版本号:当指定版本出现漏洞时,此功能可防止黑客批量搜索到你并进行入侵。
  • 密码安全:可检测用户的密码强度。
  • 您也可以在自己使用测试中去发现更多功能。


https://www.imydl.com/wzjs/3159.html

webshell 就是一种可以在 web 服务器上执行的后台脚本或者命令执行环境,黑客通过入侵网站上传 webshell 后获得服务器的执行操作权限,比如执行系统命令、窃取用户数据、删除 web 页面、修改主页等,其危害不言而喻。

暗链,指站点被黑客利用技术入侵,并且取得权限,经过代码的添加,实现隐藏的一个或者多个导出链接,站长以及管理员很难发现链接的存在。暗链的存在往往标志着该网站存在安全漏洞,轻则该网站会成为一些非法网站提升 seo 排名的工具,重则该漏洞会被不法分子利用攻击。

WebShellkiller 作为一款 web 后门专杀工具,不仅支持 webshell 的扫描,同时还支持暗链的扫描。这是一款融合了多重检测引擎的查杀工具。在传统正则匹配的基础上,采用模拟执行,参数动态分析监测技术、webshell 语义分析技术、暗链隐藏特征分析技术,并根据 webshell 的行为模式构建了基于机器学习的智能检测模型。传统技术与人工智能技术相结合、静态扫描和动态分析相结合,更精准地检测出 WEB 网站已知和未知的后门文件。

WebShellkiller3.3 版本在原来的基础上,优化了 webshell 检出规则,大大提高 webshell 检出率。同时支持敏感关键词的暗链检测,除了默认敏感词,用户可自行定义敏感词。


echo 1 > /proc/sys/vm/drop_caches

方法一: typeof

var arr = []
console.log(typeof arr ); 

方法二: instanceof

var arr = []
console.log(arr instanceof Array)

方法三: constructor

var arr = []
console.log(arr.constructor == Array)
.text{
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;
}

Git错误:You asked to pull from the remote 'xxx', but did not specify a branch,
原因:没有设置默认分支

解决方法:指定分支,git pull origin master

原因:git默认对文件的长度有限制,可以通过取消限制来解决


git config --global core.longpaths true

phpstorm,无法全局搜索、编辑文件
原因:没有以项目的方式打开文件夹


Select CONCAT( 'drop table ', table_name, ';' ) FROM information_schema.tables Where table_name LIKE 'sample_%';

<td class="tbTitle" valign="top">模板内容:</td>

运行thinkphp6框架报错,错误信息:Parse error: syntax error, unexpected
问题原因:在低版本PHP中运行