通知公告: 请使用IE9及其以上的浏览器浏览本页面。

tiyee's微言微语

无边天道,绝顶为峰…记录我自己,关注互联网!

  • 平时做表单都是跳转提交的,但是今天要做一个ajax图片异步上传,网上搜索了下,方法都比较老了,居然还有用flash的,普通的表单上传通过jquery的serialize()转换成querystring后就可以直接ajax post 上传,但是碰到文件上传就不奏效了,型号html5有个方法FormData()可以实现上传,我写的代码如下:function upThumbSubmit() { if(!window.FormData) {  alert('your brower is too old'); return false; } var formData = new FormData($( "#upForm" )[0]); $.ajax({ url:'?c=api&a=upload', type:'post', data:formData, dataType:'json', success:function(data){ alert(data); return false; } }); } 但是报错了,错误如下…

  • 阿里云推出了kvstore,也就是一款redis存储空间,但是没有一款redis管理工具,因为kvs只支持阿里云的服务器连接,所以客户端工具都不能用了,而且它还屏蔽了keys,导致一款比较有名的管理工具:phpredisadmin不能用,当然,phpredisadmin本身功能也比较少,本来就不是很让人满意。最近有些时间,本人自己决定开发一款,前台因为采用了angular,故可能不支持一些比较老的浏览器,后台本来是准备用node.js的,但是本人对node.js还不是很顺手,怕开发周期比较长,故先采用了php做的后台。目前bug还比较多,很多功能,比如导入导出,添加key等功能没有放进去,如果后续有时间,本人会逐渐完善,而且可能还会开发node.js版本。地址:…

  • 年前阿里云一直说会发布redis存储,年后刚上班,就发现公测了。好奇心驱使下,本人又决定当一回小白鼠。KVStore申请地址:https://buy.aliyun.com/kvstore因为本人之前采用的是服务器上自建的redis,所以申请成功后,稍微改下配置就可以直接使用了,官方的文档在这:http://docs.aliyun.com/#/kvstore在数据迁移的时候,因为我没有开启aof,所以只能通过sava命令导出rdb格式的文件,然后用官方的redis-rdb-tools工具转换成proto格式的文件,然后导进KVStore,官方文档在此:…

  • 人言,权力越大,责任越大。本人身为一个800人qq群的管理,权利倒是没体会到,责任倒是一大堆,不断有人来问各种问题,大部分情况下其他人就回答了,不过也有人指明希望我回答,对此本人表示相当的无奈,好在年底并无什么急事,所以有时间还是会回答的。昨天,有人就提出了这个问题,某海量用户网站,用户拥有积分,积分可能会在使用过程中随时更新。现在要为该网站设计一种算法,在每次用户登录时显示其当前积分排名。用户最大规模为2亿;积分为非负整数,且小于100万.本人之前也做过类似的东西,只是用户数远远达不到这个量级。自然解决思路也大不相同,在用户少的时候,我们通过一个redis sort set可以胜任。但是…

  • 前几天阿里云送了张50元的代金券,眼看就要到期了,就随手买一个月的低配阿里云,今天闲来无事,准备装个php 7试试,首先下载源文件,但是github实在是太慢了,只能去php的git下,估计阿里云做了镜像,下周速度飞快,几秒钟就下完了。下周地址为git@git.php.net:/php-src.githttps://git.php.net/repository/php-src.git完了进入文件夹,然后执行 ./buildconf 有很多库需要安装,一个个装实在太麻烦,从网上找了个依赖库yum install -y gcc gcc-c++ make zlib zlib-devel pcre pcre-devel libjpeg libjpeg-d…

  • 昨天群里有人问怎么处理超大规模的nginx访问日志(50G),有人回答直接用awk,有的人回答用hadoop,那么到底有谁真的尝试过了呢?对于小文件,awk自然是十分方便的,一条命令就能得到访问top N的ip,可是很明显内存不够,故这个方法行不通。对于hadoop,肯定是十分合适的,但是也不是每个公司都会配置hadoop的,既然没有hadoop,我们可不可以自己来实现一个简易版的mapredus呢?本人昨天还真的试了试。其实整个过程并不复杂,用fgets扫描整个日志,这个过程是可以开多线程处理的,也可以先切割这个日志文件,然后分到多台电脑上去处理,完了进行一次或多次合并。每扫一行就可以得到一个ip,如果日志不大,自然是可以直接在内存里构建hash表来存储的,但是…

  • 之前在另一篇博客里说过了,本人的webservice ,db都是跨地区的,web在杭州机房,db都在北京机房,所以每次连库都是100多ms,为了加快速度,本人用了memcache,将整个网站的数据都缓存起来了,然后发现访问速度还算理想。但是今天闲来无事,用siege进行了一次压测,模拟了1000个用户,1分钟的持续时间,最后发现结果并不理想,所以今天决定探本索源一次。我首先去查看了mysql的日志,发现日志里显示mysql有连接也有查询,既然全站缓存了,为何还有连接呢?我开启了xdebug追踪了下运行过程,发现确实连了数据库,原来我在写框架的时候,为了省事,在model的基类里用了一个构造函数,如下:    protected $db = null; public func…

  • php的每次请求是独立的,请求间的变量在请求完了就回收了,所以是没法共享变量的,有像swoole这类常驻型的框架是可以类似python样运行的,但是为了一个小小的功能就换个框架是不是太伤心病狂了?当然也可以通过第三方实现,比如memcache,redis,file,yac,等,但是明显这些都是变通,而不是真正实现了变量共享。前面,我们实现了一个内置常量,如果我们实现一个内置变量,在php启动的时候初始化,然后在每次请求的时候不回收,直到php关闭的时候才回收,是不是就可以实现变量共享了?类似glob,我们新建个hashtable,专门用来存储跨页面变量,不过因为跨页面了,必须加锁防止冲突。待续…

  • 本人的个人项目,部署在阿里云上,公司的开发环境是debian,家里笔记本是fedora,项目是通过git管理的,但是呢,阿里云的数据库是走内网的,所以在公司或家里是不能连接该数据库的,只能使用另一个可以走外网的备用库,其他的组件如memcache,radis也是如此,这就有些麻烦了,在第一次git clone后,往往还要添加数据库和memcache或redis的配置信息,这就需要手工配置了,然后通过.gitignore忽略这些文件。如果我能判断当前环境是哪个机器,然后根据机器的识别号来调用相应的配置文件,是不是就简单多了?识别机器最简单的是mac地址,但是显然php无法获取到,根据phpinfo()里的System值识别?貌似不知道怎么实现。那么比较简单的方法就是给php增加一个常量,然后赋予不…

  • 当我们在设计数据库的数据表时,经常会遇到一对多的数据结构,如文章的tag等,比如本人之前在设计手机app的后端的时候,就碰到了这个问题,当时涉及中小学教材的诗歌诗歌表(poetry)和出版社表(poetry_press),因为一首诗可能会涉及多个出版社,而且出版社的数量并不是很多。为了便于搜索,如果把所有出版社的ID用分隔符组合成一个字符串肯定不符合要求。所以一般都是单独使用一个表来存储他们的对应关系,每次修改的时候,还必须先清除所有的对应数据,然后重新插入,非常麻烦,为了保证数据的一致性,还必须用事物。很显然,对于关联数据种类很少的情况下,这两种方法都不好。在linux里,读写运行权限用421来表示,这就是一个典型的一对多的…