PHP - 增强性mhash函数

今天使用php的加密函数mhash
的时候,报错: Fatal error
: Call to undefined function mhash()

mhash是php的内置函数但是使用却报错..

一番研究总结两种方法:

1,导入php_mhash.dll扩展文件,除此之外还要导入 libmhash.dll (mhash 库的载入依赖这个文件) ,

在 Apache 的配置文件 Httpd.conf 中加载   LoadFile C:/php/libmhash.dll” 。

2,使用自定义的mhash增强函数。

function hmac_md5($key, $data)
{
    if (extension_loaded('mhash'))
    {
        return bin2hex(mhash
(MHASH_MD5, $data, $key));
    }

    $b = 64;
    if (strlen($key) > $b)
    {
        $key = pack('H*', md5($key));
    }
    $key  = str_pad($key, $b, chr(0x00));
    $ipad = str_pad('', $b, chr(0x36));
    $opad = str_pad('', $b, chr(0x5c));

    $k_ipad = $key ^ $ipad;
    $k_opad = $key ^ $opad;

    return md5($k_opad . pack('H*', md5($k_ipad . $data)));
}

hmac_md5
函数里的参数$key和$data对应mhash原有的3,2参数。

这两个方法都可以顺利的使用上php
mhash
加密函数

php使用fsockopen传送POST到別的URL并取得回应內容

如果不需要传送参数或是使用GET method传送可以直接使用fopen()或是file_get_contents()函式获得回应內容
但是如果需要不经过表单就送出POST给某URL就需要使用curl相关函式或是fsockopen()传送

curl的用法比较简单可以咕狗看看(但是php必须要先安裝curl才可以用),这边要讲的是fsockopen().

//接收POST參數的URL
$url = 'http://www.google.com';

//POST參數,在這個陣列裡,索引是name,值是value,沒有限定組數
$postdata = array(
'post_name'=>'post_value','acc'=>'hsin','nick'=>'joe');

//函式回覆的值就是取得的內容
$result = sendpost($url,$postdata);
 
function sendpost($url, $data){
//先解析url 取得的資訊可以看看http://www.php.net/parse_url
$url = parse_url($url);
$url_port = $url['port']==''?(($url['scheme']=='https')?443:80):$url['port'];
if(!$url) return "couldn't parse url";

//對要傳送的POST參數作處理
$encoded = "";
while(list($k,$v)=each($data)){
  $encoded .= ($encoded?'&':'');
  $encoded .= rawurlencode($k)."=".rawurlencode($v);
}

//開啟一個socket
$fp = fsockopen($url['host'],$url_port);
if(!$fp) return "Failed to open socket to ".$url['host'];

//header的資訊
fputs($fp,'POST '.$url['path'].($url['query']?'?'.$url['query']:'')." HTTP/1.0rn");
fputs($fp,"Host: ".$url['host']."n");
fputs($fp,"Content-type: application/x-www-form-urlencodedn");
fputs($fp,"Content-length: ".strlen($encoded)."n");
fputs($fp,"Connection: closenn");
fputs($fp,$encoded."n");

//取得回應的內容
$line = fgets($fp,1024);
if(!eregi("^HTTP/1.. 200", $line)) return;
$results = "";
$inheader = 1;
while(!feof($fp)){
  $line = fgets($fp,2048);
  if($inheader&&($line == "n" || $line == "rn")){
    $inheader = 0;
  }elseif(!$inheader){
    $results .= $line;
  }
}

fclose($fp);
return $results;
}

PHP读取远程文件的三种方法



file_get_contents
<?php
$url = http://www.xxx.com/;
$contents = file_get_contents($url);
//如果出现中文乱码使用下面代码
//$getcontent = iconv("gb2312″, "utf-8″,file_get_contents($url));
//echo $getcontent;
echo $contents;
?>


curl
<?php
$url = "//sjolzy.cn/";
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
//在需要用户检测的网页里需要增加下面两行
//curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
//curl_setopt($ch, CURLOPT_USERPWD, US_NAME.":".US_PWD);
$contents = curl_exec($ch);
curl_close($ch);
echo $contents;
?>




