一些常用封装的PHP函数

//获取http头信息
function get_http_header(){
    foreach ($_SERVER as $name => $value) {
        if (substr($name, 0, 5) == 'HTTP_') {
            $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
        }
    }
    return $headers;
}

//导出.csv文件
function export_csv($headers = array(),$bodys = array(),$csv_file) {

    $head   = implode(";", $headers);
    $header = iconv('utf-8', 'gb2312', $head);
    $body   = array();
    foreach ($bodys as $key){
        $string = iconv('utf-8', 'gb2312',implode(";", $key) );
        $body[] = $string;
    }

    $fp = fopen($csv_file,"w");
    $count = 0;
    if($fp){
        if(fputcsv($fp, explode(";",$header))) $count ++;
        foreach($body as $line){
            if(fputcsv($fp, explode(";",$line))) $count ++;
        }
    }
    fclose($fp);
    $length   = 1 + count($body);
    if($count == $length) return TRUE;
    else                 return FALSE;
}


//下载文件或下载.zip文件
function download_data($file = '',$flag = FALSE){
    if(!$file){
        return FALSE;
    }

    if($flag == TRUE){
        $zip = new ZipArchive();
        $filename = dirname($file)."/".time().'.zip';
        $zip->open($filename,ZipArchive::CREATE);
        $zip->addFile($file);
        $zip->close();

        header ( "Content-Type: application/zip" );
        header("Content-Transfer-Encoding: Binary");
        header("Content-length: ".filesize($filename));
        header("Content-disposition: attachment; filename=".basename($filename));
        readfile($filename);

        unlink($filename);
    }else{
        header("Content-type: application/force-download");
        header("Content-Transfer-Encoding: Binary");
        header("Content-length: ".filesize($file));
        header("Content-disposition: attachment; filename=".basename($file));
        readfile($file);
    }

    return TRUE;
}


//curl获取网页信息
function get_curl_res($url = '', $data = array()){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);

    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

   // curl_setopt($ch, CURLOPT_HTTPAUTH , CURLAUTH_BASIC);
   // curl_setopt($ch, CURLOPT_USERPWD  , 'api:key-71390a3b5b52e5918f88f2f0e91fc580');

    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

    $res = curl_exec( $ch );
    curl_close( $ch );
  var_dump($res);
}

//格式化输出
function render_output( $data ,$format = 'json' , $http_code = 200){

    switch($http_code){
        default:
        case 200:

            break;
        case 403:
            header('HTTP/1.0 403 Forbidden');

            break;
        case 400:
            header('HTTP/1.0 400 Bad Request');

            break;
    }

    switch($format){

        case 'xml':
            require_once SYSDIR.'/libraries/lib/array2xml.php';
            Array2XML::init('1.0', 'utf-8');
            $array2xml = Array2XML::createXML('response', $data);
            header('Content-type: application/xhtml+xml');
            die( $array2xml->saveXML() );
            break;

        case 'json':

            header("Content-type: application/json");
            die(json_encode($data));
            break;
        case 'jsonp':
            $ci = &get_instance();
            $cb = $ci->input->get('cb') ? $ci->input->get('cb') : 'callback';
            header("Content-type: application/json");
            exit( $cb.'('.json_encode($data).')');
            break;
    }
}

function curl_get($url = '', $timeout=5){
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $file_contents = curl_exec($ch);
    curl_close($ch);
    return $file_contents;
}

function curl_post($url = '', $params = array(), $timeout = 30){
    $ch = curl_init();//初始化curl
    curl_setopt($ch,CURLOPT_URL,$url);//抓取指定网页
    curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
    curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
    $data = curl_exec($ch);//运行curl
    curl_close($ch);
    return($data);//输出结果
}

function curl_get_https($url = ''){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.1 Safari/537.11');
    $res = curl_exec($ch);
    $rescode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch) ;
    return $res;
}

//写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
function my_scandir($dir = ''){
    $files=array();
    if(is_dir($dir)) {
        if($handle=opendir($dir)) {
            while(($file=readdir($handle))!==false) {
                if($file!="." && $file!="..") {
                    if(is_dir($dir."/".$file)) {
                        $files[$file]=my_scandir($dir."/".$file);
                    }
                    else {
                        $files[]=$dir."/".$file;
                    }
                }
            }
            closedir($handle);
            return $files;
        }
    }
}

