MySQL唯一索引添加和用法

一、唯一索引添加与变更
0、建表加唯一索引ukey_o_d_t,使用关键字unique key(如果只是单列唯一索引,可以在字段后加unique, 如topic):

CREATE TABLE `tv_episode_checkin_summary_log` (
  `id` int(11) unsigned NOT NULL auto_increment COMMENT '自增ID',
  `oid` varchar(128) NOT NULL default '0' COMMENT '选项ID',
  `topic` varchar(256) NOT NULL default '' unique COMMENT '话题词',
  `num` int(11) unsigned NOT NULL default '0' COMMENT '数量',
  `type` varchar(2) NOT NULL default '' COMMENT '类型: 1、小时数;2、天数',
  `dtime` bigint(11) unsigned NOT NULL default '0' COMMENT '数据汇总时间',
  `ctime` bigint(11) unsigned NOT NULL default '0' COMMENT '创建时间',
  `mtime` bigint(11) unsigned NOT NULL default '0' COMMENT '修改时间',
  `ext` varchar(64) NOT NULL default '' COMMENT '扩展字段',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `ukey_o_d_t` (`oid`,`dtime`,`type`),
  KEY `key_t_d_t` (`topic`(255),`dtime`,`type`),
  KEY `key_o_d_t` (`oid`,`dtime`,`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='打卡汇总数据表'

继续阅读

CSRF跨站请求伪造

上篇文章总结了遇到过的一个XSS漏洞问题,这次顺便写写自己了解的CSRF。

CSRF是Cross-site request forgery的缩写,中文的世界一般说法是跨站请求伪造。简单地说,就是黑客伪造了一个目标网站的地址,欺骗用户去点击用浏览器打开这个地址,如果用户登陆了这个网站,就可以绕过后台用户身份验证,执行一些操作。
继续阅读

微博投票XSS漏洞

0、案例描述

收到了公司安全组发来的一个反射型XSS漏洞提醒,修复建议:请在参数值输出点做过滤或者编码转换,
链接如下:

http://vote.weibo.com/widget?vid=2977008&skin=&isCustom=1&height=448zdxxn"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%3Ealert(1)%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<script>" title="<script>" />yptrj

点开后确实呈现了一个弹窗,查看了接收参数和展示参数的地方, 直接展示了接收到的参数。

// controller
$r = $this->getRequest();
$wiget_width = $r->getQuery('width', 600);
$wiget_height = $r->getQuery('height', 600);

// view

<div style="height: <?=$wiget_height?>px" >;

快速做了一个类型转换,上线修复了问题

$wiget_width  = intval($r->getQuery('width', 600));
$wiget_height = intval($r->getQuery('height', 600));

继续阅读

技术和业务

工作第一年跟公司的老大(架构师)在楼道闲聊,有句话在之后几年的工作中时不时的会想起,老大说:技术是一条腿,业务是另一条腿,只有两条腿才能走路。当时听后觉得好有道理,技术要去实现业务才有价值。

之后在新的工作中,面对新的业务,发现依旧有些东西是不变的,比如技术和业务的关系,相互依赖,又相互牵制。尤其是以PHP为核心技术的RD,PHP生来就是快速实现业务的利剑,实现纯业务的场景占大多数。而在实现业务的过程中,有经验的RD都不会重新发明轮子,基于现有的存量(扩展、框架、库、算法等,有些是业界开源内容,有些是公司已积累的技术)叠加增量,这些增量也就是纯业务逻辑。在实现业务逻辑的过程中,由于林林总总的原因,排期总是很紧,也就无法他顾,深入去看看哪些存量的实现原理,还是在技术外围观光。
继续阅读

笑傲江湖


第一次听说笑傲江湖还是上小学的时候,印象特别深刻,有一天上午下了第一节课令狐冲的名字在同学中传来传去。不知道为什么回家也没有去看,后来转学去了很遥远的地方,那里没有江湖…
继续阅读

PHP-FPM占用CPU过高分析及OPcache解决

平时站点CPU使用率都在10%以内,最近发现达到了50%左右
top查看服务器资源使用情况:

%Cpu0  : 41.9 us,  1.3 sy,  0.0 ni, 56.1 id,  0.3 wa,  0.0 hi,  0.3 si,  0.0 st
KiB Mem :  1016164 total,    68120 free,   583512 used,   364532 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   251176 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 5705 www       20   0  281272  40360   4516 S 15.0  4.0   0:09.09 php-fpm
 5704 www       20   0  281292  40604   4584 S  8.0  4.0   0:08.89 php-fpm
 5706 www       20   0  281124  41124   5296 S  8.0  4.0   0:08.80 php-fpm
 5707 www       20   0  281328  40596   4580 S  7.7  4.0   0:08.77 php-fpm

继续阅读

PHP导出CSV文件及问题总结

第一部分:生成CSV文件,导出/下载文件

0、什么是CSV文件。
CSV(Comma-Separated Values),即逗号分隔值(有时也称为字符分隔值,因为分隔字符也可以不是逗号)。CSV文件是以CSV格式存储表格数据的纯文本文件。
注:Excel可以直接打开CSV文件, 可以另存为Excel文件扩展名xls(Excel 03之前的版本), xlsx(Excel 07之后的版本)。所以一般导出Excel数据的需求,直接导出CSV比较快捷。
继续阅读

shell脚本验证业务机与DB的联通性

一个验证业务机与DB的联通性的小工具

#!/bin/bash
# 请求全部业务机上操作DB的接口,测试联通性
ips=(47.75.217.22, 47.75.217.23, 47.75.217.24, 47.75.217.25, 47.75.217.26)

if [ x$1 != x ]; then
    mod=$1
else
    mod="r"
fi

for ip in ${ips[@]};
do
    curl -x "$ip:80" "http://i.niliu.me/api/dbconn?cip=$ip&mod=$mod"
    echo "ok"
done

线上MySQL数据库迁移的一个方案

对线上正在使用的数据库做迁移,很少遇到这样的情况,考虑到没有长连接, 开始想到的方案很简单:
0、新建一个MySQL主从库
1、旧主单向往新主实时同步(毫秒级),新主不往旧主同步。
2、切换连DB的读账号信息,观察读是否正常。
3、切换连DB的写账号信息。
4、观察一段时间,旧库没有新写入内容即可断开往新主的同步。
继续阅读

Linux网站打开慢之mtr工具探测分析

一个Web应用,通过浏览器来访问,发现页面加载很慢,我们可以用下面的步骤来初步排查问题:
一、初步排查方法
0、打开浏览器调试模式,简单看看是否有报错,加载明显慢的资源。【如有,代码优化】
1、ping域名,看解析是否正常。
2、切换其他网络,比如4G,查看是否正常。或者借助第三方网络测试工具,测试全国其他节点
http://tool.chinaz.com/speedtest.aspx
3、登陆服务器,查看负载、带宽是否正常。
继续阅读