四时宝库

程序员的知识宝库

PHP常用函数,记录下(php常用语句)

PHP常用函数,记录下

/**

* UTF-8编码 GBK编码相互转换/(支持数组)

*

* @param array $str 字符串,支持数组传递

* @param string $in_charset 原字符串编码

* @param string $out_charset 输出的字符串编码

* @return array

*/

function array_iconv($str, $in_charset="gbk", $out_charset="utf-8"){

if(is_array($str)){

foreach($str as $k => $v){

$str[$k] = array_iconv($v);

}

return $str;

}else{

if(is_string($str)){

// return iconv('UTF-8', 'GBK//IGNORE', $str);

return mb_convert_encoding($str, $out_charset, $in_charset);

}else{

return $str;

}

}

}

/**

*gbk转utf-8 简单转换

*@param $data

*@return array

*/

function gbk2utf8($data){

if(is_array($data)){

return array_map('gbk2utf8', $data);

}

return iconv('gbk','utf-8',$data);

}

/**

*导出Excel文档数据

*@param str $title 导出文档名称

*@param array $header 导出文档字段标题

*@param array $field 方便与标题对齐的标题

*@param array $data 文档的内容数据

*@param str $dir 导出文档保存地址(type=2时为生成的临时文件地址)

*@param str $ext 导出文档后缀格式,默认xls

*@param str $type 导出类型(1:只保存不下载,2:只下载不保存)

*@return str 文件地址

*示例:

*$title = 'test';

*$header = array('ID','用户名','联系方式');

*$field = array('0','1','2');

*$data = array(

*array($field[0]=>'1',$field[1]=>'小明',$field[2]=>'123456'),//直接用$field数组数据

*array('0'=>'2','1'=>'xiaolan','2'=>'124578'),//直接与$field数据一样

*array('0'=>'3','1'=>'xiaohei','2'=>'147852'),

*array('0'=>'4','1'=>'xiaodian','2'=>'1598753'),

*);

*$dir = 'excel/excel/';

*export_excel($title,$header,$field,$data,$dir);

*/

function export_excel($title,$header,$field,$data,$dir,$ext='.xls',$type=2){

ob_clean();

header("Content-type:text/html;charset=utf-8");

require_once 'diyupload/excel/PHPExcel.php';// 引入phpexcel

$data=array_iconv($data);//数据编码转换

$header=array_iconv($header);//数据编码转换

$phpexcel = new PHPExcel();

// 设置表头

$chr = 65;

foreach($header as $k=>$v){

$phpexcel->setActiveSheetIndex(0)->setCellValue(chr($chr).'1', $v);

$chr++;

}

// 标签名

$phpexcel->getActiveSheet()->setTitle($title);

// 使用第一个表

$phpexcel->setActiveSheetIndex(0);

$objWriter = new PHPExcel_Writer_Excel5($phpexcel);

//$objWriter = new PHPExcel_Writer_Excel2007($phpexcel);

foreach ($data as $key => $value) {

//表格是从2开始的 因为上面还有表头

$i = $key + 2;

$chr = 65;

foreach($field as $v){

$phpexcel->getActiveSheet()->setCellValue(chr($chr) . $i, $value[$v]);//这里是设置单元格的内容

$chr++;

}

}

if (!is_dir($dir)) {

mkdir($dir, 0777, TRUE);

}

$filename = $dir . time() . rand(10000, 99999) . $ext;

$objWriter->save($filename);

//exit;

if($type==1){//导出表格到文件夹

return $filename;

}elseif($type==2){//导出表格到下载

downdetails($filename);

unlink($filename);

return $filename;

}

}

/**

*从某文件夹中将文件下载

*@param str $file_path 文件所在地址,包含文件名

*

*/

