<?php /** * AJAX方式返回数据到客户端 * * @param mixed $data 要返回的数据 * @return void */ function ajax_return($data) { header('Content-Type:application/json; charset=utf-8'); echo json_encode($data); exit(); } /** * 将二维数组按指定字段排序 * * @param array $arr 需要排序的二维数组 * @param string $key 排序字段名 * @param int $order 排序方式,可选值:SORT_DESC|SORT_ASC * @return array 排序后的二维数组 */ function array_ksort($arr, $key, $order = SORT_DESC) { $keyCol = array_column($arr, $key); array_multisort($keyCol, $order, $arr); return $arr; } /** * 把数组转成XML字符串 * * @param array $arr 数组 * @return string XML字符串 */ function array_to_xml($arr) { if (!is_array($arr) || count($arr) == 0) return ''; $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; } /** * 获取当前页面URL * * @return string 当前页面URL */ function get_current_url() { return "{$_SERVER['REQUEST_SCHEME']}://{$_SERVER['SERVER_NAME']}{$_SERVER['REQUEST_URI']}"; } /** * 获取文件的MIME类型 * 备注:本函数同时支持获取本地文件或远程文件的MIME类型。 * 备注:本函数依赖fileinfo扩展,使用前请确保该扩展已加载。 * * @param string $file 本地文件硬盘路径或远程文件URL * @return string 文件的MIME类型(若文件不存在则返回NULL),示例:text/x-php、image/png */ function get_mime($file) { $mime = null; if (file_exists($file)) { $finfo = new finfo(FILEINFO_MIME_TYPE); $mime = $finfo->file($file); } else { $curl = curl_init($file); curl_setopt($curl, CURLOPT_NOBODY, true); // 设置不需要取回消息体 if (curl_exec($curl) !== false) { $mime = curl_getinfo($curl, CURLINFO_CONTENT_TYPE); } curl_close($curl); } return $mime; } /** * 获取随机字符串 * * @param int $length 字符串长度 * @return string 随机字符串 */ function get_rand_string($length) { $chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; return substr(str_shuffle($chars), 0, $length); } /** * 解析URL携带的参数 * 备注:若不指定$key则返回URL里的全部参数。 * * @param string $url 要解析参数的URL * @param string $key 指定参数名,若参数不存在则结果返回NULL * @return mixed 解析结果 */ function get_url_query($url, $key = '') { $param = []; $parse = (array)parse_url($url); parse_str($parse['query'], $param); if ($key) { return $param[$key] ?? null; } return $param; } /** * 十六进制颜色值转RGB颜色值 * * @param string $color 十六进制颜色值(不区分大小写),如:#f00、#cCE8cf * @return false RGB颜色值,如十六进制颜色值不合法则返回FALSE */ function hex2rgb($color) { $hexColor = str_replace('#', '', $color); $len = strlen($hexColor); if ($len != 3 && $len != 6) { return false; } // 检查是否是合法的十六进制颜色值 if (!preg_match('/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/is', $color)) { return false; } $newColor = ''; if ($len == 3) { for ($i = 0; $i < $len; $i++) { $newColor .= $hexColor[$i] . $hexColor[$i]; } } else { $newColor = $hexColor; } $hex = str_split($newColor, 2); $rgb = []; foreach ($hex as $key => $value) { $rgb[] = hexdec($value); } return $rgb; } /** * POST方式请求资源 * * @param string $url 请求的URL * @param mixed $data 请求时携带的参数(数组键值对形式或XML字符串形式等等皆可) * @param string $sslcert SSLCERT文件路径,如:/important/ssl/apiclient_cert.pem * @param string $sslkey SSLKEY文件路径,如:/important/ssl/apiclient_key.pem * @return string 返回的內容 */ function http_post($url, $data, $sslcert = '', $sslkey = '') { $data = is_array($data) ? http_build_query($data) : $data; // 如果携带的参数是数组需要额外处理一下 $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_URL, $url); if ($sslcert && $sslkey) { curl_setopt($ch, CURLOPT_SSLCERT, $sslcert); curl_setopt($ch, CURLOPT_SSLKEY, $sslkey); } $response = curl_exec($ch); curl_close($ch); return $response; } /** * 将图片转成base64编码 * * @param string $img 图片磁盘路径 * @return string 图片base64编码 */ function img_to_base64($img) { if (!file_exists($img)) { return ''; } $contents = file_get_contents($img); $type = mime_content_type($img); // 获取图片格式,示例:image/png、image/jpeg $base64 = chunk_split(base64_encode($contents)); return "data:{$type};base64,{$base64}"; } /** * 正整数位数不足左侧补零 * * @param int $int 正整数 * @param int $length 位数 * @return string 左侧补零正整数 */ function int_pad($int, $length) { return sprintf("%0{$length}d", $int); } /** * 检查十六进制颜色值是否合法 * * @param string $color 十六进制颜色值(不区分大小写),如:#f93、#ff9933 * @return bool 检查结果 */ function is_color($color) { return preg_match('/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/is', $color); } /** * 检查邮箱地址格式是否正确 * * @param string $email 邮箱地址 * @return bool 检查结果 */ function is_email($email) { $result = filter_var($email, FILTER_VALIDATE_EMAIL); return $result === FALSE ? FALSE : TRUE; } /** * 检查手机号码格式是否正确 * * @param string $mobile 手机号码 * @return bool 检查结果 */ function is_mobile($mobile) { return strlen($mobile) == 11 && preg_match("/(13\d|14[579]|15[^4\D]|17[^49\D]|18\d)\d{8}/", $mobile); } /** * 检查一个数字是否为正整数 * 备注:必须是十进制正整数,且不能以0开头 * * @param int $int 一个数字 * @return bool 检查结果 */ function is_positive_int($int) { return preg_match('/^[1-9]\d*$/', $int); } /** * 检查一串字符是否为邮政编码 * * @param string $str 邮政编码 * @return bool 检查结果 */ function is_postal_code($str) { return preg_match('/^[1-9]\d{5}/', $str); } /** * 检查QQ号码格式是否正确 * * @param string $qq QQ号码 * @return bool 检查结果 */ function is_qq($qq) { return preg_match("/^[1-9][0-9]{4,}$/", $qq); } /** * 检查远程文件是否存在 * * @param string $url 远程文件URL * @return bool 检查结果 */ function is_remote_file_exists($url) { $isExist = FALSE; // 默认文件不存在 $curl = curl_init($url); curl_setopt($curl, CURLOPT_NOBODY, TRUE); // 设置不需要取回消息体 $response = curl_exec($curl); // 发送请求 if ($response !== FALSE) { // 如果HTTP状态码为200则说明远程文件存在 $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($httpCode == 200) $isExist = TRUE; } curl_close($curl); return $isExist; } /** * 检查session是否已经启动 * 温馨提示:如果检测到session尚未启动最好先使用session_start()将其启动后再操作$_SESSION变量 * * @return bool 检查结果 */ function is_session_start() { return session_status() === PHP_SESSION_ACTIVE; } /** * 检查固定电话格式是否正确 * 备注:国内固定电话由三部分构成,分别是当地区号、分隔符和具体号码,即:0000-0000000 * ①当地区号:以数字0开头,后面跟2~3个数字 * ②分隔符:规定使用“-” * ③具体号码:由7~8个数字组成 * * @param string $telephone 固定电话 * @return bool 检查结果 */ function is_telephone($telephone) { return preg_match("/^0\d{2,3}-\d{7,8}$/", $telephone); } /** * 检查URL格式是否正确 * * @param string $url URL * @return bool 检查结果 */ function is_url($url) { $result = filter_var($url, FILTER_VALIDATE_URL); return $result === FALSE ? FALSE : TRUE; } /** * 检查访问设备是否是微信浏览器 * * @return bool 检查结果 */ function is_weixin_browser() { $httpUserAgent = $_SERVER['HTTP_USER_AGENT']; $result = strpos($httpUserAgent, 'MicroMessenger'); return $result === FALSE ? FALSE : TRUE; } /** * 跳转到指定URL页面 * * @param string $url 指定URL * @return void */ function location($url) { header("Location: {$url}"); exit(); } /** * 新建目录 * * @param string $dir 目录路径 * @return bool 新建目录结果 */ function mk_dir($dir) { if (is_dir($dir)) return TRUE; return mkdir($dir, 0755, TRUE); } /** * 获得毫秒时间戳(13位数字串) * * @return int 毫秒时间戳(13位数字串) */ function ms_time() { list($usec, $sec) = explode(' ', microtime()); return $sec . substr(strval($usec), 2, 3); } /** * 把对象转成数组形式 * * @param object $object 对象 * @return array 数组 */ function object_to_array($object) { return json_decode(json_encode($object), TRUE); } /** * 使用print_r()打印变量 * * @param mixed $var 任意变量 * @param bool $exit 打印变量后是否执行exit() * @return void */ function p(mixed $var, bool $exit = true): void { echo '<pre>' . PHP_EOL . print_r($var, true) . '</pre>'; if ($exit === true) { exit(); } } /** * 移除左右两端的空白字符 * 备注:空白字符包括制表符、回车、半角空格、全角空格等。 * * @param mixed $var 要处理的内容,支持单个字符串或一维数组 * @return mixed */ function trim_space($var) { $arr = is_array($var) ? $var : array($var); $arr = array_map('trim', $arr); // 对所有数组元素应用trim()函数 array_walk($arr, function (&$value) { $value = trim($value, ' '); }); // 处理连续全角空格 return is_array($var) ? $arr : $arr[0]; } /** * 获得微秒时间戳(16位数字串) * * @return int 微秒时间戳(16位数字串) */ function us_time() { list($usec, $sec) = explode(' ', microtime()); return $sec . substr(strval($usec), 2, 6); } /** * 使用var_dump()打印变量 * * @param mixed $var 任意变量 * @param bool $exit 打印变量后是否执行exit() * @return void */ function v(mixed $var, bool $exit = true): void { ob_start(); var_dump($var); $output = ob_get_clean(); echo '<pre>' . PHP_EOL . $output . '</pre>'; if ($exit === true) { exit(); } } /** * 把XML字符串转成数组形式 * * @param string $xml XML字符串 * @return array 数组 */ function xml_to_array($xml) { // 先把XML字符串转成SimpleXMLElement对象 $obj = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); // 把对象转成数组 return json_decode(json_encode($obj), TRUE); } /** * 把XML字符串转成对象形式 * * @param string $xml XML字符串 * @return object 对象 */ function xml_to_object($xml) { return simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); }
Copyright © 2024 码农人生. All Rights Reserved