摘要:这个错误是字符编码的问题 , 因为内容里有可能有表情等特殊字符 , 需要使用utf8mb4编码 重点还有一个是 , 在php代码中连接上mysql后一定要执行一下 set name utf8mb4 否则也是不行的 比如下面这个表的字符编码 create table laruence( id int 阅读全文
posted @ 2020-04-08 19:09 陶士涵 阅读 (5) 评论 (0) 编辑
摘要:Bcmath: 修复了错误#78878(bc_shift_addsub中的缓冲区下溢)。 (CVE-2019-11046)。 核心: 修复了错误#78862(Windows上的null字节后,link()默默地截断)。 (CVE-2019-11044)。 修复了错误#78863(DirectoryI 阅读全文
posted @ 2020-04-02 10:43 陶士涵 阅读 (25) 评论 (0) 编辑
摘要:核心: Windows上的预加载支持已被禁用。 修复了错误#79022(对于尚未准备好使用的类,class_exists返回True)。 修复了错误#78929(Cookie值中的加号转换为空格)。 修复了错误#78973(CV释放期间的析构函数如果从未保存opline会导致段错误)。 修复了错误# 阅读全文
posted @ 2020-04-02 10:30 陶士涵 阅读 (13) 评论 (0) 编辑
摘要:核心: 修复了错误#71876(内存损坏htmlspecialchars():不支持字符集*))。 修复了错误#79146(CScript在某些系统上可能无法运行)。 修复了错误#78323(无效选项返回代码0)。 修复了错误#76047(访问已破坏的回溯参数时可以自由使用)。 CURL: 修复了错 阅读全文
posted @ 2020-04-02 10:19 陶士涵 阅读 (10) 评论 (0) 编辑
摘要:核心: 修复了错误#79329(一个空字节后get_headers()默默地被截断)(CVE-2020-7066) 修复了错误#79244(PHP在解析INI文件时崩溃)的问题。 修复了错误#63206(restore_error_handler无法还原以前的错误掩码)。 COM: 修复了错误#66 阅读全文
posted @ 2020-04-02 10:07 陶士涵 阅读 (14) 评论 (0) 编辑
摘要:最早知道的概念是进程 , 每个进程里面的执行单元是线程 , 一个进程肯定有一个主线程 , 也可以开出一些子线程 ,这俩都是操作系统控制的 协程是啥概念? 现在又在线程里面增加了个协程的单元 , 这个是各程序自己去实现的概念 , 是比线程更小的一个单元 在一个线程里面如果开启了一个协程 , 这个主线程 阅读全文
posted @ 2020-04-01 18:53 陶士涵 阅读 (26) 评论 (0) 编辑
摘要:前面业务里有个搜索功能 , 入口比较深 , 现在想要把入口挪到有公共header的地方 , 在不想完全实现一遍功能的情况下 , 就需要模拟进行多个点击事件来执行点击后的效果 执行先点击1 ,再给inout赋值 ,再点击2 基本思路是类似jquery的trigger方法 , 原生js也是可以实现 , 阅读全文
posted @ 2020-04-01 11:26 陶士涵 阅读 (21) 评论 (0) 编辑
摘要:1. 前几天开发一个双语网站企业站 , 实现思路大部分情况下 , 我们可以想到是使用一个语言包数组文件 . key和value的形式 , 我们在展示界面时 , 输出数组对应的key而不是固定写死这个值 大概的设计是这样的 , 有两个这样的php文件 cn.php en.php 里面就是返回一个数组 阅读全文
posted @ 2020-03-31 19:21 陶士涵 阅读 (52) 评论 (0) 编辑
摘要:有人针对我公司业务开发了批量注册机,本来想要分析下看看调用的哪个我们的接口,之前测试过ethereal抓包 , windows系统下使用最多的还是wireshark进行抓包 , 使用方式也很简单 1. 打开以后选择对应的网卡 2. 然后就可以开始抓数据了 过滤器选择http就可以看到它调用的接口 , 阅读全文
posted @ 2020-03-31 14:08 陶士涵 阅读 (30) 评论 (0) 编辑
摘要:默认隔离级别下 , mysql没有解决幻读问题 , 需要应用代码里加一个锁来解决 幻读问题是啥? 默认的隔离级别是可重复读 REPEATABLE-READ , 在这个模式下出现幻读的例子一般是这两种情况: 事务1和事务2同时 , 事务1读数据 , 事务2插入数据提交 , 事务1插入同样的数据时报错说 阅读全文
posted @ 2020-03-30 15:52 陶士涵 阅读 (46) 评论 (0) 编辑
摘要:1.PDO::ERRMODE_SILENT 静默模式,不终止代码,只能使用 $pdo->errorCode() 和 $pdo->errorInfo() 获取错误信息 , 这个是默认情况下 , 也就是不停断 , 不记日志 注意这种形式下不容易错误排查 2.PDO::ERRMODE_WARNING 警告 阅读全文
posted @ 2020-03-30 15:15 陶士涵 阅读 (25) 评论 (0) 编辑
摘要:vmstat可以查看 系统 , 内存 , cpu , io 等的使用情况 , 方便查看系统负载 可以用这个命令判断是CPU密集型还是IO密集型 CPU密集型的表现: cpu的us列(用户态)值高, sy列(系统态)系统利用率高 id列(空闲态)空闲率低 IO密集型: 进程列的b特别高 , 这是等待I 阅读全文
posted @ 2020-03-30 14:30 陶士涵 阅读 (27) 评论 (0) 编辑
摘要:mysql的innodb引擎本身存储的形式就必须是聚簇索引的形式 , 在磁盘上树状存储的 , 但是不一定是根据主键聚簇的 , 有三种情形: 1. 有主键的情况下 , 主键就是聚簇索引 2. 没有主键的情况下 , 第一个非空null的唯一索引就是聚簇索引 3. 如果上面都没有 , 那么就是有一个隐藏的 阅读全文
posted @ 2020-03-30 12:04 陶士涵 阅读 (33) 评论 (0) 编辑
摘要:在用户收到发送过来的文件后 , 要能够检测出这个文件是否是病毒 , 核心的软件是clamav , 可以在linux命令行执行,检测文件或目录里的病毒 下载和安装可以参考其他博文 需要注意的是要开启下配置文件中的 LocalSocket /tmp/clamd.socket 运行时是以守护进程的方式运行 阅读全文
posted @ 2020-03-26 16:32 陶士涵 阅读 (52) 评论 (0) 编辑
摘要:邮箱中最重要的一个功能就是读取一封信 , 也是使用的最多的接口 , 对此接口的读取效率是有一定要求的. 1. 最早的邮箱架构邮件还是存放在本地的共享文件目录下 , 每次读取邮件 ,就是在本地寻找到这个文件本体 ,然后把文件内容返回来就可以了. 2. 随着邮件越来越多 ,在本地遍历邮件目录和文件列表变 阅读全文
posted @ 2020-03-25 12:22 陶士涵 阅读 (21) 评论 (0) 编辑
摘要:xdebug除了调试程序外 , 还可以来检测程序的性能损耗点 , 展示成图表的形式 在php.ini中增加如下配置: xdebug.profiler_output_dir=/tmpxdebug.profiler_enable=1 访问程序后 , 会在tmp目录生成cachegrind.out.xxx 阅读全文
posted @ 2020-03-24 19:07 陶士涵 阅读 (23) 评论 (0) 编辑
摘要:B树的数据指针存储在各层节点中 , B+树的数据都存储在了叶子节点 , 那查找的时候B+树比B树效率按逻辑应该更高吗? 这样的情形下 , B树的数据存储的比较分散 , 在磁盘里进行查找的时候 , 不能利用上局部性原理 , 反而效率是更低的. B+树叶子节点之间还有链表连起来了 , 如果是个范围的查询 阅读全文
posted @ 2020-03-24 10:47 陶士涵 阅读 (17) 评论 (0) 编辑
摘要:在一张表里有多个索引 , 我们where字段里条件有多个索引的值 , 那么究竟使用的哪个呢? 我们可以使用explain来查看 , 其中的key_len字段可以看得出来 比如下面这条sql explain select * from ent_calendar_diary where email='x 阅读全文
posted @ 2020-03-23 18:51 陶士涵 阅读 (33) 评论 (0) 编辑
摘要:mysql严格模式下 , 不允许给blob text geomtry json列增加默认值 可以使用 select @@sql_mode 查看当前模式 , 例如下面这样 mysql> select @@sql_mode -> ;+ +| @@sql_mode |+ +| STRICT_TRANS_T 阅读全文
posted @ 2020-03-23 14:04 陶士涵 阅读 (135) 评论 (0) 编辑
摘要:经常我们会遇到502错误 , 502错误究竟是啥呢 , 在字面意思是指bad gateway 网关错误 , 网关是啥 在我们的nginx + php-fpm中 , nginx相当于网关 ,但是这里的错误却是指的nginx的上游服务出错了 , 也就是fpm出错了. nginx连不上fpm或者fpm自身 阅读全文
posted @ 2020-03-23 11:13 陶士涵 阅读 (37) 评论 (0) 编辑
摘要:当我们开发时候需要对外开放接口 , 不管是GET还是POST , 都有点害怕对方传递给我们参数的方式被别人知道 , 然后直接改改参数搞破坏. 这时候就需要对参数进行一下安全的验证工作 , 对参数进行加密后的字符串拼接在要传递的参数后面 , 接收方同等加密进行判断一致 比如在get参数部分 , 一般有 阅读全文
posted @ 2020-03-23 10:18 陶士涵 阅读 (25) 评论 (0) 编辑
摘要:在写代码的时候,经常要进行跳转连接,但是大家大部分不清楚302和301是啥区别,其实对于我们后端开发来说,这俩大部分没啥区别。 这俩的区别基本是语义上的区别 301是我这资源早就没有了,永远没有了,你跳走吧,然后我把Location传给你 302是我这资源没有了,下次有没有不知道,先临时跳走吧,这是 阅读全文
posted @ 2020-03-22 11:58 陶士涵 阅读 (27) 评论 (0) 编辑
摘要:这种模式是我们常见的oauth形式,例如第三方登陆,qq,微博等,都是使用的授权码模式,也是很多网站系统对外提供的接口形式 这种模式大体是需要两步,一般是先获取code , 获取完code后,拿着code去获取access_token 例如下面这俩接口: 1. 获取code https://b.co 阅读全文
posted @ 2020-03-21 15:31 陶士涵 阅读 (32) 评论 (0) 编辑
摘要:项目中使用到了redis的哈希结构 , 哈希结构的内部编码类型是 ziplist 和 hashtable 当元素个数小于512 , 并且值的大小小于64个字节时 , 采用ziplist , 大于的时候采用hashtable ziplist最大的优势就是存储的时候是连续的内存 , 可以极大的提升cpu 阅读全文
posted @ 2020-03-20 09:52 陶士涵 阅读 (42) 评论 (0) 编辑
摘要:某个项目中路由是通过$_SERVER['REQUEST_URI']来进行的匹配处理 , 并且隐藏了index.php 前端路径是http://域名/static/css/xxx.css 而实际路径是位于 /绝对路径/template/static中 在这样的两种情况下 , 不改代码的条件下使用ngi 阅读全文
posted @ 2020-03-19 16:16 陶士涵 阅读 (75) 评论 (0) 编辑
摘要:面试的时候 , 大部分面试官会问mysql的索引问题 , 也是必问的问题 , 但是感觉大部分面试官都是把网上的面试题原封不动的说出来 , 要开发人员来应试答题. 这样的形式 , 我的理解是既不能体现出面试官的能力 , 又不能考察到程序员的mysql功力 , 基本是无意义的 . 如何在平常的开发中体现 阅读全文
posted @ 2020-03-18 10:03 陶士涵 阅读 (44) 评论 (0) 编辑
摘要:1. memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。 这种技术被称为 惰性过期。因此,memcached不会在过期监视上耗费CPU时间 ,与redis是有区别的. 2. memcached的过期时间,有一个最大时限就是30天,设置时若超过30天,存储时 阅读全文
posted @ 2020-03-16 11:06 陶士涵 阅读 (26) 评论 (0) 编辑
摘要:add方法添加时,如果存在返回falseset方法添加时,如果存在就是覆盖,不存就是添加 1. set方法会在设置时,同时更新缓存的过期时间,这个地方如果是做频率限制功能,时间一定要过期时,注意不要使用这个方法2. 如果要做频率限制功能,可以使用add和increment方法配合 , 这样不会覆盖掉 阅读全文
posted @ 2020-03-16 10:59 陶士涵 阅读 (12) 评论 (0) 编辑
摘要:经常会被人问在什么场景下使用到了redis ? 这个问题和业务是很相关的 , 脱离业务需求的回答都不能说服别人. 在我的业务里有一个提交试用的表单申请 , 这个申请之前是默认直接存入数据库的订单表和企业表 . 后来不知道被那个闲人发现了,就一直往里提交垃圾数据 , 增加了验证码和手机短信验证码 , 阅读全文
posted @ 2020-03-12 09:30 陶士涵 阅读 (51) 评论 (0) 编辑
摘要:当有个功能要发送通知邮件时 , 大家都会去用PHPMailer来调用第三方的smtp发信 , 经常遇到莫名其妙的错误 ,不知道是什么原因 . 今天我也遇到了这种问题 , 在发信时一直都是false , 找了半天 这个类库最终还是拼接的smtp协议 , 与我们自己手动telnet然后 auth log 阅读全文
posted @ 2020-03-10 17:34 陶士涵 阅读 (38) 评论 (0) 编辑
摘要:PHP的很多框架里面都是通过获取$_SERVER['PATH_INFO']处理路由 , 这个变量是通过nginx传递过来的 , 我们在nginx中经常见到下面两句 fastcgi_split_path_info ^(.+\.php)(/.*)$;fastcgi_param PATH_INFO $fa 阅读全文
posted @ 2020-03-09 18:12 陶士涵 阅读 (38) 评论 (0) 编辑
摘要:1. 大部分互联网业务中 , 用户登陆功能是非常常见的模块 , 针对登陆功能的数据库设计常见的是下面这样的 User表 id username password ... 其他用户信息 查询时的逻辑类似下面 pass=query("select * from user where username=' 阅读全文
posted @ 2020-03-07 19:02 陶士涵 阅读 (55) 评论 (0) 编辑
摘要:大家知道OAuth协议是针对提供给第三方进行认证登陆的 , 感觉比较的复杂 , 但是在四种模式中最简单的一种叫做客户端模式 , 或者叫凭证模式 , 非常的容易理解 当对于我们针对一个非常信任的第三方去登陆时 , 可以采用这种模式 . 1. 首先要提供给第三方一个client_id 和 client_ 阅读全文
posted @ 2020-03-06 11:29 陶士涵 阅读 (57) 评论 (0) 编辑
摘要:当安装某些rpm包的时候 , 会爆出这个错误 Requires: libjson-c.so json-c是c语言下的json库 , 如果在centos6下可以访问下面这个页面找到64位的rpm包 , 一定要看清是4位还是32位 http://rpmfind.net/linux/rpm2html/se 阅读全文
posted @ 2020-03-04 10:34 陶士涵 阅读 (59) 评论 (0) 编辑
摘要:php变量在赋值的时候是增加的引用计数,并不是又创建了一块内存空间 但是当新的变量值变更时 , 值从新赋予新的值时 , 就会减掉刚才的引用计数,并且从新创建内存空间. 上面的内容是显而易见的,重新赋值自然会重新创建内存空间,但是有一种情况也会发生这样的事 , 那就是在使用到引用符&的时候 , 也会发 阅读全文
posted @ 2020-03-03 17:03 陶士涵 阅读 (33) 评论 (0) 编辑
摘要:js中检测变量是否定义,可以用这个语句,比如: typeof a!=="undefined" 1. typeof的语法typeof是一个运算符,有2种使用方式:typeof(表达式)和typeof 变量名,第一种是对表达式做运算,第二种是对变量做运算。 2. typeof的返回值 typeof运算符 阅读全文
posted @ 2020-03-02 20:17 陶士涵 阅读 (28) 评论 (0) 编辑
摘要:先用一个数组表示一个二叉树搜索树,也就是一个排好序的二叉树,其中左子结点<根结点<右子结点 利用结构数组的形式来表示,id , left , right 代表结点id ,左子树 ,右子树 下面这个二维数组 $data[]=['id'=>8,'left'=>2,'right'=>10,'data'=> 阅读全文
posted @ 2020-03-01 22:21 陶士涵 阅读 (33) 评论 (0) 编辑
摘要:PHP中的引用就是两个变量指向了同一个地方,只要在变量前面增加了&符号,它就变成了一个引用 $a='aaa'; $b=&$a; $c=&$b; xdebug_debug_zval('a','b','c'); 输出结果是: a: (refcount=3, is_ref=1)='aaa' b: (ref 阅读全文
posted @ 2020-02-29 17:13 陶士涵 阅读 (57) 评论 (0) 编辑
摘要:按正常理解php的变量是引用计数,第一次创建变量refcount会是0,当把这个变量赋给新的变量时,refcount会加1 但是,经过测试,php7.0.33下和php7.3.11下效果都不是按照这个来的 代码: $val = "taoshihan best"; xdebug_debug_zval( 阅读全文
posted @ 2020-02-29 13:41 陶士涵 阅读 (37) 评论 (0) 编辑
摘要:chrome的开发者工具,在source选项卡下,可以看到js的源代码,有一个断点调试功能,就是在js的源代码行号那里点击一下,出现一个箭头,当再次刷新页面并且进行了相应操作时,就会停在断点的地方。我们可以查看相应的变量值,在右侧可以手动改变变量值,进行调试。 这个地方有一个缺点,就是没有办法对代码 阅读全文
posted @ 2020-02-28 17:06 陶士涵 阅读 (99) 评论 (0) 编辑