首页 > 技术文章 > PHP之封装一些常用的工具类函数

Steven-shi 2016-09-22 16:25 原文

  分享一些PHP中常用的工具里函数:

  1 <?php
  2 
  3 /**
  4  * Created by PhpStorm.
  5  * User: Steven
  6  * Date: 2016/8/12
  7  * Time: 14:21
  8  */
  9 class Utils
 10 {
 11 
 12     /**
 13      * 将xml转换为数组
 14      * @param $xml  需要转化的xml
 15      * @return mixed
 16      */
 17     static function xml_to_array($xml)
 18     {
 19         $ob = simplexml_load_string($xml);
 20         $json = json_encode($ob);
 21         $array = json_decode($json, true);
 22         return $array;
 23     }
 24 
 25     /**
 26      * 将数组转化成xml
 27      * @param $data 需要转化的数组
 28      * @return string
 29      */
 30     static function data_to_xml($data)
 31     {
 32         if (is_object($data)) {
 33             $data = get_object_vars($data);
 34         }
 35         $xml = '';
 36         foreach ($data as $key => $val) {
 37             if (is_null($val)) {
 38                 $xml .= "<$key/>\n";
 39             } else {
 40                 if (!is_numeric($key)) {
 41                     $xml .= "<$key>";
 42                 }
 43                 $xml .= (is_array($val) || is_object($val)) ? self::data_to_xml($val) : $val;
 44                 if (!is_numeric($key)) {
 45                     $xml .= "</$key>";
 46                 }
 47             }
 48         }
 49         return $xml;
 50     }
 51 
 52     /**
 53      * PHP post请求之发送XML数据
 54      * @param $url 请求的URL
 55      * @param $xmlData
 56      * @return mixed
 57      */
 58     static function xml_post_request($url, $xmlData)
 59     {
 60         $header[] = "Content-type: text/xml";        //定义content-type为xml,注意是数组
 61         $ch = curl_init($url);
 62         curl_setopt($ch, CURLOPT_URL, $url);
 63         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 64         curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
 65         curl_setopt($ch, CURLOPT_POST, 1);
 66         curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlData);
 67         $response = curl_exec($ch);
 68         if (curl_errno($ch)) {
 69             print curl_error($ch);
 70         }
 71         curl_close($ch);
 72         return $response;
 73     }
 74 
 75     /**
 76      * PHP post请求之发送Json对象数据
 77      *
 78      * @param $url 请求url
 79      * @param $jsonStr 发送的json字符串
 80      * @return array
 81      */
 82     static function http_post_json($url, $jsonStr)
 83     {
 84         $ch = curl_init();
 85         curl_setopt($ch, CURLOPT_POST, 1);
 86         curl_setopt($ch, CURLOPT_URL, $url);
 87         curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
 88         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 89         curl_setopt($ch, CURLOPT_HTTPHEADER, array(
 90                 'Content-Type: application/json; charset=utf-8',
 91                 'Content-Length: ' . strlen($jsonStr)
 92             )
 93         );
 94         $response = curl_exec($ch);
 95         $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
 96 
 97         return array($httpCode, $response);
 98     }
 99 
100     /**
101      * PHP post请求之发送数组
102      * @param $url
103      * @param array $param
104      * @return mixed
105      * @throws Exception
106      */
107     static function httpsPost($url, $param = array())
108     {
109         $ch = curl_init(); // 初始化一个 cURL 对象
110         curl_setopt($ch, CURLOPT_URL, $url); // 设置需要抓取的URL
111         curl_setopt($ch, CURLOPT_HEADER, 0); // // 设置header
112         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
113         // 如果你想PHP去做一个正规的HTTP POST,设置这个选项为一个非零值。这个POST是普通的 application/x-www-from-urlencoded 类型,多数被HTML表单使用。
114         curl_setopt($ch, CURLOPT_POST, 1);
115         curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param)); // 传递一个作为HTTP “POST”操作的所有数据的字符串。//http_build_query:生成 URL-encode 之后的请求字符串
116         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
117         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
118         curl_setopt($ch, CURLOPT_HTTPHEADER, array(
119             'Content-type:application/x-www-form-urlencoded;charset=utf-8'
120         ));
121         $rtn = curl_exec($ch); // 运行cURL,请求网页
122         if ($errno = curl_errno($ch)) {
123             throw new Exception ('Curl Error(' . $errno . '):' . curl_error($ch));
124         }
125         curl_close($ch); // 关闭URL请求
126         return $rtn; // 返回获取的数据
127     }
128 
129     /**
130      * 接收xml数据并转化成数组
131      * @return array
132      */
133     static function getRequestBean()
134     {
135         $bean = simplexml_load_string(file_get_contents('php://input')); // simplexml_load_string() 函数把 XML 字符串载入对象中。如果失败,则返回 false。
136         $request = array();
137         foreach ($bean as $key => $value) {
138             $request [( string )$key] = ( string )$value;
139         }
140         return $request;
141     }
142 
143     /**
144      * 接收json数据并转化成数组
145      * @return mixed
146      */
147     static function getJsonData()
148     {
149         $bean = file_get_contents('php://input');
150         $result = json_decode($bean, true);
151         return $result;
152     }
153 
154     /**
155      * 翻译中英文字符串(调换位置)
156      */
157     static function m_strrev($string)
158     {
159         $num = mb_strlen($string, 'utf-8');
160         $new_string = "";
161         for ($i = $num - 1; $i >= 0; $i--) {
162             $char = mb_substr($string, $i, 1, 'utf-8');
163             $new_string .= $char;
164         }
165         return $new_string;
166     }
167 
168     /**
169      * 判断当前服务器系统
170      * @return string
171      */
172     public static function getOS()
173     {
174         if (PATH_SEPARATOR == ':') {
175             return 'Linux';
176         } else {
177             return 'Windows';
178         }
179     }
180 
181     /**
182      * 日志方法
183      * @param $log
184      */
185     static function writeLog($log)
186     {
187         $dir = __DIR__ . "/../Log/";
188         if (!is_dir($dir)) {
189             mkdir($dir);
190         }
191         $filename = $dir . date("Y-m-d") . ".log";
192         file_put_contents($filename, date("Y-m-d H:i:s") . "\t" . $log . PHP_EOL, FILE_APPEND);
193     }
194 
195     /**
196      * 签名验证函数
197      * @param $param   需要加密的字符串
198      * @param $sign     第三方已经机密好的用来比对的字串
199      * @return bool
200      */
201     static function ValidateSign($param, $sign)
202     {
203         if (md5($param) == $sign) {
204             return true;
205         } else {
206             return false;
207         }
208     }
209 }
210 
211 ?>

 

推荐阅读