标签归档:asp

用JS实现ping的功能(JS ping url)

这是一个jquery的ping插件,实现了js来ping url的功能。当然这个和系统上的ping不是一回事,一个是ping使用icmp协议,一个是使用http协议,获取响应时间罢了。好了,上代码

来一个实例:

 

yii、yaf、ci等php框架性能对比

刚和朋友的聊天过程中,认识到yaf,yaf是远程c写的框架,整个php框架写成了扩展。php启动的时候便加载到内存,速度性能远比php写的框架强很多,但是使用ide相对麻烦一些,性能绝对赞。翻译了一片国外的框架性能对比文章.

案例

本次测试输出简单的hello word,简单MVC逻辑,(Router -> Controller -> Viewer),没有数据库连接,没有任何逻辑.

硬件平台
CPU: Intel Core i5 750 (2.67GHz x4)
RAM: 4GB

软件环境

Debian 6.0.4 x86_64 (2.6.32-41)

apache 2.2.16 (mpm-prefork,mod-php5)

php 5.3.10
php-apc 3.1.9 (Optimization for include/require)

Copy all projects to /dev/shm/* (Optimization for files read/write)

PHP框架列表

* zf: Zend Framework
Site: http://framework.zend.com
Ver: 1.11.11

* zf2: Zend Framework
Site: http://framework.zend.com
Site: https://github.com/zendframework/ZendSkeletonApplication
Ver: 2.0.0-beta1

* symfony: symfony
Site: http://www.symfony-project.org
Ver: 2.0.0

* cakephp: CakePHP
Site: http://cakephp.org
Ver: 2.0.4

* ci: CodeIgniter
Site: http://codeigniter.com
Ver: 2.1.0

* yii: Yii Framework
Site: http://www.yiiframework.com
Ver: 1.1.8

* micromvc4: MicroMVC
Site: http://www.micromvc.com
Ver: 4.0.0

* laravel: Laravel, A PHP Framework For Web Artisans
Site: http://laravel.com
Ver: 2.0.2

* slim: Slim Framework
Site: http://www.slimframework.com
Ver: 1.5.0

* yaf: Yet Another Framework in PHP Extension
Site: http://code.google.com/p/yafphp
Ver: 2.1.3-beta (yaf.cache_config=1)

* FuelPHP: Simple, Flexible, Community driven Web Framework
Site: http://fuelphp.com/
Ver: 1.1

* ColaPHP:
Site: http://code.google.com/p/colaphp/
Ver: 1.2-ga

# XHProf: A Hierarchical Profiler for PHP
Site: http://pecl.php.net/xhprof
Ver: 0.9.2

# The source code of this testing:
Source: https://github.com/eryx/php-framework-benchmark

1. Apache Benchmark

Requests pre second (-c 100 -n 30000), the bigger is better
ci

请求/秒(-c 200 -n 50000), 数值越大越好
ci

2. 系统负载
压力测试一分钟内完成的负载图
越小越好(-c 100 -n 30000)
ci

3. 内存使用率
测试hello word占用的内存,越小越好.
ci

4. 响应时间
页面的响应时间.单位微妙
ci

5. 调用方法的数量(Facebook XHProf)
单个hello word页面调用了多少方法,zend5620个方法,是不是太臃肿了。
ci

详细的函数调用图

Symfony2 ci Zend Framework 1.11.1 ci
Zend Framework 2.0.0-beta1 ci CakePHP 2.0.4 ci
CodeIgniter 2.1.0 ci Yii Framework 1.1.8 ci
Slim 1.5 ci Laravel 2.0.2 ci
MicroMVC 4.0.0 ci Yaf 2.1.3-beta ci
FuelPHP 1.1 ci ColaPHP 1.2 ci

6. 文件数量
打开hellow word用到included or required in 文件的数量.越小越好,zend很多,yii19个,yaf才4个,不快才怪。
ci

 

原文地址:http://www.ruilog.com/blog/view/b6f0e42cf705.html
转载请注明来自运维生存时间:http://www.ttlsa.com/html/3348.html

使用PHP的APC模块制作上传进度条

效果图:

apc

 

好 像PHP一直以来都没有在上传进度这方面有所突破。昨天找到了一个PHP的叫 APC模块,它的全称是Alternative PHP Cache。APC可以将所有PHP代码会被缓存起来, 另外它可提供一定的内存缓存功能.但是这个功能并不是十分完美,有报告说如果频繁使用APC缓存的写入功能,会导致不可预料的错误.如果想使用这个功能, 可以看看apc_fetch,apc_store等几个与apc缓存相关的函数.

值得高兴的是从5.2开始APC加入了一个叫APC_UPLOAD_PROGRESS的东东,解决了困扰大家已久的进度条问题。并且它把原来的上传时把临时文件全部缓存到内存改成了当临时文件达到设定值时就自动保存到硬盘,有效地改善了内存利用状况。

它的作用原理是在上传时候赋予每个上传一个唯一的ID,当 PHP 脚本收到一个上传文件时,解释程序将自动检查 $_POST数组中名为 APC_UPLOAD_PROGRESS 的隐藏字段,它将成为缓存变量,存储关于上传的信息,这样脚本就可以通过上传的ID来访问上传文件的状态信息。

最主要的就是那个APC_UPLOAD_PROGRESS的隐藏域,有了它脚本才能去访问目前上传文件的状态,另外加一个显示上传状态的div就好了。

下面是处理Ajax的脚本,我用了Jquery框架,json传递消息。

 

再下来就是读取上传状态的PHP代码了,至于上传文件的处理可以按照平常自己的来写.

//上传文件操作函数,可按照自己的需要编写

好了,现在就可以将其部署自己的站点中了,自己看看效果是不是很酷?

yaf的优点和缺点

在了解一个新的php框架,首先关心的是yaf的性能,其次才是安全等等要素,php各种各样的框架,性能也不一样.目前使用的yii和ci性能还不错,了解yaf之后,发现他们性能差的十万八千里. 今天就来聊聊我yaf我认为的优点和缺点

以下摘自官方网站,难点实际上也是它的缺点,可行性当然也是他的一个有点了。

1.1. Yaf的特点

在和其他用PHP写的PHP框架来比的话, Yaf就是剑的第二层境界. 框架不在你手中, 而在PHP的”心”中.

目前PHP的框架层出不穷, 其中不乏很多优秀的框架, 比如Zend官方支持的Zend Framework, Yii, ci等等. 但在这繁多的框架也就造成了公司内多种框架的业务产品. 这些框架之间的不同, 也就导致了多种版本的类库, 框架, 约定, 规范,,,,

那么, 为什么现在开源社区没有一个成熟的用PHP扩展开发的框架呢?

用PHP扩展写PHP框架的难点

  1. 难于开发. 要完成一个PHP扩展的PHP框架, 需要作者有C背景, 有PHP扩展开发背景, 更要有PHP框架的设计经验.
  2. 目标用户群小. 现在国内很多中小型站都是使用虚拟主机, 并不能随意的给PHP添加扩展, 所以这些大部分的中小型企业, 个人博客的用户就无法使用.
  3. 维护成本高. 要维护PHP扩展, 不仅仅需要精通于C的开发和调试, 更要精通于Zend API, 并且升级维护的周期也会很长.

那既然这样, 为什么还要用PHP扩展来开发框架呢, 或者说, 这可行么?

用PHP扩展写PHP框架的可行性

  1. 扩展逻辑相对比较稳定, 一般不易变化. 把它们抽象出来, 用扩展实现, 不会带来额外的维护负担.
  2. 框架逻辑复杂, 自检耗时耗内存都比较可观, 而如果用扩展来实现, 就能大幅减少这部分对资源的消耗.

1.2. Yaf的优点

  1. 用C语言开发的PHP框架, 相比原生的PHP, 几乎不会带来额外的性能开销.
  2. 所有的框架类, 不需要编译, 在PHP启动的时候加载, 并常驻内存.
  3. 更短的内存周转周期, 提高内存利用率, 降低内存占用率.
  4. 灵巧的自动加载. 支持全局和局部两种加载规则, 方便类库共享.
  5. 高性能的视图引擎.
  6. 高度灵活可扩展的框架, 支持自定义视图引擎, 支持插件, 支持自定义路由等等.
  7. 内建多种路由, 可以兼容目前常见的各种路由协议.
  8. 强大而又高度灵活的配置文件支持. 并支持缓存配置文件, 避免复杂的配置结构带来的性能损失.
  9. 在框架本身,对危险的操作习惯做了禁止.
  10. 更快的执行速度, 更少的内存占用.

其实, 来点简单的,我认为yaf最大的有点是性能,这不是一般的快,性能比其他php框架快上十几倍,和原生的php相差不是非常多。缺点也很明显,毕竟是C的扩展,如果程序有漏洞,作者未及时更新,使用者在不懂C的情况下,只能看着网站受辱或者祈祷,或者关闭网站.

转载请注明来自运维生存时间:http://www.ttlsa.com/html/3369.html

shell匹配IP和shell正则匹配捕获引用

在服务器上加了一个服务检测机制,用到正则来匹配IP和捕获分组。shell和其他语言一样也可以使用正则分组捕获,不过不能使用 $1或\1这样的形式来捕获分组,可以通过数组${BASH_REMATCH}来获得,如${BASH_REMATCH[1]},${BASH_REMATCH[N]}

简单的测试如下所示:

转载请注明来自运维生存时间: http://www.ttlsa.com/html/3382.html

empty与isset有什么区别

empty是判断变量值是非空或非零的值。对应空定义包括:“”(空字符串)、0、“0”、NULL、FALSE、array()和$var(只声明但未赋值)。也就是说当变量值为上述这些,empty返回TRUE,其他的都返回FALSE。

isset是检测变量是否设置,并且不是 NULL。变量设置可以从几个方面来说。1:最简单的就是变量是否先声明和赋值;2:array中是否存在对应的index或key;3:object中是否存在对应的属性。

从上面的两个function定义可以看到,在某些情况下,两者可以公用,但其区别还是很大的。另外它们都只能检测变量,检测任何非变量的东西都将 导致解析错误。例如直接检查另一个function的返回值(empty(otherFunction())),你将看到“Fatal error: Can’t use function return value in write context in”这样的错误。

另外isset可以一次检查多个变量,例如:isset($var1, $var2, $var3),当这三个值分别的isset都为TRUE结果为TRUE,否则结果为FALSE。

测试代码:

输出的结果为:

PHP session handler

运行在两台或两台以上服务器的web应用程序,需要考虑到session共享的问题,否则会出现登陆异常。

session最常用的是以文件方式存储在/tmp目录下,写本地磁盘慢,存在两个问题:

1.在高并发或session过期时间长的情况下,会产生大量的文件,导致查找文件缓慢,而每个目录下创建的文件个数是有限的,可能会导致新的session存储失败。

2.在session_start时,会锁住文件,直到程序执行结束后才释放锁,会阻塞其他并发程序session_start。

第二种方式是存入到关系数据库中如mysql数据库,这在高并发情况下,锁表很严重,影响性能。

还有一种是以key-value数据库来存储的,如memcached,大部门网站是用memcached来存储session数据的。 也可以使用redis来做存储。redis与memcached对比这里就不介绍了,有兴趣的话本博客有介绍的,可以搜索下。

redis来做session存储实现方式如下:

首先得安装PHP的redis扩展。

接下来需要编辑php.ini文件,修改一下内容:

重启php-fpm使其生效。

如需转载请注明出处:http://www.ttlsa.com/html/3516.html

查看安装了哪些perl模块

有些时候需要查看系统下,安装了哪些perl模块。可以通过下面的方式来查看:

1.  perllocal

改指令可以列出每个安装的模块的信息,如安装的时间、安装的位置、版本信息等。

instmodsh

2.  instmodsh

该指令是由ExtUtils::Installed模块提供的一个可执行脚本, 用来查看当前安装的模块信息。

instmodsh

对输出内容稍作处理下:

instmodsh

转载请注明来自运维生存时间: http://www.ttlsa.com/html/4094.html

微信公众号开发模式之用户账号绑定

公司需要微信这个平台和用户交流,于是开始研究微信公众平台。微信公众平台分为两种模式,其一是编辑模式,比如用户发什么内容,你可以响应什么内容。另外一种便是开发模式,这个模式功能丰富,不仅仅可以获取到用户的基本信息,还能获取用户的地理位置以及其他功能。

本来准备自己来开发一套微信公众号后台,后来发现已经有相关的开源产品,使用过三四种,发现最好用的还是”微擎“,咱们运维生存时间也不是替他打广告,确实比较好用,界面美观而且可以自己开发插件。不过呢,功能还是有些不足。

最近想研究微信怎么绑定网站的用户账号,类似招商银行那种,其实招商和微信是有深度合作,提供的接口也是很丰富,甚至他们网络都走专线。这不是我们这次要讲的重点,以下是来自网上的内容,有些道理。

最近由于工作需要,接触了微信公众号的开发。业务上要求绑定微信用户和系统用户,以便用户在一次绑定后能够通过系统用户的身份去使 用一些功能。我关注的招行信用卡公众号实现了这个功能,所以估计还是可行的,在网上搜索了一下,发现这个问题没什么好的答案,很多都说取不到微信用户名实 现不了,甚至有说实现了这个功能的应该是与微信有内部合作的。

搜索无果,遂自己动手实验,后发现其实完全可以的,看来实践才是检验真理的唯一标准,方案上也很简单,我分几点来说。

用OpenID绑定即可

微信接口中虽然没给用户的微信账号,但给了用户的OpenID,这个OpenID对一个公众号是唯一的,测试也证明不会改变,也就是说同一个微信号和同一个公众号交互,我们得到的OpenID是不会变的,因此,可以用OpenID作为微信用户的身份标识。

如何绑定

俗话说,没吃过猪肉还没见过猪跑。看招行信用卡公众号是如何做的,在微信里面给用户一个验证链接,用户点击链接,微信会用内嵌的浏览器打开这个链接,然后就是一般的网页登录验证界面,我们通过HTTP(S)获取用户输入的系统用户名与密码,验证通过后完成绑定。 具体如何生成链接和如何传递OpenID下面详述。

如何生成绑定链接

绑定涉及到用户的身份甚至利益,所以需要注意安全性。我们需要绑定的是OpenID和系统用户,系统用户名是用户直接在链接页面输入后通过 HTTP(S)传给我们的,这没有问题。OpenID对用户来说透明,用户不会传给我们,我们也只有在用户在微信中向公众号发消息时才可获得 OpenID,所以很明显,OpenID需要包含在生成的链接中,至于需不需要对OpenID作加密就看你自己了,我觉得这不重要,更为重要的是要在链接 中带上签名和加上时间戳。因为我们需要确认这个链接是由我们服务端生成的,用户自己或者其他人不能够伪造出这个链接,加上时间戳是为了给这个链接一个过期 时间,如果不限制过期时间,假设用户绑定后这个链接通过某种方式被别人知道,那么这个人就可以把自己的账号与用户的微信号绑定。所以我采取的方法是用 OpenID、过期时间再加上一个密钥生成签名,生成签名的方法和微信服务器接口验证时的签名方法类似(密钥最好另选一个只有自己知道的)。

如何传递OpenID

有了绑定链接,用户点了绑定链接,但这只是第一步,第二步我们需要在用户在链接页面提交登录请求后进行验证,OpenID怎么传到第二步中呢?有人 说了,这还不简单,在登录表单中加一个隐藏域放用户的OpenID一起提交给验证的Handler不就OK了,那我只能说很遗憾,你前面所做的安全工作都 白费了,一旦A用户的OpenID泄漏,B用户就可以把自己的账号与A用户的微信号绑定了。所以永远不要相信客户端提交的东西。我的方法是当用户点击生成 链接后,在链接页载入时,将OpenID存到session中,因为这个session是没法伪造的(cookie被盗除外),所以只有点击这个链接的用 户的session中才会有链接中包含的OpenID。

关于微信服务器签名多说一句

大家都知道微信公众号消息接口验证时微信会向我们服务器发一个GET请求,在其中带上只有我们和微信服务器知道的签名,我们在请求处理 Handler中会验证这个签名,这点大家无异议;消息接口验证通过后,微信就会把用户发的消息以POST的方式发给我们,很多人可能会在这里忽视对签名的检查,从而给恶意者伪造用户请求的机会。在微信以POST方式传递用户的消息时,仍然会将签名信息附在URL参数中,我们在处理每一个POST请求时, 第一步还是得像处理消息接口验证时一样,去对URL参数中的签名作验证,只有签名验证通过后才可去取POST的信息。

关于微信公众号用户账号绑定就是这么多,其实很容易实现,我在这里把我的方法和大家分享一下,老鸟可以忽略,主要是希望对新手有一些帮助。欢迎探讨,敬请轻拍。

参考资料

微擎:http://www.we7.cc
微信公众平台:http://mp.weixin.qq.com
转自:abyssly.com/2013/09/20/wx_bind/(打不开,内容是从百度快照抠出来的)

站点:运维生存时间  网址: http://www.ttlsa.com/html/4004.html

同步和异步的区别

所谓同步就是一根筋到底,一步一步走,中途如果转去干别的事就一定要干完这个事才返回接着干原来的事,而异步就是中途有别的事来打捞你可以不去理会,当是知道有这么一件事。同步是带阻塞,而异步不带阻塞。

举个例子:普通B/S模式(同步)AJAX技术(异步)
同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。
异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。

所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以省钱。

举个例子 打电话时同步 发消息是异步

以上来之cu博主的说法,我来说下我的理解。同步就是一件事件必须不间断的完成,异步就是可以间断,最后你完成了,返回消息给我即可.

转自:http://blog.chinaunix.net/uid-29302591-id-4011511.html