记录一次找bug经历(一)

起因

A:发现一个bug
B:什么bug
A:我们项目中(测试环境)有个接口时间会自动跟着更新时间变动,但是在本地测试是好的
B:详细描述下呢
A:有个发布动态的功能,其中有发布时、更新时间、新闻时间三个字段,当在后台通过审核后,新闻时间会跟着更新时间一起变
B:有没有检查代码有什么不同呢
A:检查过了,本地跟线上的代码版本一致
B:有没有考虑过哪里出了问题
A:看一下线上的数据表吧,感觉数据表有问题
B:当时更新数据表是跟本地同步的啊,不能出问题啊,等我有时间看下吧

解决过程

由于当时忙,想了下,没想到啥原因,简单看了下代码,确实没问题,暂时放一放了,晚上找到运维看了下线上数据库

1
时间字段 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

what??? 不知道怎么这个字段加了在更新的时候修改为当前时间,今后要注意这种小细节,好在这次找bug的时间没有很长

总结

当把数据表字段设置成 dafault CURRENT_TIMESTAMP 会在数据插入的时候,自动设置成当前时间

数据表中时间字段更新的方法
  1. 在代码中更新字段

  2. 设置字段的Extra列on update CURRENT_TIMESTAMP

  3. 设置mysql定时任务

Comments

install centos 7 failed

起因

最近公司新购几台服务器,需要先装好系统再拿到机房,前面两台430服务器安装系统都很顺利,在安装第三台730XD的时候报错failed to start switch root

解决

经过检查,是由于找不到U盘加载不到镜像导致这个错误,730服务器上三个USB插孔(前面一个后面两个),不知道前后有什么区别

方案

  • 在启动界面,按e进入编辑模式,
  • 修改启动参数 vmlinuz initrd=initrd.img linux dd quiet
  • 重启会列出所有磁盘,包括U盘盘符,一般U盘会是/dev/sdb,或者/dev/sda,但是我发现这次U盘是/dev/sdc4
  • 接着重启,重新进入编辑模式,修改启动参数 vmlinuz initrd=initrd.img inst.stage2=hd:/dev/sdc4 quiet 根据实际情况修改盘符
  • ctrl + x 执行就能顺利看到安装界面
Comments

Hexo 问题记录

Q: hexo deploy会发布整个项目到git master分支

A: 删除项目根目录下的 .git 文件夹

Q: 删除.git文件夹后再hexo deploy报错 fatal: Not a git repository (or any of the parent directories): .git

A: 删除项目根目录下的 .deploy 文件夹

Comments

CURL File

场景

  • laravel 框架
  • 上传图片需要通过API接口传到图片服务器上

方案

采用curl的方式,在PHP版本大于5.5.0需要用到CURLFile类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function curlPost($url, $postData, $post = 1)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, $post);

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, 0);

if ($postData) {
curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
}

$data = curl_exec($curl);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($httpcode == 200) {
return $data;
} else {
return $httpcode;
}
}

在调用方法的时候第二个参数是个数组,API接口参数file

1
2
3
array(
'file' => new \CURLFile($path)
)

若同时上传多个文件,如下
1
2
3
4
array(
'file[0]' => new \CURLFile($path1),
'file[1]' => new \CURLFile($path2)
));

Comments

数据库保存emoji表情

问题

mysql保存emoji表情的时候,插入到数据库为问号或者无法插入

原因

是由于mysql的utf-8编码最多三个字节,而emoji表情是四个字节,导致插入错误

解决方案

修改数据库设置字符集

1
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

修改数据表字符集

1
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

修改字段名字符集

1
ALTER TABLE table_name CHANGE column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

数据库连接方式参数设置
在laravel框架中修改database.php

1
2
'charset'   => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
Comments

Coding-Specification

编写目的

        为了更好的提高技术部的工作效率,保证开发的有效性和合理性,并可最大程度的提高程序代码的可读性和可重复利用性,指定此规范。开发团队根据自己的实际情况,可以对本规范进行补充或裁减。本规则会不断的进行适当的改进,以适应最新的开发环境。

  • 程序员可以了解任何代码,弄清程序的状况;
  • 新人可以很快的适应环境;
  • 防止新接触PHP的人出于节省时间的需要,自创一套风格并养成终生的习惯;
  • 防止新接触PHP的人一次次的犯同样的错误;
  • 在一致的环境下,人们可以减少犯错的机会;

Read More

Comments

数学分析一

概述

本次分享为一些基础知识,介绍一些数学中广泛采用的术语与符号,以及几个基本的概念,为今后的学习做铺垫。

概念

  1. 集合
    • 由确定的一些对象汇集的总体
  2. 子集
    • 组成集合的这些对象称为集合的元素
    • x是集合E的元素记作:
      xEx \in E(读作: x属于E)
    • y不是集合E的元素记作:yEy \notin E(读作: y不属于E)

      Read More

Comments