美文网首页PHP
php 常用方法

php 常用方法

作者: b829d290ee95 | 来源:发表于2017-07-19 13:44 被阅读30次

    讲arrray转为xml

    /**
    * 输出xml字符
    * @param $params 参数名称
    * return string 返回组装的xml
    **/
    public function data_to_xml( $params ){
        if(!is_array($params)|| count($params) <= 0)
        {
            return false;
        }
        $xml = "<xml>";
        foreach ($params as $key=>$val)
        {
            if (is_numeric($val)){
                $xml.="<".$key.">".$val."</".$key.">";
            }else{
                $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
            }
        }
        $xml.="</xml>";
        return $xml; 
    }
    
    

    将xml转为array

    /**
    * 将xml转为array
    * @param string $xml
    * return array
    */
    public function xml_to_data($xml){ 
        if(!$xml){
            return false;
        }
        //将XML转为array
        //禁止引用外部xml实体
        libxml_disable_entity_loader(true);
        $data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); 
        return $data;
    }
    

    object 转 array

     /**
         * object 转 array
         */
        function object_to_array($obj)
        {
            $_arr = is_object($obj) ? get_object_vars($obj) : $obj;
            foreach ($_arr as $key => $val)
            {
                $val = (is_array($val) || is_object($val)) ? object_to_array($val) : $val;
                $arr[$key] = $val;
            }
            return $arr;
        }
    

    curl get模拟请求

        function getJson($url){
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $output = curl_exec($ch);
            curl_close($ch);
            return json_decode($output, true);
        }
    
    
    

    设置guid

    function Guid(){
        if (function_exists('com_create_guid')){
            return com_create_guid();
        }else{
            mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.
            $charid = strtoupper(md5(uniqid(rand(), true)));
            $hyphen = chr(45);// "-"
            $uuid = chr(123)// "{"
                .substr($charid, 0, 8).$hyphen
                .substr($charid, 8, 4).$hyphen
                .substr($charid,12, 4).$hyphen
                .substr($charid,16, 4).$hyphen
                .substr($charid,20,12)
                .chr(125);// "}"
            return $uuid;
        }
    }
    
    

    密码加密解密

    function encryptDecrypt($key, $string, $decrypt){ 
        if($decrypt){ 
            $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12"); 
            return $decrypted; 
        }else{ 
            $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key)))); 
            return $encrypted; 
        } 
    }
    使用方法如下:
    //以下是将字符串“Helloweba欢迎您”分别加密和解密 
    //加密: 
    echo encryptDecrypt('password', 'Helloweba欢迎您',0); 
    //解密: 
    echo encryptDecrypt('password', 'z0JAx4qMwcF+db5TNbp/xwdUM84snRsXvvpXuaCa4Bk=',1);
    

    PHP获取文件扩展名(后缀)

    以下函数可以快速获取文件的扩展名即后缀。
    function getExtension($filename){ 
      $myext = substr($filename, strrpos($filename, '.')); 
      return str_replace('.','',$myext); 
    }
    使用方法如下:
    $filename = '我的文档.doc'; 
    echo getExtension($filename);
    
    

    PHP获取文件大小并格式化

    
    以下使用的函数可以获取文件的大小,并且转换成便于阅读的KB,MB等格式。
    function formatSize($size) { 
        $sizes = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB"); 
        if ($size == 0) {  
            return('n/a');  
        } else { 
          return (round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizes[$i]);  
        } 
    }
    使用方法如下:
    $thefile = filesize('test_file.mp3'); 
    echo formatSize($thefile);
    

    PHP列出目录下的文件名

    
    如果你想列出目录下的所有文件,使用以下代码即可:
    function listDirFiles($DirPath){ 
        if($dir = opendir($DirPath)){ 
             while(($file = readdir($dir))!== false){ 
                    if(!is_dir($DirPath.$file)) 
                    { 
                        echo "filename: $file<br />"; 
                    } 
             } 
        } 
    }
    使用方法如下:
    listDirFiles('home/some_folder/');
    

    PHP获取当前页面URL

    以下函数可以获取当前页面的URL,不管是http还是https。
    function curPageURL() { 
        $pageURL = 'http'; 
        if (!empty($_SERVER['HTTPS'])) {$pageURL .= "s";} 
        $pageURL .= "://"; 
        if ($_SERVER["SERVER_PORT"] != "80") { 
            $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; 
        } else { 
            $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; 
        } 
        return $pageURL; 
    }
    使用方法如下:
    echo curPageURL();
    

    PHP强制下载文件

    有时我们不想让浏览器直接打开文件,如PDF文件,而是要直接下载文件,那么以下函数可以强制下载文件,函数中使用了application/octet-stream头类型。
    function download($filename){ 
        if ((isset($filename))&&(file_exists($filename))){ 
           header("Content-length: ".filesize($filename)); 
           header('Content-Type: application/octet-stream'); 
           header('Content-Disposition: attachment; filename="' . $filename . '"'); 
           readfile("$filename"); 
        } else { 
           echo "Looks like file does not exist!"; 
        } 
    }
    使用方法如下:
    download('/down/test_45f73e852.zip');
    

    PHP截取字符串长度

    我们经常会遇到需要截取字符串(含中文汉字)长度的情况,比如标题显示不能超过多少字符,超出的长度用…表示,以下函数可以满足你的需求。
    /* 
     Utf-8、gb2312都支持的汉字截取函数 
     cut_str(字符串, 截取长度, 开始长度, 编码); 
     编码默认为 utf-8 
     开始长度默认为 0 
    */ 
    function cutStr($string, $sublen, $start = 0, $code = 'UTF-8'){ 
        if($code == 'UTF-8'){ 
            $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/"; 
            preg_match_all($pa, $string, $t_string); 
    
            if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."..."; 
            return join('', array_slice($t_string[0], $start, $sublen)); 
        }else{ 
            $start = $start*2; 
            $sublen = $sublen*2; 
            $strlen = strlen($string); 
            $tmpstr = ''; 
    
            for($i=0; $i<$strlen; $i++){ 
                if($i>=$start && $i<($start+$sublen)){ 
                    if(ord(substr($string, $i, 1))>129){ 
                        $tmpstr.= substr($string, $i, 2); 
                    }else{ 
                        $tmpstr.= substr($string, $i, 1); 
                    } 
                } 
                if(ord(substr($string, $i, 1))>129) $i++; 
            } 
            if(strlen($tmpstr)<$strlen ) $tmpstr.= "..."; 
            return $tmpstr; 
        } 
    }
    使用方法如下:
    $str = "jQuery插件实现的加载图片和页面效果"; 
    echo cutStr($str,16);
    

    PHP获取客户端真实IP

    我们经常要用数据库记录用户的IP,以下代码可以获取客户端真实的IP:
    //获取用户真实IP 
    function getIp() { 
        if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) 
            $ip = getenv("HTTP_CLIENT_IP"); 
        else 
            if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) 
                $ip = getenv("HTTP_X_FORWARDED_FOR"); 
            else 
                if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) 
                    $ip = getenv("REMOTE_ADDR"); 
                else 
                    if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) 
                        $ip = $_SERVER['REMOTE_ADDR']; 
                    else 
                        $ip = "unknown"; 
        return ($ip); 
    }
    使用方法如下:
    echo getIp();
    

    PHP防止SQL注入

    我们在查询数据库时,出于安全考虑,需要过滤一些非法字符防止SQL恶意注入,请看一下函数:
    function injCheck($sql_str) {  
        $check = preg_match('/select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile/', $sql_str); 
        if ($check) { 
            echo '非法字符!!'; 
            exit; 
        } else { 
            return $sql_str; 
        } 
    }
    使用方法如下:
    echo injCheck('1 or 1=1');
    

    PHP计算时长

    我们在处理时间时,需要计算当前时间距离某个时间点的时长,如计算客户端运行时长,通常用hh:mm:ss表示。
    function changeTimeType($seconds) { 
        if ($seconds > 3600) { 
            $hours = intval($seconds / 3600); 
            $minutes = $seconds % 3600; 
            $time = $hours . ":" . gmstrftime('%M:%S', $minutes); 
        } else { 
            $time = gmstrftime('%H:%M:%S', $seconds); 
        } 
        return $time; 
    }
    使用方法如下:
    $seconds = 3712; 
    echo changeTimeType($seconds);
    

    微信支付类

    //微信支付类
    <?php
    class wxPay {
        //配置参数信息
        const SHANGHUHAO = "1483156**";//商户号
        const PARTNERKEY = "pL1syDI1gxkbopOFwRUAlB6pLajN**";    //api,商户后台
        //核心支付函数,参数:请求地址和参数
        function pay($url,$obj) {
            $obj['nonce_str'] = $this->create_noncestr();    //创建随机字符串
            $stringA = $this->create_qianming($obj,false);    //创建签名
            $stringSignTemp = $stringA."&key=pL1syDI1gxkbopOFwRUAlB6pLajN";    //签名后加api
            $sign = strtoupper(md5($stringSignTemp));    //签名加密并大写
            $obj['sign'] = $sign;    //将签名传入数组
            $postXml = $this->arrayToXml($obj);    //将参数转为xml格式
            //var_dump($postXml);
            $responseXml = $this->curl_post_ssl($url,$postXml);    //提交请求
            //var_dump($responseXml);
            return $responseXml;
        }
    
        //生成签名,参数:生成签名的参数和是否编码
        function create_qianming($arr,$urlencode) {
            $buff = "";
            ksort($arr); //对传进来的数组参数里面的内容按照字母顺序排序,a在前面,z在最后(字典序)
            foreach ($arr as $k=>$v) {
                if(null!=$v && "null" != $v && "sign" != $k) {    //签名不要转码
                    if ($urlencode) {
                        $v = urlencode($v);
                    }
                    $buff.=$k."=".$v."&";
                }
            }
            if (strlen($buff)>0) {
                $reqPar = substr($buff,0,strlen($buff)-1); //去掉末尾符号“&”
            }
            return $reqPar;
        }
    
        //生成随机字符串,默认32位
        function create_noncestr($length=32) {
            //创建随机字符
            $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
            $str = "";
            for($i=0;$i<$length;$i++) {
                $str.=substr($chars, mt_rand(0,strlen($chars)-1),1);
            }
            return $str;
        }
        //数组转xml
        function arrayToXml($arr) {
            $xml = "<xml>";
            foreach ($arr as $key=>$val) {
                if (is_numeric($val)) {
                    $xml.="<".$key.">".$val."</".$key.">";
                } else {
                    $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
                }
            }
            $xml.="</xml>";
            return $xml;
        }
    
        //post请求网站,需要证书
        function curl_post_ssl($url, $vars, $second=30,$aHeader=array())
        {
            $ch = curl_init();
            //超时时间
            curl_setopt($ch,CURLOPT_TIMEOUT,$second);
            curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
            //这里设置代理,如果有的话
            curl_setopt($ch,CURLOPT_URL,$url);
            curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
            curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
            //cert 与 key 分别属于两个.pem文件
            //请确保您的libcurl版本是否支持双向认证,版本高于7.20.1
            curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).DIRECTORY_SEPARATOR.
                'zhengshu'.DIRECTORY_SEPARATOR.'apiclient_cert.pem');
            curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).DIRECTORY_SEPARATOR.
                'zhengshu'.DIRECTORY_SEPARATOR.'apiclient_key.pem');
            curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).DIRECTORY_SEPARATOR.
                'zhengshu'.DIRECTORY_SEPARATOR.'rootca.pem');
            if( count($aHeader) >= 1 ){
                curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
            }
            curl_setopt($ch,CURLOPT_POST, 1);
            curl_setopt($ch,CURLOPT_POSTFIELDS,$vars);
            $data = curl_exec($ch);
            if($data){
                curl_close($ch);
                return $data;
            }
            else {
                $error = curl_errno($ch);
                echo "call faild, errorCode:$error\n";
                curl_close($ch);
                return false;
            }
        }
    
    }
    
    
    ##*********************************
    //使用方法
    require_once dirname(__FILE__).'/../androidzhifu/wxpay.class.php';
    $obj2 = array();
    $obj2['appid'] = "wx462f0e1b9ae8da**"; //appid
    $obj2['mch_id'] = "14831561**";//商户id
    $obj2['out_trade_no'] = $out_trade_no ;//商户订单号
    
    $url = "https://api.mch.weixin.qq.com/pay/orderquery";
    $wxpay = new wxPay();
    
    //调取微信提现api,执行提现操作
    $res = $wxpay->pay($url, $obj2);
    $obj = simplexml_load_string($res,'SimpleXMLElement',LIBXML_NOCDATA);
    $endarray = $this->object_to_array($obj);
    

    相关文章

      网友评论

        本文标题:php 常用方法

        本文链接:https://www.haomeiwen.com/subject/mbzkkxtx.html