//删除指定目录下的所有文件,不删除目录文件夹
function delfile_underdir($dir = ''){
    if($handle = opendir($dir)){
        while(FALSE !== ($item = readdir($handle))){
            if(!in_array($item,array('.','..'))){
                if(is_dir($dir.'/'.$item)){
                    delfile_underdir($dir.'/'.$item);
                }else{
                    if(unlink($dir.'/'.$item)){
                        echo "Delete $dir/$item success"."[".date('Y-m-d H:i:s')."]\n";
                    }
                }
            }
        }
        closedir($handle);
    }
}

//读取文件的后缀名
function get_file_ext($filename = '', $type = 1){
    if($type == 1){
        //方法一:先把文件名切割成数组,然后想办法取得数组最后一个元素
        $pic = explode('.',$filename);
        return $pic[count($pic)-1];
    }elseif($type == 2){
        //用pathinfo()函数。
        $pic = pathinfo($filename);
        $pic['extension'];
    }
}

//获取当前页面完整url地址的函数
function get_current_url(){
    $url = (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443') ? 'https://' : 'http://';
    $url .= $_SERVER['HTTP_HOST'];
    $url .= isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : urlencode($_SERVER['PHP_SELF']) . '?' . urlencode($_SERVER['QUERY_STRING']);
    return $url;
}

//计算一年多少个星期,返回一个星期的开始时间和结束时间(可选返回时间戳或日期)
function getWeekStartAndEnd ($year,$week=1) {
    header("Content-type:text/html;charset=utf-8");
    date_default_timezone_set("Asia/Shanghai");
    $year = (int)$year;
    $week = (int)$week;
    //按给定的年份计算本年周总数
    $date = new DateTime;
    $date->setISODate($year, 53);
    $weeks = max($date->format("W"),52);
    //如果给定的周数大于周总数或小于等于0
    if($week>$weeks || $week<=0){
        return false;
    }
    //如果周数小于10
    if($week<10){
        $week = '0'.$week;
    }
    //当周起止时间戳
    $timestamp['start'] = strtotime($year.'W'.$week);
    $timestamp['end'] = strtotime('+1 week -1 day',$timestamp['start']);
    //当周起止日期
    $timeymd['start'] = date("Y-m-d",$timestamp['start']);
    $timeymd['end'] = date("Y-m-d",$timestamp['end']);
    //返回起始时间戳
    return $timestamp;
    //返回日期形式
    //return $timeymd;
}

function utf8_to_gbk( $message = '' )
{
    $msg = iconv('utf-8', 'gbk', $message);
    if (!$msg) {
        $msg = '';
        for ($i = 0; $i <= mb_strlen($message, 'utf-8'); $i++) {
            $str = mb_substr($message, $i, 1, 'utf-8');
            $res = @iconv('utf-8', 'gbk', $str);
            if ($res) {
                $msg .= $res;
            }
        }
    }
    return $msg;
}

// This method generates a csv file and then returns the generated content

if (!function_exists('arrayToCSV')) {

    function arrayToCSV($query, $fields, $filename = "CSV") {
        if (count($query) == 0) {
            return "The query is empty. It doesn't have any data.";
        } else {
            $headers = rowCSV($fields);

            $data = "";
            foreach ($query as $row) {
                $line = rowCSV($row);
                $data .= trim($line) . "\n";
            }
            $data = str_replace("\r", "", $data);

            $content = $headers . $data;
            $filename = date('YmdHis') . "_export_{$filename}.csv";

            header("Content-Description: File Transfer");
            header("Content-type: application/csv");
            header("Content-Disposition: attachment; filename={$filename}");
            header("Content-Transfer-Encoding: binary");
            header("Expires: 0");
            header("Cache-Control: must-revalidate");
            header("Pragma: public");
            header("Content-Length: " . strlen($content));
            return $content;
        }
    }
}

function rowCSV($fields) {
    $output = '';
    $separator = '';
    foreach ($fields as $field) {
        if (preg_match('/\\r|\\n|,|"/', $field)) {
            $field = '"' . str_replace('"', '""', $field) . '"';
        }
        $output .= $separator . $field;
        $separator = ',';
    }
    return $output . "\r\n";
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值