webbench一款免费的linux下压力测试工具

压力测试,不是只有ab可以选,web bench也不错,当前版本是1.5,下载地址:http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz

安装:

tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make
make install

看看提供的参数:

webbench [option]… URL
-f|–force Don’t wait for reply from server.
-r|–reload Send reload request – Pragma: no-cache.
-t|–time <sec> Run benchmark for <sec> seconds. Default 30.
-p|–proxy <server:port> Use proxy server for request.
-c|–clients <n> Run <n> HTTP clients at once. Default one.
-9|–http09 Use HTTP/0.9 style requests.
-1|–http10 Use HTTP/1.0 protocol.
-2|–http11 Use HTTP/1.1 protocol.
–get Use GET request method.
–head Use HEAD request method.
–options Use OPTIONS request method.
–trace Use TRACE request method.
-?|-h|–help This information.
-V|–version Display program version.

常用的是:

webbench -c 100 -t 30 http://yoursite

相当于是100并发,压30秒

真要测试c参数悠着点上,不光是被压的服务器,对测试机器消耗也是挺大的

wkhtmltopdf和wkhtmltoimage

这是两个非常不错的html转pdf和jpg的工具,如果centos装了桌面环境会更好,wk就是webkit了,其原理就是用webkit内核预览网页,然后转成pdf和jpg,不过没有x环境的系统,会报错,具体报错如下:

QPixmap: Cannot create a QPixmap when no GUI is being used

为了解决这个问题,要安装一大堆东西,最终还是要装桌面环境,topdf相对来说还好,测试了一下sina首页,抓下来了,但是image没抓下来。

这两工具下载地址:http://code.google.com/p/wkhtmltopdf/downloads/list

直接选Static Binary包,解压后,可直接运行

wget http://wkhtmltopdf.googlecode.com/files/wkhtmltoimage-0.11.0_rc1-static-i386.tar.bz2

tar jxvf wkhtmltoimage-0.11.0_rc1-static-i386.tar.bz2

抓google首页看看,应该还是可以抓的

./wkhtmltoimage-i386 www.google.com google.jpg

那个pdf命令行也一样。

补充:查看了一下参数,发现提供不少参数,尝试屏蔽js后,sina首页可以抓图了,命令如下:

./wkhtmltoimage-i386 -n www.sina.com.cn sina.jpg

虽然还是提示同样的信息,至少图是抓下来了,禁止js的sina真是丑啊,很多图片都是用js延时载入的。

文件或者图片写入到mysql再读出来

标题有点罗嗦,图片为什么要存库里呢?简单说有人就是喜欢这样,没其他原因。。。

直接上代码吧,存库比较简单,还是要先上传文件,只不过不是将临时文件move到目录,还是要读出文件字节流,然后存库。

// pic上传file控件名
if($_FILES['pic']['name'] && $_FILES['pic']['error'] == UPLOAD_ERR_OK){
	// 判断上传文件大小类型安全等略
	$fp=fopen($_FILES["pic"]["tmp_name"] , "rb");
	$file_data = fread($fp, filesize($_FILES["pic"]["tmp_name"]));
	fclose($fp);
	// 将file_data存到表里,字段请用longblob,代码略
}

不过读出来遇到点问题,读出后发现文件最前面多了三个字节,直接到库里看,原始数据又是正常的,什么原因呢,因为读文件是用thinkphp写的,想了一下,有可能是think的问题,要么在比较前面有header输出?要么文件编码问题?反正导致读出的数据输出后多了三个字节,没办法,写了段原生的php脚本:

$DB_CONN = mysql_connect($host, $user, $password);
if($DB_CONN){
	mysql_select_db($dbname, $DB_CONN) ;
	mysql_query('SET NAMES utf8',$DB_CONN);
	$result = mysql_query("select filedata from file where id=1", $DB_CONN);
	$row = mysql_fetch_assoc($result);
	if($row){
		header("Content-Type:image/jpeg");
		echo $row['filedata'];
	}
}

