教您在windows下安装phpredis模块,感兴趣的朋友可以参考学习。
1.下载:
php_redis.dll:https://github.com/nicolasff/phpredis/downloads
2.里面有两个模块分别是vc6,vc9编译的,我们需要知道我们的Php是vc6还是vc9的:
创建一个文件:reids.php
phpinfo();
?>
3.安装模块
把php_redis.dll模块放到php安装目录下/ext/中
在php.ini里的
;extension=php_bz2.dll 之前增加 extension=php_redis.dll
4.测试
重启apache之后,访问redis.php
redis.php代码:
phpinfo();
$redis = new Redis();
$redis->connect("192.168.60.6","6379");
$redis->set("test","Hello World");
echo $redis->get("test");
?>
测试结果
这里介绍的是一个模拟get或者post请求的方法支持的代码,支持自定义header和测试CDN节点。
1.get,post方法
2.自定义参数
3.自定义header
4.返回服务器的返回内容和header
5.支持相特定的服务器请求url,适合测试cdn节点
<?php
error_reporting(0);
$user_agent="Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10)";
list($rheaders,$conntent)=request_url("60.28.14.148","80","get","http://mat1.gtimg.com/www/iskin960/qqcomlogo.png",array("User-Agent"=> $user_agent),array());
//list($rheaders,$conntent)=request_url("","","get","http://www.baidu.com/s",array("User-Agent"=>$user_agent),array("wd"=>"test"));
if($rheaders["httpstatus"]>=200&&$rheaders["httpstatus"]<=300)
{
//根据返回的类型,修改header
if($rheaders['Content-Type']!="")
header('Content-Type: '.$rheaders['Content-Type']);
echo $conntent;
// foreach($rheaders as $k => $v)echo "$k: $v<br/>";
}else
{
//若是是302,301之类跳转的话,继续取跳转的
if($rheaders["httpstatus"]>=300&&$rheaders["httpstatus"]<=400){
list($rheaders,$conntent)=request_url("","","get",$rheaders["Location"],array("User-Agent"=> $user_agent),array());
if($rheaders["httpstatus"]>=200&&$rheaders["httpstatus"]<=300)
{
//根据返回的类型,修改header
if($rheaders['Content-Type'])
header('Content-Type: '.$rheaders['Content-Type']);
echo $conntent;
}
}
// foreach($rheaders as $k => $v)echo "$k: $v<br/>";
}
/*
* 模拟get,post方法向服务器请求某url的内容,返回内容和状态码
* 参数: $ip:url所在的服务器ip或者域名,当传入为空时,ip的默认值就是$aURL里包含host(ip或者域名)
$port:int,url所在的服务器的端口,当传入为空时,ip的默认值就是$aURL里包含端口,若是没有的话为80
$method:get还是post,缺省为post
$aURL:请求的url,格式为http://username:password@hostname:port/path?arg=value#anchor
$headers:数组,需要模拟的http头部(Referer,Content-Disposition,Expires,Cookie,Pragma,User-Agent,Accept-Language等等)
$headers=array("Referer"=>"http://123.com","User-Agent"=>"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10)");
$aParamsArray:数组,需要post或者get的参数
$aParamsArray=array("id"=>123,"name"=>"abc");
* 返回值:数组:第一个元素为返回的http头部数组(http状态(默认为0,连接错误为-1)),第二个为返回的内容
*/
function request_url(/blog_article/$ip,$port,$method,$aURL,$headers,$aParamsArray/index.html)
{
$rheaders=array();
$rheaders["httpstatus"]=0;
//分解URL为host,端口,和路径
$URL=parse_url(/blog_article/$aURL/index.html);
if(!$port)
{
//缺省端口为80
$port=($URL["port"]? $URL["port"]:80);
}
if(strcasecmp($method,"get")==0){
$method="GET";
}else{
$method="POST";
}
//把post的数据放到数据段里
foreach($aParamsArray as $key=> $value)
{
if($flag!=0)
{
$params.="&";
$flag=1;
}
$params.=$key."=";
$params.=urlencode($value);
$flag=1;
}
if($method=="POST")
{
//获得数据段长度,放入Content-Length
$length=strlen($params);
}else
{
$length=0;
//把数据放到url的参数后面
$URL["query"]=$URL["query"]."&".$params;
}
if($URL["query"]){
//添加参数
$URL["path"].="?".$URL["query"].($URL["fragment"]?"#".$URL["fragment"]:"");
}
//创建socket连接
$fp=fsockopen($ip==""? $URL["host"]:$ip,$port,$errno,$errstr,10);
if(!$fp)
{
$rheaders["httpstatus"]=-1;
return array($rheaders,$errstr."--->".$errno);
}
//去掉不多余的头部
unset($headers['Host']);
unset($headers['Content-Length']);
unset($headers['Content-Type']);
//构造post请求的头
$header="$method ".$URL["path"]." HTTP/1.1\r\n";
$header.="Host:".$URL["host"]."\r\n";
foreach($headers as $k=> $v){
$header.="$k:$v\r\n";
}
if(!$header["Content-Type"]){
$header.="Content-Type:application/x-www-form-urlencoded\r\n";
}
$header.="Content-Length:".$length."\r\n";
$header.="Connection:Close\r\n\r\n";
if($method=="POST")
{
//添加post的字符串
$header.=$params."\r\n";
}
// echo $header;
//发送post的数据
fputs($fp,$header);
$inheader=1;
$lineno=0;
$conntent="";
while(!feof($fp))
{
if($inheader){
$line=fgets($fp,1024);//读取header
}else{
if($rheaders["Content-Length"]>=0){
$line=fread($fp,$rheaders["Content-Length"]);//读取返回内容
}else{
$line=fread($fp,1024);//读取返回内容
}
}
$lineno++;
if($inheader){
if($lineno==1)
{
//从第一行,获取返回的状态码
if(preg_match("/^HTTP\/1\.[1|0] (\d{3})/i",$line,$match)){
$rheaders["httpstatus"]=$match[1];
}
}
//解析http头部,把所有字段
if(preg_match("/^(.*): (.*)$/i",$line,$matches)){
$rheaders[$matches[1]]=$matches[2];
}
}
if($inheader&&($line=="\n"||$line=="\r\n")){
$inheader=0;
continue;
}
if($inheader==0)
{
//获得返回内容
$conntent.=$line;
}
}
fclose($fp);
return array($rheaders,$conntent);
}
?>
txt文件阅读不是很方便,对于超长的行,还得自动换行,行与行之间间隔太小,背景为白色。
本文介绍的程序能够批量把指定目录下的txt转化为htm文件,htm文件用浏览器打开后,根据txt文件的换行一样,且能够自动换行,字号为16px,行高为22px,背景色为淡蓝。
感兴趣的朋友,可以参考下。
<?php
/*
批量把某目录下的所有.txt文件转化为对应的htm文件,该htm文件包含有方便阅读的css样式
生成的htm文件放在同一目录下htm目录下
参数1:要转化的目录的路径
执行 php txt2htm.php "C:\\txt\\"
php txt2htm.php "/tmp/txt/"
php txt2htm.php .
*/
$basedir=$argv[1];
if(!$basedir||!is_dir($basedir))
{
die("please input dir.\n");
}
//改变工作目录
chdir($basedir);
$d = dir(".");
//创建输出目录
$outputdir="./htm/";
if(!is_dir($outputdir)){
mkdir($outputdir, 0700);
}
//判断是否创建成功
if(!is_dir($outputdir))
{
die("cannot mkdir.\n");
}
while (false !== ($entry = $d->read()))
{
//判断是不是文件
if(is_file($entry))
{
$filename=strtolower()($entry);
//判断是不是txt文件
if(stristr($filename,".txt"))
{
$wfile=$outputdir.basename($filename,".txt").".htm";
//若是文件已经存在,则跳过
if(file_exists($wfile))
{
echo "**********".$wfile." is exists ,skip this file**************\n";
continue;
}
if($str=file_get_contents($entry))
{
//写入样式,和换行
$str="<body >".str_replace()("\n","\n<br>",$str);
if($fp=fopen($wfile,"w"))
{
if (fwrite($fp,$str) === FALSE) {
//写入失败
echo $wfile." cover fail! fwrite fail\n";
}else{
echo $wfile." cover success!\n";
}
fclose($fp);
}else{
//创建文件失败
echo $wfile." cover fail! fopen fail\n";
}
}else{
//读取失败
echo $wfile." cover fail! file_get_contents fail\n";
}
}
}
}
$d->close();
?>
运行:
效果: