为方便模拟asp里面的xmlhttp组件写的phphttp请求类,支持gzip压缩。
类名 :HttpRequest($url="",$method="GET",$useSocket=0)
//$url为请求的地址;默认请求方法为GET;$useSocket默认为0,使用fsockopen方法,如果设置为1则使用socket_create方法
方法:
open($ip="",$port=-1) //打开同服务器的连接,默认不设置这两个参数(在linux用时,请求的不是hostname解析的IP,因此加了这两个参数,以连接真实的服务器IP)
setTimeout($timeout=0) //设置获取数据的超时时间,必须在send方法调用之前设置才有效,单位秒,默认值0为不限制
setRequestHeader($key,$value="") //设置请求头,必须在send方法调用之前设置才有效
removeRequestHeader($key,$value="") //移除指定键值的请求头,必须在send方法调用之前调用才有效
send($data="") //发送数据$data到服务器
getResponseBody() //获取服务器返回的文本
getAllResponseHeaders() //获取服务器响应的所有头信息
getResponseHeader($key) //获取服务器响应的某个头信息,例如Server,Set_Cookie等
属性:
$url //要请求的url
$method //请求方法(POST/GET)
$port //请求的端口
$hostname //请求的主机名
$uri //url的文件部分
$protocol //请求协议(http)(包括本属性的以上5个属性均由程序自动通过url分析)
$excption //异常信息
$_headers=array() //请求头array("key"=>"value")
$_senddata //发送到服务器的数据
$status //返回的状态码
$statusText //状态信息
$HttpProtocolVersion //服务器的HTTP协议版本
注意:
Host头由程序自动设置,当用POST方法请求时,Content-Length和Content-Type已被自动设置。
支持gzip压缩的页面。
点这里下载完整代码。
本文介绍的内容实现对字符串进行编码和解码,并可在地址栏传递使用。
本方法使用的是替换字符,将/和+分别替换成-和(并将最后的等号转换成一个数字,代表等号出现的次数。
<?php
function base64_en($str){
$result = base64_encode($str);
$result = str_replace()("/","-",$result);
$result = str_replace("+","(",$result);
$i=0;
while(substr($result,strlen($result)-1)=="="){
$result = substr($result,0,strlen($result)-1);
$i++;
}
return $result . $i;
}
function base64_de($str){
$result = str_replace("-","/",$str);
$result = str_replace("(","+",$result);
$last = intval(substr($result,strlen($result)-1));
$normal = substr($result,0,strlen($result)-1);
if($last==0){return base64_decode($normal);}
for($i=1;$i<=$last;$i++){
$normal .= "=";
}
return base64_decode($normal);
}
?>
数字索引数组:
bool usort( array &$array, callback $cmp_function )
usort函数对指定数组(参数1)按指定方式(参数2)进行排序。
对多维数组进行排序时,多维数组的每个元素又是一数组类型,而两个数组如何比较大小?
这是需要用户自定义的(是按每个数组的第一元素比较还是…)。
//定义多维数组
$a = array(
array("sky", "blue"),
array("apple", "red"),
array("tree", "green"));
//自定义数组比较函数,按数组的第二个元素进行比较。
function my_compare($a, $b) {
if ($a[1] < $b[1])
return -1;
else if ($a[1] == $b[1])
return 0;
else
return 1;
}
//排序
usort($a, 'my_compare');
//输出结果
foreach($a as $elem) {
echo "$elem[0] : $elem[1]<br />";
}
?>
结果为:
sky : blue
tree : green
apple : red
关联数组:
bool uasort(array &$array, callback $cmp_function)
bool uksort(array &$array, callback $cmp_function)
uasort, uksort用法与usort相同,其中uasort()对关联数组的值(value)进行排序,uksort()对关联数组的关键字(key)进行排序。
<?php
$a = array(
'Sunday' => array(0,'7th'),
'Friday' => array(5,'5th'),
'Tuesday'=> array(2,'2nd'));
function my_compare($a, $b) {
if ($a[1] < $b[1])
return -1;
else if ($a[1] == $b[1])
return 0;
else
return 1;
}
//按$a数组的值的第二个元素(7th,5th,2nd)进行排序
uasort($a, 'my_compare');
foreach($a as $key => $value) {
echo "$key : $value[0] $value[1]<br />";
}
//按$a数组的关键字的第二个字符(r,u,u)进行排序
uksort($a, 'my_compare');
foreach($a as $key => $value) {
echo "$key : $value[0] $value[1]<br />";
}
?>
结果为:
Tuesday : 2 2nd
Friday : 5 5th
Sunday : 0 7th
Friday : 5 5th
Sunday : 0 7th
Tuesday : 2 2nd