有时候bug很难找,换种环境或者写法,轻松搞定

 

thinkphp模板里html标签属性解析

thinkphp模板类里提供htmltag,在lib\think\template\taglib\taglibhtml.class.php

提供了editor、select、grid、list、imagebtn、checkbox、radio等html标签的封装,可能用的最多的是select吧,有这个东西,生成下拉框就容易多了,不过属性真难记啊,找到_select,属性列表如下:

name:select控件名

id:select的id

options:绑定数据的二维数组,数组的key就是options的value,值就是option的显示的内容

selected:默认选项的值,不过写法非常奇葩,奇葩,selected=”aaa” selected=”aaa[bbb]”,标签变量请务必去掉$,数组下标务必用[]引用,千万不要用.引用

change:就是onchange,这个还是可以理解的

style:这个是class,简直无法理解,class为什么要用style,如果直接在select上写style属性,请问怎么写?

其他属性略,最奇葩就是selected和style

 

 

Android Studio试用及无法启动原因

Android Studio,听说是很不错的东西,google出品,不过要翻墙才能下载,国内有网盘:http://pan.baidu.com/share/link?shareid=470456&uk=3758401226

证实可下,因为之前本子没做过java开发,所以要先装jdk,然后才能安装,谁知。。。

哎,还要设置一大堆jdk环境变量,才能启动起来,具体如下:

首先是path变量,增加jdk的bin路径,比如我的:;D:\Java\jdk1.7.0_21\bin;

然后新增变量classpath,值照抄:

.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;

然后JAVA_HOME JDK_HOME ANDROID_STUDIO_JDK三个变量,全部为:D:\Java\jdk1.7.0_21

然后再启动Android Studio,成功了

一个高效的根据IP自动显示天气预报信息的案例

这个案例里使用的东西,在前几篇日记里已经陆续提供了,比如中国气象的json数据接口,中国气象地区编码库,iplocation以及redis等。

先简单介绍一下这个案例的技术要点。

首先要能高效快速获取一个ip地址的地区信息,这个有php的扩展iplocation,可以实现。http://www.hao535.com/archives/166

获得地区信息后,再通过中国气象的地区编码库,获得地区编码:http://www.hao535.com/archives/195

再通过中国气象的json数据接口获得天气数据,实际上整个案例效率最低的就是这步,这个接口连接比较慢,所以要加一层缓存,考虑到天气数据更新频率并不高,一天可能就更新2、3次吧,缓存设个1小时足够了,建议使用redis:http://www.hao535.com/archives/26

以上几个关键的东西,iplocation、area.php和redis都安装和准备好了,就可以使用下面范例代码实现天气预报了,本方案有实际应用,低配日pv500万没有问题。 继续阅读“一个高效的根据IP自动显示天气预报信息的案例”

PHP做soapserver

soap是啥玩意?百科查一下,中文名叫简单对象访问协议,我个人的理解就是远程函数调用,一般基于xml。

serv和client都要开启php_soap支持。

soapserver.php是服务器端的代码,soapclient.php是客户端代码

// soapserver.php
<?php
function fun1($p){
	return $p;
}
function fun2(){
	return 'fun2';
}
function fun3(){
	return 'fun3';
}
$arrOptions = array("uri"=>"http://localhost/");
$objSoapServer = new SoapServer(null,$arrOptions); 
$objSoapServer->addFunction(array("fun1", "fun2", "fun3"));
$objSoapServer->addFunction(SOAP_FUNCTIONS_ALL);
$objSoapServer->handle();
?>

// soapclient.php
<?php
$soapOptions = array(
	'uri'=>'http://localhost/',
	'location'=>'http://localhost/soapserver.php',
	'trace'=>true
);
$objSoapClient = new SoapClient(null,$soapOptions);
echo $objSoapClient->fun1('hello');