fopen->fread->fclose
<?php
$handle = fopen ("//sjolzy.cn/", "rb");
$contents = "";
do {
$data = fread($handle, 8192);
if (strlen($data) == 0) {
break;
}
$contents .= $data;
} while(true);
fclose ($handle);
echo $contents;
?>

Ps1.使用file_get_contents和fopen必须空间开启allow_url_fopen。方法:编辑php.ini,设置 allow_url_fopen = On,allow_url_fopen关闭时fopen和file_get_contents都不能打开远程文件。

Ps2.使用curl 必须空间开启curl。
建议打开URL时使用file_get_contents()方法,可优化打开速度
 

php实现的基本的数据结构和算法,什么二叉树、二叉搜索树、AVL树、B树、链表和常见排序、搜索算法

 

goo
gle的代码
搜索
里面发现一个使用
php
实现的基本的数据
结构和算法
,什么二叉树、二叉搜索
树、AVL树、B树、链表和常见
排序
搜索
算法
等等,而且全部是使用
面向对象来实现的,确是是很强。

源码地址
:http://www
.brpreiss.com/books/opus11/public
/Opus11-1.0.tar.gz

文档
地址
:http://www
.brpreiss.com/books/opus11/

php在线解压缩工具

终于找到几款好用的php在线解压缩工具了!
如果你的空间不是通过cPanel管理的,那么强力推荐你使用,特别是国内用户

解决问题
XOOPS程序以及module的文件通常都很,一个小站点都有好几千个文件,这种情况下,无论是安装还是备份网站,如果用FTP一个个上传下载文件,即使你的空间速度很快,还是要花很长时间!!

解决思路:
文件压缩成一两个压缩包,再上传下载就能大大节约时间
上传(安装):在本地先把文件压缩为一两个压缩包,接着用FTP上传,最后用在线解压工具解压。
下载(备份):先用在线解压工具压缩为一两个压缩包,接着下载,最后在本地解压。

解决方案

1、phpzip: 浩公出品的软件,绝对五星级推荐:http://www.pview.net/Download/
这个软件有两种形式php程序和windows下运行的exe软件。它们的目的都是解压缩文件,但是用的场合不同,一个是在服务器空间运行,一个是在本地运行,两者配合,无敌!一个小小的遗憾就是这个软件生成的压缩包不是标准的压缩格式。不过这并不影响它成为五星级软件!强烈推荐大家使用

2、dUnzip2:这是巴西人Alexandre Tedeschi出品的一个php:http://www.phpclasses.org/browse/package/2495.html
它在phpclasses.org的压缩库中排在前三,确实很酷!大家看一下readme,就知道如何使用了。可以单独使用,也可以整合到自己定制的软件中,如wordpress的一个自动安装插件就是基于这个制作的:http://mattread.com/projects/wp-plug...er-the-plugin/
PS:如果哪位XOOPS高手也制作一个似的module,用于上传解压及安装theme、module等,那就爽呆了!!!

3、PclZip:PhpConcept出品的一个php:http://phpzip.sourceforge.net/
就像dUnzip2一样,大家可以通过它定制相应的软件,如:CMSware在线解压系统v1.3 就是基于这个制作的。“CMSware在线解压系统”也是值得推荐的一个软件,不过它总是出现一些错误的警告,很让人郁闷。


更新: 发现比phpzip更好的软件
·faisun_unzip -在线解压ZIP文件程序 V1.0
·faisun_zip -在线压缩ZIP文件程序 V1.0
这里下载:http://www.softpure.com/html/show_type/1103.htm

其优点主要有:
1、支持流行的zip格式
2、使用方便:特别是自动探测服务器上的zip文件,可通过下拉框选择
3、消耗的内存小:我在虚拟主机上用phpzip经常遇到超过内存限制的情况,而faisun_unzip却没有这种情况。
4、界面简洁美观。

=======================================
总结Final:
为方便快速上传安装,推荐使用在线解压缩工具:faisun_unzip v1.0
为方便快速下载备份,推荐使用在线压缩工具:faisun_zip v1.0
为方便快速删除大量文件,推荐使用浩公phpzip中的rm.php
=======================================