代码改变世界

随笔分类 -  PHP

如何开发打点统计系统

2014-06-06 18:48 by 轩脉刃, 10712 阅读, 收藏, 编辑
摘要: 最近做了一个打点统计系统,统计系统肯定各个公司都有做过,至于怎么做就不好说了。我见过最多的就是使用php开发一个打点接口,然后在打点接口中做数据点击,这种方法最差的就是每次打点都往数据库中操作,另外一种就是往一个文件中增加数据。对于后一种,我就很奇怪了,你既然php是等于要往日志文件中增加一条记录,... 阅读全文

php版本历史

2014-03-08 19:21 by 轩脉刃, 11504 阅读, 收藏, 编辑
摘要: php最初就是为了快速构建一个web页面而迅速被大家广为接受的。它的好处是在代码中能内嵌html的代码,从而让程序员能再一个页面中同时写html代码和php代码就能生成一个web页面。这篇文章用时间轴的角度来记录一下php的历史。# PHP版本历史## 1995年初PHP1.0诞生Rasmus Lerdof发明了PHP,这是简单的一套Perl脚本,用来跟踪访问者的信息。这个时候的PHP只是一个小工具而已,它的名字叫做“Personal Home Page Tool”(个人主页小工具)。## 1995年6月PHP2.0诞生Rasmus Lerdof用C语言来重新开发这个工具,取代了最初的Perl 阅读全文

php的SAPI,CLI SAPI,CGI SAPI

