PHP常用工具类大全附全部代码下载
废话不多说了,直接给大家贴php代码了,具体代码如下所示:
<?php
/**
*助手类
*@authorwww.shouce.ren
*
*/
classHelper
{
/**
*判断当前服务器系统
*@returnstring
*/
publicstaticfunctiongetOS(){
if(PATH_SEPARATOR==':'){
return'Linux';
}else{
return'Windows';
}
}
/**
*当前微妙数
*@returnnumber
*/
publicstaticfunctionmicrotime_float(){
list($usec,$sec)=explode("",microtime());
return((float)$usec+(float)$sec);
}
/**
*切割utf-8格式的字符串(一个汉字或者字符占一个字节)
*
*@authorzhaojinhan
*@versionv1.0.0
*
*/
publicstaticfunctiontruncate_utf8_string($string,$length,$etc='...'){
$result='';
$string=html_entity_decode(trim(strip_tags($string)),ENT_QUOTES,'UTF-8');
$strlen=strlen($string);
for($i=0;(($i<$strlen)&&($length>0));$i++){
if($number=strpos(str_pad(decbin(ord(substr($string,$i,1))),8,'0',STR_PAD_LEFT),'0')){
if($length<1.0){
break;
}
$result.=substr($string,$i,$number);
$length-=1.0;
$i+=$number-1;
}else{
$result.=substr($string,$i,1);
$length-=0.5;
}
}
$result=htmlspecialchars($result,ENT_QUOTES,'UTF-8');
if($i<$strlen){
$result.=$etc;
}
return$result;
}
/**
*遍历文件夹
*@paramstring$dir
*@paramboolean$alltrue表示递归遍历
*@returnarray
*/
publicstaticfunctionscanfDir($dir='',$all=false,&$ret=array()){
if(false!==($handle=opendir($dir))){
while(false!==($file=readdir($handle))){
if(!in_array($file,array('.','..','.git','.gitignore','.svn','.htaccess','.buildpath','.project'))){
$cur_path=$dir.'/'.$file;
if(is_dir($cur_path)){
$ret['dirs'][]=$cur_path;
$all&&self::scanfDir($cur_path,$all,$ret);
}else{
$ret['files'][]=$cur_path;
}
}
}
closedir($handle);
}
return$ret;
}
/**
*邮件发送
*@paramstring$toemail
*@paramstring$subject
*@paramstring$message
*@returnboolean
*/
publicstaticfunctionsendMail($toemail='',$subject='',$message=''){
$mailer=Yii::createComponent('application.extensions.mailer.EMailer');
//邮件配置
$mailer->SetLanguage('zh_cn');
$mailer->Host=Yii::app()->params['emailHost'];//发送邮件服务器
$mailer->Port=Yii::app()->params['emailPort'];//邮件端口
$mailer->Timeout=Yii::app()->params['emailTimeout'];//邮件发送超时时间
$mailer->ContentType='text/html';//设置html格式
$mailer->SMTPAuth=true;
$mailer->Username=Yii::app()->params['emailUserName'];
$mailer->Password=Yii::app()->params['emailPassword'];
$mailer->IsSMTP();
$mailer->From=$mailer->Username;//发件人邮箱
$mailer->FromName=Yii::app()->params['emailFormName'];//发件人姓名
$mailer->AddReplyTo($mailer->Username);
$mailer->CharSet='UTF-8';
//添加邮件日志
$modelMail=newMailLog();
$modelMail->accept=$toemail;
$modelMail->subject=$subject;
$modelMail->message=$message;
$modelMail->send_status='waiting';
$modelMail->save();
//发送邮件
$mailer->AddAddress($toemail);
$mailer->Subject=$subject;
$mailer->Body=$message;
if($mailer->Send()===true){
$modelMail->times=$modelMail->times+1;
$modelMail->send_status='success';
$modelMail->save();
returntrue;
}else{
$error=$mailer->ErrorInfo;
$modelMail->times=$modelMail->times+1;
$modelMail->send_status='failed';
$modelMail->error=$error;
$modelMail->save();
returnfalse;
}
}
/**
*判断字符串是utf-8还是gb2312
*@paramunknown$str
*@paramstring$default
*@returnstring
*/
publicstaticfunctionutf8_gb2312($str,$default='gb2312')
{
$str=preg_replace("/[\x01-\x7F]+/","",$str);
if(empty($str))return$default;
$preg=array(
"gb2312"=>"/^([\xA1-\xF7][\xA0-\xFE])+$/",//正则判断是否是gb2312
"utf-8"=>"/^[\x{4E00}-\x{9FA5}]+$/u",//正则判断是否是汉字(utf8编码的条件了),这个范围实际上已经包含了繁体中文字了
);
if($default=='gb2312'){
$option='utf-8';
}else{
$option='gb2312';
}
if(!preg_match($preg[$default],$str)){
return$option;
}
$str=@iconv($default,$option,$str);
//不能转成$option,说明原来的不是$default
if(empty($str)){
return$option;
}
return$default;
}
/**
*utf-8和gb2312自动转化
*@paramunknown$string
*@paramstring$outEncoding
*@returnunknown|string
*/
publicstaticfunctionsafeEncoding($string,$outEncoding='UTF-8')
{
$encoding="UTF-8";
for($i=0;$i<strlen($string);$i++){
if(ord($string{$i})<128)
continue;
if((ord($string{$i})&224)==224){
//第一个字节判断通过
$char=$string{++$i};
if((ord($char)&128)==128){
//第二个字节判断通过
$char=$string{++$i};
if((ord($char)&128)==128){
$encoding="UTF-8";
break;
}
}
}
if((ord($string{$i})&192)==192){
//第一个字节判断通过
$char=$string{++$i};
if((ord($char)&128)==128){
//第二个字节判断通过
$encoding="GB2312";
break;
}
}
}
if(strtoupper($encoding)==strtoupper($outEncoding))
return$string;
else
return@iconv($encoding,$outEncoding,$string);
}
/**
*返回二维数组中某个键名的所有值
*@paraminput$array
*@paramstring$key
*@returnarray
*/
publicstaticfunctionarray_key_values($array=array(),$key='')
{
$ret=array();
foreach((array)$arrayas$k=>$v){
$ret[$k]=$v[$key];
}
return$ret;
}
/**
*判断文件/目录是否可写(取代系统自带的is_writeable函数)
*@paramstring$file文件/目录
*@returnboolean
*/
publicstaticfunctionis_writeable($file){
if(is_dir($file)){
$dir=$file;
if($fp=@fopen("$dir/test.txt",'w')){
@fclose($fp);
@unlink("$dir/test.txt");
$writeable=1;
}else{
$writeable=0;
}
}else{
if($fp=@fopen($file,'a+')){
@fclose($fp);
$writeable=1;
}else{
$writeable=0;
}
}
return$writeable;
}
/**
*格式化单位
*/
staticpublicfunctionbyteFormat($size,$dec=2){
$a=array("B","KB","MB","GB","TB","PB");
$pos=0;
while($size>=1024){
$size/=1024;
$pos++;
}
returnround($size,$dec)."".$a[$pos];
}
/**
*下拉框,单选按钮自动选择
*
*@param$string输入字符
*@param$param条件
*@param$type类型
*selectedchecked
*@returnstring
*/
staticpublicfunctionselected($string,$param=1,$type='select'){
$true=false;
if(is_array($param)){
$true=in_array($string,$param);
}elseif($string==$param){
$true=true;
}
$return='';
if($true)
$return=$type=='select'?'selected="selected"':'checked="checked"';
echo$return;
}
/**
*下载远程图片
*@paramstring$url图片的绝对url
*@paramstring$filepath文件的完整路径(例如/www/images/test),此函数会自动根据图片url和http头信息确定图片的后缀名
*@paramstring$filename要保存的文件名(不含扩展名)
*@returnmixed下载成功返回一个描述图片信息的数组,下载失败则返回false
*/
staticpublicfunctiondownloadImage($url,$filepath,$filename){
//服务器返回的头信息
$responseHeaders=array();
//原始图片名
$originalfilename='';
//图片的后缀名
$ext='';
$ch=curl_init($url);
//设置curl_exec返回的值包含Http头
curl_setopt($ch,CURLOPT_HEADER,1);
//设置curl_exec返回的值包含Http内容
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//设置抓取跳转(http301,302)后的页面
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
//设置最多的HTTP重定向的数量
curl_setopt($ch,CURLOPT_MAXREDIRS,3);
//服务器返回的数据(包括http头信息和内容)
$html=curl_exec($ch);
//获取此次抓取的相关信息
$httpinfo=curl_getinfo($ch);
curl_close($ch);
if($html!==false){
//分离response的header和body,由于服务器可能使用了302跳转,所以此处需要将字符串分离为2+跳转次数个子串
$httpArr=explode("\r\n\r\n",$html,2+$httpinfo['redirect_count']);
//倒数第二段是服务器最后一次response的http头
$header=$httpArr[count($httpArr)-2];
//倒数第一段是服务器最后一次response的内容
$body=$httpArr[count($httpArr)-1];
$header.="\r\n";
//获取最后一次response的header信息
preg_match_all('/([a-z0-9-_]+):\s*([^\r\n]+)\r\n/i',$header,$matches);
if(!empty($matches)&&count($matches)==3&&!empty($matches[1])&&!empty($matches[1])){
for($i=0;$i<count($matches[1]);$i++){
if(array_key_exists($i,$matches[2])){
$responseHeaders[$matches[1][$i]]=$matches[2][$i];
}
}
}
//获取图片后缀名
if(0<preg_match('{(?:[^\/\\\\]+)\.(jpg|jpeg|gif|png|bmp)$}i',$url,$matches)){
$originalfilename=$matches[0];
$ext=$matches[1];
}else{
if(array_key_exists('Content-Type',$responseHeaders)){
if(0<preg_match('{image/(\w+)}i',$responseHeaders['Content-Type'],$extmatches)){
$ext=$extmatches[1];
}
}
}
//保存文件
if(!empty($ext)){
//如果目录不存在,则先要创建目录
if(!is_dir($filepath)){
mkdir($filepath,0777,true);
}
$filepath.='/'.$filename.".$ext";
$local_file=fopen($filepath,'w');
if(false!==$local_file){
if(false!==fwrite($local_file,$body)){
fclose($local_file);
$sizeinfo=getimagesize($filepath);
returnarray('filepath'=>realpath($filepath),'width'=>$sizeinfo[0],'height'=>$sizeinfo[1],'orginalfilename'=>$originalfilename,'filename'=>pathinfo($filepath,PATHINFO_BASENAME));
}
}
}
}
returnfalse;
}
/**
*查找ip是否在某个段位里面
*@paramstring$ip要查询的ip
*@param$arrIP禁止的ip
*@returnboolean
*/
publicstaticfunctionipAccess($ip='0.0.0.0',$arrIP=array()){
$access=true;
$ip&&$arr_cur_ip=explode('.',$ip);
foreach((array)$arrIPas$key=>$value){
if($value=='*.*.*.*'){
$access=false;//禁止所有
break;
}
$tmp_arr=explode('.',$value);
if(($arr_cur_ip[0]==$tmp_arr[0])&&($arr_cur_ip[1]==$tmp_arr[1])){
//前两段相同
if(($arr_cur_ip[2]==$tmp_arr[2])||($tmp_arr[2]=='*')){
//第三段为*或者相同
if(($arr_cur_ip[3]==$tmp_arr[3])||($tmp_arr[3]=='*')){
//第四段为*或者相同
$access=false;//在禁止ip列,则禁止访问
break;
}
}
}
}
return$access;
}
/**
*@paramstring$string原文或者密文
*@paramstring$operation操作(ENCODE|DECODE),默认为DECODE
*@paramstring$key密钥
*@paramint$expiry密文有效期,加密时候有效,单位秒,0为永久有效
*@returnstring处理后的原文或者经过base64_encode处理后的密文
*
*@example
*
*$a=authcode('abc','ENCODE','key');
*$b=authcode($a,'DECODE','key');//$b(abc)
*
*$a=authcode('abc','ENCODE','key',3600);
*$b=authcode('abc','DECODE','key');//在一个小时内,$b(abc),否则$b为空
*/
publicstaticfunctionauthcode($string,$operation='DECODE',$key='',$expiry=3600){
$ckey_length=4;
//随机密钥长度取值0-32;
//加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。
//取值越大,密文变动规律越大,密文变化=16的$ckey_length次方
//当此值为0时,则不产生随机密钥
$key=md5($key?$key:'key');//这里可以填写默认key值
$keya=md5(substr($key,0,16));
$keyb=md5(substr($key,16,16));
$keyc=$ckey_length?($operation=='DECODE'?substr($string,0,$ckey_length):substr(md5(microtime()),-$ckey_length)):'';
$cryptkey=$keya.md5($keya.$keyc);
$key_length=strlen($cryptkey);
$string=$operation=='DECODE'?base64_decode(substr($string,$ckey_length)):sprintf('%010d',$expiry?$expiry+time():0).substr(md5($string.$keyb),0,16).$string;
$string_length=strlen($string);
$result='';
$box=range(0,255);
$rndkey=array();
for($i=0;$i<=255;$i++){
$rndkey[$i]=ord($cryptkey[$i%$key_length]);
}
for($j=$i=0;$i<256;$i++){
$j=($j+$box[$i]+$rndkey[$i])%256;
$tmp=$box[$i];
$box[$i]=$box[$j];
$box[$j]=$tmp;
}
for($a=$j=$i=0;$i<$string_length;$i++){
$a=($a+1)%256;
$j=($j+$box[$a])%256;
$tmp=$box[$a];
$box[$a]=$box[$j];
$box[$j]=$tmp;
$result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256]));
}
if($operation=='DECODE'){
if((substr($result,0,10)==0||substr($result,0,10)-time()>0)&&substr($result,10,16)==substr(md5(substr($result,26).$keyb),0,16)){
returnsubstr($result,26);
}else{
return'';
}
}else{
return$keyc.str_replace('=','',base64_encode($result));
}
}
publicstaticfunctiongbkToUtf8($str){
returniconv("GBK","UTF-8",$str);
}
/**
*取得输入目录所包含的所有目录和文件
*以关联数组形式返回
*author:flynetcn
*/
staticpublicfunctiondeepScanDir($dir)
{
$fileArr=array();
$dirArr=array();
$dir=rtrim($dir,'//');
if(is_dir($dir)){
$dirHandle=opendir($dir);
while(false!==($fileName=readdir($dirHandle))){
$subFile=$dir.DIRECTORY_SEPARATOR.$fileName;
if(is_file($subFile)){
$fileArr[]=$subFile;
}elseif(is_dir($subFile)&&str_replace('.','',$fileName)!=''){
$dirArr[]=$subFile;
$arr=self::deepScanDir($subFile);
$dirArr=array_merge($dirArr,$arr['dir']);
$fileArr=array_merge($fileArr,$arr['file']);
}
}
closedir($dirHandle);
}
returnarray('dir'=>$dirArr,'file'=>$fileArr);
}
/**
*取得输入目录所包含的所有文件
*以数组形式返回
*author:flynetcn
*/
staticpublicfunctionget_dir_files($dir)
{
if(is_file($dir)){
returnarray($dir);
}
$files=array();
if(is_dir($dir)&&($dir_p=opendir($dir))){
$ds=DIRECTORY_SEPARATOR;
while(($filename=readdir($dir_p))!==false){
if($filename=='.'||$filename=='..'){continue;}
$filetype=filetype($dir.$ds.$filename);
if($filetype=='dir'){
$files=array_merge($files,self::get_dir_files($dir.$ds.$filename));
}elseif($filetype=='file'){
$files[]=$dir.$ds.$filename;
}
}
closedir($dir_p);
}
return$files;
}
}
太多1000多行呢了保存不了,查看完整并下载
http://xiazai.jb51.net/201509/yuanma/Helper.rar
以上内容就是本文的全部叙述,喜欢的朋友可以直接下载源码哦。