function downdetails($file_path){

ob_clean();//下载前先清空缓存区,需要PHP开启ob

header("Content-type:text/html;charset=utf-8");

//$file_path="testMe.txt";

//用以解决中文不能显示出来的问题

//$file_name=iconv("utf-8","gb2312",$file_name);

//$file_sub_path=$_SERVER['DOCUMENT_ROOT']."marcofly/phpstudy/down/down/";

//$file_path=$file_sub_path.$file_name;

//首先要判断给定的文件存在与否

if(!file_exists($file_path)){

echo "没有该文件文件";

return ;

}

$fp=fopen($file_path,"r");

$file_size=filesize($file_path);

$file_name=time().'.xls';

//下载文件需要用到的头

Header("Content-type: application/octet-stream");

Header("Accept-Ranges: bytes");

Header("Accept-Length:".$file_size);

Header("Content-Disposition: attachment; filename=".$file_name);

$buffer=1024;

$file_count=0;

//向浏览器返回数据

while(!feof($fp) && $file_count<$file_size){

$file_con=fread($fp,$buffer);

$file_count+=$buffer;

echo $file_con;

}

fclose($fp);

}

/**

*PHP下载,无其他插件

*@param str $postname form对应input标签中的ID值

*@param str $dir 需要上传之后保存的路径

*@param array $filtype 允许上传的文件类型(为空则默认为jpg,jpeg,gif,png)

*@return str 成功上传返回路径与名称,失败返回提示语

*

*/

function uploads($postname,$dir,$filtype){

$tempFile = $_FILES[$postname]['tmp_name'];

if(empty($filtype) or isset($filtype)){

$fileTypes = array('jpg','jpeg','gif','png');//默认允许上传的文件类型

}else{

$fileTypes=$filtype;

}

$fileParts = pathinfo($_FILES[$postname]['name']);

$extension = strtolower($fileParts['extension']);

$name = date('mdHis').'-'.rand(100,999).'.'.$extension;

$targetFolder = '/'.$dir;

if(!is_dir($targetFolder)){mkdir($targetFolder,0777,TRUE);}

@chmod($targetFolder,0777);

$loca = $targetFolder.'/'.$name;

if(in_array($extension,$fileTypes)) {

if(copy($tempFile,$loca)){

return $dir.'/'.$name;

}

}else{

return '上传失败';

}

}

/**

*获取客户端IP地址

*@return str $ip 返回客户端IP地址

*

*/

function get_real_ip(){

$ip=false;

if(!empty($_SERVER['HTTP_CLIENT_IP'])){

$ip=$_SERVER['HTTP_CLIENT_IP'];

}

if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){

$ips=explode (', ', $_SERVER['HTTP_X_FORWARDED_FOR']);

if($ip){ array_unshift($ips, $ip); $ip=FALSE; }

for ($i=0; $i < count($ips); $i++){

if(!eregi ('^(10│172.16│192.168).', $ips[$i])){

$ip=$ips[$i];

break;

}

}

}

return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);

}

/**

*将字符串或数组转为json对象

*@param str or array $data 待转换数据

*@param str $charset 数据编码类型

*@return json

*/

function fix_json( $data,$charset = 'utf-8'){

if( is_string( $data ) ){

$data = preg_replace("/([\r\n\t\f])/"," ",$data);

$temp = array();

if( $charset == "gbk" ){

$array = json_decode(iconv('GBK', 'UTF-8', $data),true);

if( is_array($array) ){

foreach ($array as $key => $val){

$temp[ iconv('UTF-8',$charset, $key) ] = iconv('UTF-8', $charset, $val);

}

}

}else{

$temp = json_decode($data,true);

}

}else{

$temp = array();

if( $charset == "gbk" && PHP_VERSION >= '5.2' ){

foreach ($data as $key => $val){

$temp[ iconv($charset,'UTF-8', $key) ] = iconv( $charset,'UTF-8', $val);

}

}else{

$temp = $data;

}

$temp = json_encode($temp);

}

return $temp;

}

/**

*多维数组转一维数组

*@param array $multi 待转的多维数组数据

*@return array

*/

function arrToOne($multi) {

$arr = array();

foreach ($multi as $key => $val) {

if( is_array($val) ) {

$arr = array_merge($arr, arrToOne($val));

} else {

$arr[] = $val;

}

}

return $arr;

}

说明:Excel导出和问卷下载前最好使用ob_clean()清除缓存区,可避免乱码和文件损坏,ob_clean()需要PHP开启ob

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接