2013-12-19 13:45 by 轩脉刃, 6776 阅读, 收藏, 编辑
摘要: 首先一个问题:在命令行下执行:php -r 'echo 12;' 控制台会打印出 12; 这个过程不是很奇妙么,我输入的是shell命令,但是执行的却是php脚本。php脚本执行完成之后的输出还能在控制台输出。 那在这个shell命令(控制台命令)和php中间一定有一种接口,能将shell的参数,代码,等转换成php,然后将php的输出转换成shell的输出。这个接口就叫做SAPI(Serv... 阅读全文

css知识

2013-12-16 14:01 by 轩脉刃, 899 阅读, 收藏, 编辑
摘要: margin和padding是什么意思 margin外边距,padding内边距,外边距表示一个元素的边到相邻元素的距离,内边距表示元素之间的内容和元素边框的距离。 font:12px/1.5 表示什么意思? 其中12px/1.5表示:文字大小12像素,行高1.5倍,也就是150% margin怎么设置 可以参考:http://www.w3school.com.cn/css/pr_mar... 阅读全文

sublime 插件zen coding

2013-12-15 09:16 by 轩脉刃, 616 阅读, 收藏, 编辑
摘要: sublime的插件Zen Coding是一个编写html的神器,现在已经更名为Emmet了。 在sublime中的package需要搜索的是Emmet 相关网站: 官网 Zen Coding: 一种快速编写HTML/CSS代码的方法 具体使用学习了以后再写。。。 阅读全文

12/12工作笔记

2013-12-12 19:05 by 轩脉刃, 663 阅读, 收藏, 编辑
摘要: php5.5出现了一个很好用的函数:array_column,以前很恶心的foreach再取出某一行的代码就可以不用写了。 获取网页高度使用document.body.clientHeight,可以看下面这篇: JavaScript获取页面宽度高度大全 HTTP自身也有认证机制,但是由于和自身UI关系较大,所以没有得到推广。 Quoted-String 和Quoted-Pa... 阅读全文

阅读《深入理解JavaScript定时机制》

2013-12-11 17:40 by 轩脉刃, 1195 阅读, 收藏, 编辑
摘要: 鸟哥的这篇《深入理解JavaScript定时机制》从javascript线程角度分析了setTimeout和setInterval两个定时触发器的实现原理。 看完的体验就是主要要记住两点: javascript的引擎是单线程的 javascript的引擎是基于事件驱动的 setTimeout和setInterval都是往事件队列中增加一个待处理事件而已。setTimeout是触发一次,而s... 阅读全文

继续谈论XSS

2013-12-09 18:57 by 轩脉刃, 1144 阅读, 收藏, 编辑
摘要: 这篇文章基于上篇谈论XSS ,想说下自己工作过程中遇到的xss的问题。 易出现XSS的场景 1 jsonp 说说jsonp 中也有说过,jsonp其实是很容易出现安全问题的。由于jsonp的callback是由参数指定的,而必须在response中返回,所以这里的jsonp很容易出现的就是XSS漏洞了。服务端要切记着对这个callback进行处理,比如可以使用白名单机制,或者使用过滤黑名单。... 阅读全文

支付宝快捷支付模型

2013-12-08 20:42 by 轩脉刃, 2477 阅读, 收藏, 编辑
摘要: 其实题目有点大,主要讨论的是手机客户端怎么接入支付宝的快捷支付呢。 支付宝的快捷支付的相关文档可以看这个帖子:支付宝接口资料下载(2012.11.23更新) 三方主要是客户端,业务服务端,支付宝服务端的交互。 1 客户端向业务服务端提交订单,业务服务方生成一个订单号 2 客户端根据订单号生成支付宝所需要的参数,向支付宝的支付接口提交 3 支付宝的支付接口返回同步数据。 4 支付宝服务端... 阅读全文

谈论XSS

2013-12-06 19:03 by 轩脉刃, 1624 阅读, 收藏, 编辑
摘要: XSS 叫跨站脚本攻击(Cross Site Script),那么XSS原本应该叫做CSS,但是由于CSS的简称已经被连级样式表 使用了,所以就换个称谓XSS。 为什么叫做跨站脚本攻击呢? 它的意思就是在别人的网站上嵌入脚本,而这个脚本原本不是属于这个网站的。这个解释很直观吧。 怎么嵌入脚本呢? 比如这么个搜索结果页,当用户搜索test的时候,页面会显示“搜索关键词:test” 这个... 阅读全文

如何根据iframe内嵌页面调整iframe高宽续篇

2013-12-04 15:52 by 轩脉刃, 3849 阅读, 收藏, 编辑
摘要: 接着昨天的工作 如何根据iframe内嵌页面调整iframe高宽 来说,按照文章中说的第二种方法实现代码如下: 实现 A.com/detail/view 页面的iframe代码如下: B.com是第三方的域名,所以要求在B.com/location/testiframe的页面增加下面的htmlA.com/deatil/iframe是A提供的动态接口,返回的数据是一段js:这段中的20px是根... 阅读全文

如何根据iframe内嵌页面调整iframe高宽

2013-12-03 22:17 by 轩脉刃, 8905 阅读, 收藏, 编辑
摘要: 问题来自于工作的实例,我的一个域名A的页面,有个iframe,它可能内嵌了另一个域名B的页面,也可能内嵌域名C的页面,但是呢,B和C的页面大小是不一样的,特别是高是不一样的高,那么我如何设置iframe的height属性呢? 这个本质就是跨域设置的问题。 一种解法 B和C提供一个jsonp接口,让有iframe的页面A来调用,这个jsonp接口的目的就是告诉A,我的页面的高宽各是多少。 第... 阅读全文

yar粗略使用记录

2013-11-28 21:16 by 轩脉刃, 11366 阅读, 收藏, 编辑
摘要: yar是鸟哥(laruence)开发的一个并行的RPC框架。据说sina weibo已经在大规模使用这个框架了。今天初步使用了下,觉得还是挺爽的一个工具。什么情况适用这个工具呢?比如一般你有个微博这样的一个项目,这个项目的特点是有多个子项目组成,即有web版,手机客户端版,wap版等。一般有这么多个子项目,且项目的页面逻辑是分开的,我们自然会建立多个项目,然后分拆给不同的人负责。但是呢,这么多版本,它的功能实际都是相似的,比如必须都有个获取好友的功能,必须有个获取好友动态的接口,那么虽然这个接口的表现形式可能是不一样的,但是它的数据逻辑是一样的,如果使用MVC的分层模型来说,Controlle 阅读全文

那些有坏味道的代码

2013-11-27 19:33 by 轩脉刃, 2287 阅读, 收藏, 编辑
摘要: 最近每天早上上班的第一件事情就是把昨天写的代码重构优化一下,以前没弄过,现在发现这个过程真是非常爽的。看着代码一点点变好,还是很不错的感觉。最经常遇到的一些坏味道这里列一下:嵌套太多if (!empty($data) { if (is_array($data)) { foreach($data as $item) { // Do something } return $data; }} else { return null;}这里的问题就是代码嵌套太多层了,如果foreach里面有很多东西的话更难看改成:if (empty($data) || !is_array($data)) { ... 阅读全文

2013/11/22工作随笔-缓存是放在Model层还是放在Controller层

2013-11-22 20:25 by 轩脉刃, 2710 阅读, 收藏, 编辑
摘要: web网站的典型代码框架就是MVC架构,Model层负责数据获取,Controller层负责逻辑控制,View层则负责展示。 一般数据获取是去mysql中获取数据 但是这里有个问题,我们不会每次请求都去mysql中获取,当并发量大的时候,我们希望mysql前面有层缓存做着。 这层缓存可能是redis,memcache,File等,但是这个逻辑代码是放在Controller中好还是Model中... 阅读全文

2013/11/21工作随笔-PHP开启多进程

2013-11-21 18:30 by 轩脉刃, 3681 阅读, 收藏, 编辑
摘要: 今天被问到一个问题,php如何开启多进程才比较稳定。 php开启多进程执行一个操作有哪些方法: 首先想到的是使用pcntl的fork 具体可以参考之前的文章:PHP的pcntl多进程 其次想到的方法是使用linux的crontab 有个php程序,内部实现大概是 600) { break; } // ... Do SomeThing}意思是这个程序会持续10分钟,10分钟循环做这同... 阅读全文

php中mysql操作的buffer知识

2013-11-19 14:54 by 轩脉刃, 6230 阅读, 收藏, 编辑
摘要: php与mysql的连接有三种方式,mysql,mysqli,pdo。不管使用哪种方式进行连接,都有使用buffer和不使用buffer的区别。 什么叫使用buffer和不使用buffer呢? 客户端与mysql服务端进行查询操作,查询操作的时候如果获取的数据量比较大,那个这个查询结果放在哪里呢? 有两个地方可以放:客户端的缓冲区和服务端的缓冲区。 我们这里说的buffer指的是客户端的缓... 阅读全文

doctrine2到底是个什么玩意

2013-10-18 10:35 by 轩脉刃, 21421 阅读, 收藏, 编辑
摘要: 之前和最近一个项目用到了Doctrine,由于是别人搭建的,自己没有很了解,最近又开始做的时候发现拙荆见肘,于是看了一下doctrine教程,本文就是加上自己理解的doctrine教程文档笔记了。Doctrine2 配置需求需要php5.3.3及以上可以使用composer安装什么是Doctrine?Doctrine是一个ORM(Object-relational mapper),提供php数据库和PHP对象的映射。他和其他的ORM一样都是为了保证持久层和逻辑层的分类而存在的。什么是EntityEntity是PHP的一个对象Entity对应的表需要有主键Entity中不能含有final属性或者 阅读全文

statpot:使用mongo+bootstrap+highcharts做统计报表

2013-09-26 09:23 by 轩脉刃, 10821 阅读, 收藏, 编辑
摘要: 最近做了一个统计项目,这个统计项目大致的需求是统计接口的访问速度。客户端会调用一个接口来记录接口的访问情况,我的需求就需要分析这些数据,然后做出个统计报表。 需求实现 最初的时候想着每天把这些接口访问情况的信息存储到mysql中,然后根据这些访问情况做个分析再做报表。然后第一个问题就来了,信息包含太多字段了,如果我将每个信息解析成mysql表的一个字段,那么这个字段很长,而且还有一个致命缺陷,... 阅读全文

PHP去除BOM头的方法

2013-09-15 21:13 by 轩脉刃, 23716 阅读, 收藏, 编辑
摘要: BOM头是UTF-8来告诉编辑器:我是UTF8编码。它的编码是\xEF\xBB\xBF 但是PHP在设计之初并没有考虑到BOM头的问题,所以在编解码的时候很容易出现问题 比如今天遇到的问题,json_decode,当解码的string有BOM头的时候json_decode就解析失败,返回NULL。(为什么不自动检测并去除BOM头呢。。。小吐槽) 试了两种方式能去除掉: $res... 阅读全文