im/extend/utils/Utils.php

316 lines
12 KiB
PHP
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/* file:常用函数、工具类函数封装的集合
Created by wanghong<1204772286@qq.com>
Date: 2021-02-24 */
namespace utils;
class Utils{
/*
* 文件根据类型进行分类
$ext -string 文件后缀
return -int
* */
public static function getFileType($ext){
$ext=strtolower($ext);
$image=['jpg','jpeg','png','bmp','gif'];
$radio=['mp3','wav','wmv','amr'];
$video=['mp4','3gp','avi','m2v','mkv','mov'];
$doc=['ppt','pptx','doc','docx','xls','xlsx','pdf','txt','md'];
if(in_array($ext,$doc)){
$fileType=1;
}elseif(in_array($ext,$image)){
$fileType=2;
}elseif(in_array($ext,$radio)){
$fileType=3;
}elseif(in_array($ext,$video)){
$fileType=4;
}else{
$fileType=9;
}
return $fileType;
}
/*
获取文件的大小
*/
public static function get_file_size($size, $limit = 0)
{
$units = array(' B', ' KB', ' MB', ' GB', ' TB');
for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024;
return round($size, 2) . $units[$i + $limit];
}
/*
h5ip网址缩短
$link -string
return string
*/
public static function h5ipUrl($link)
{
$url = "http://h5ip.cn/index/api?format=json&url=" . $link;
$data = json_decode(curl_request($url), true);
if ($data['code'] == 0) {
return $data['short_url'];
} else {
return $link;
}
}
/*
linux系统探测
*/
public static function sys_linux()
{
// CPU
if (false === ($str = @file("/proc/cpuinfo"))) return false;
$str = implode("", $str);
@preg_match_all("/model\s+name\s{0,}\:+\s{0,}([\w\s\)\(\@.-]+)([\r\n]+)/s", $str, $model);
@preg_match_all("/cpu\s+MHz\s{0,}\:+\s{0,}([\d\.]+)[\r\n]+/", $str, $mhz);
@preg_match_all("/cache\s+size\s{0,}\:+\s{0,}([\d\.]+\s{0,}[A-Z]+[\r\n]+)/", $str, $cache);
@preg_match_all("/bogomips\s{0,}\:+\s{0,}([\d\.]+)[\r\n]+/", $str, $bogomips);
if (false !== is_array($model[1])) {
$res['cpu']['num'] = sizeof($model[1]);
for ($i = 0; $i < $res['cpu']['num']; $i++) {
$res['cpu']['model'][] = $model[1][$i] . '&nbsp;(' . $mhz[1][$i] . ')';
$res['cpu']['mhz'][] = $mhz[1][$i];
$res['cpu']['cache'][] = $cache[1][$i];
$res['cpu']['bogomips'][] = $bogomips[1][$i];
}
if ($res['cpu']['num'] == 1)
$x1 = '';
else
$x1 = ' ×' . $res['cpu']['num'];
$mhz[1][0] = ' | 频率:' . $mhz[1][0];
$cache[1][0] = ' | 二级缓存:' . $cache[1][0];
$bogomips[1][0] = ' | Bogomips:' . $bogomips[1][0];
$res['cpu']['model'][] = $model[1][0] . $mhz[1][0] . $cache[1][0] . $bogomips[1][0] . $x1;
if (false !== is_array($res['cpu']['model'])) $res['cpu']['model'] = implode("<br />", $res['cpu']['model']);
if (false !== is_array($res['cpu']['mhz'])) $res['cpu']['mhz'] = implode("<br />", $res['cpu']['mhz']);
if (false !== is_array($res['cpu']['cache'])) $res['cpu']['cache'] = implode("<br />", $res['cpu']['cache']);
if (false !== is_array($res['cpu']['bogomips'])) $res['cpu']['bogomips'] = implode("<br />", $res['cpu']['bogomips']);
}
// NETWORK
// UPTIME
if (false === ($str = @file("/proc/uptime"))) return false;
$str = explode(" ", implode("", $str));
$str = trim($str[0]);
$min = $str / 60;
$hours = $min / 60;
$days = floor($hours / 24);
$hours = floor($hours - ($days * 24));
$min = floor($min - ($days * 60 * 24) - ($hours * 60));
if ($days !== 0) $res['uptime'] = $days . "";
if ($hours !== 0) $res['uptime'] .= $hours . "小时";
$res['uptime'] .= $min . "分钟";
// MEMORY
if (false === ($str = @file("/proc/meminfo"))) return false;
$str = implode("", $str);
preg_match_all("/MemTotal\s{0,}\:+\s{0,}([\d\.]+).+?MemFree\s{0,}\:+\s{0,}([\d\.]+).+?Cached\s{0,}\:+\s{0,}([\d\.]+).+?SwapTotal\s{0,}\:+\s{0,}([\d\.]+).+?SwapFree\s{0,}\:+\s{0,}([\d\.]+)/s", $str, $buf);
preg_match_all("/Buffers\s{0,}\:+\s{0,}([\d\.]+)/s", $str, $buffers);
$res['memTotal'] = round($buf[1][0] / 1024, 2);
$res['memFree'] = round($buf[2][0] / 1024, 2);
$res['memBuffers'] = round($buffers[1][0] / 1024, 2);
$res['memCached'] = round($buf[3][0] / 1024, 2);
$res['memUsed'] = $res['memTotal'] - $res['memFree'];
$res['memPercent'] = (floatval($res['memTotal']) != 0) ? round($res['memUsed'] / $res['memTotal'] * 100, 2) : 0;
$res['memRealUsed'] = $res['memTotal'] - $res['memFree'] - $res['memCached'] - $res['memBuffers']; //真实内存使用
$res['memRealFree'] = $res['memTotal'] - $res['memRealUsed']; //真实空闲
$res['memRealPercent'] = (floatval($res['memTotal']) != 0) ? round($res['memRealUsed'] / $res['memTotal'] * 100, 2) : 0; //真实内存使用率
$res['memCachedPercent'] = (floatval($res['memCached']) != 0) ? round($res['memCached'] / $res['memTotal'] * 100, 2) : 0; //Cached内存使用率
$res['swapTotal'] = round($buf[4][0] / 1024, 2);
$res['swapFree'] = round($buf[5][0] / 1024, 2);
$res['swapUsed'] = round($res['swapTotal'] - $res['swapFree'], 2);
$res['swapPercent'] = (floatval($res['swapTotal']) != 0) ? round($res['swapUsed'] / $res['swapTotal'] * 100, 2) : 0;
// LOAD AVG
if (false === ($str = @file("/proc/loadavg"))) return false;
$str = explode(" ", implode("", $str));
$str = array_chunk($str, 4);
$res['loadAvg'] = implode(" ", $str[0]);
return $res;
}
/**
* 将数组按字母A-Z排序
* @return [type] [description]
*/
public static function chartSort($array, $field,$isGroup=true,$chart='chart')
{
$newArray = [];
foreach ($array as $k => &$v) {
$v[$chart] = self::getFirstChart($v[$field]);
$newArray[] = $v;
}
$data = [];
if($isGroup){
foreach ($newArray as $k => $v) {
if (array_key_exists($v[$chart], $data)) {
$data[$v[$chart]][] = $v;
} else {
$data[$v[$chart]] = [];
$data[$v[$chart]][] = $v;
}
}
ksort($data);
}else{
return $newArray;
}
return $data;
}
/**
* 返回取汉字的第一个字的首字母
* @param [type] $str [string]
* @return [type] [strind]
*/
public static function getFirstChart($str)
{
$str = str_replace(' ', '', $str);
if (empty($str)) {
return '#';
}
$char = ord($str[0]);
if ($char >= ord('A') && $char <= ord('z')) {
return strtoupper($str[0]);
}
$s1 = iconv('UTF-8', 'gb2312//IGNORE', $str);
$s2 = iconv('gb2312', 'UTF-8//IGNORE', $s1);
$s = $s2 == $str ? $s1 : $str;
$asc = ord($s{0}) * 256 + ord($s{1}) - 65536;
if ($asc >= -20319 && $asc <= -20284) return 'A';
if ($asc >= -20283 && $asc <= -19776) return 'B';
if ($asc >= -19775 && $asc <= -19219) return 'C';
if ($asc >= -19218 && $asc <= -18711) return 'D';
if ($asc >= -18710 && $asc <= -18527) return 'E';
if ($asc >= -18526 && $asc <= -18240) return 'F';
if ($asc >= -18239 && $asc <= -17923) return 'G';
if ($asc >= -17922 && $asc <= -17418) return 'H';
if ($asc >= -17417 && $asc <= -16475) return 'J';
if ($asc >= -16474 && $asc <= -16213) return 'K';
if ($asc >= -16212 && $asc <= -15641) return 'L';
if ($asc >= -15640 && $asc <= -15166) return 'M';
if ($asc >= -15165 && $asc <= -14923) return 'N';
if ($asc >= -14922 && $asc <= -14915) return 'O';
if ($asc >= -14914 && $asc <= -14631) return 'P';
if ($asc >= -14630 && $asc <= -14150) return 'Q';
if ($asc >= -14149 && $asc <= -14091) return 'R';
if ($asc >= -14090 && $asc <= -13319) return 'S';
if ($asc >= -13318 && $asc <= -12839) return 'T';
if ($asc >= -12838 && $asc <= -12557) return 'W';
if ($asc >= -12556 && $asc <= -11848) return 'X';
if ($asc >= -11847 && $asc <= -11056) return 'Y';
if ($asc >= -11055 && $asc <= -10247) return 'Z';
return "#";
}
/**
* 人民币转大写
* @param
*/
function cny($ns)
{
static $cnums = array("", "", "", "", "", "", "", "", "", ""),
$cnyunits = array("", "", ""),
$grees = array("", "", "", "", "", "", "", "亿");
list($ns1, $ns2) = explode(".", $ns, 2);
$ns2 = array_filter(array($ns2[1], $ns2[0]));
$ret = array_merge($ns2, array(implode("", _cny_map_unit(str_split($ns1), $grees)), ""));
$ret = implode("", array_reverse(_cny_map_unit($ret, $cnyunits)));
return str_replace(array_keys($cnums), $cnums, $ret);
}
function _cny_map_unit($list, $units)
{
$ul = count($units);
$xs = array();
foreach (array_reverse($list) as $x) {
$l = count($xs);
if ($x != "0" || !($l % 4)) {
$n = ($x == '0' ? '' : $x) . ($units[($l - 1) % $ul]);
} else {
$n = is_numeric($xs[0][0]) ? $x : '';
}
array_unshift($xs, $n);
}
return $xs;
}
/**
* 解析获取php.ini 的upload_max_filesize单位byte
* @param $dec int 小数位数
* @return float 单位byte
* */
public static function get_upload_max_filesize_byte($dec = 2)
{
$max_size = ini_get('upload_max_filesize');
preg_match('/(^[0-9\.]+)(\w+)/', $max_size, $info);
$size = $info[1];
$suffix = strtoupper($info[2]);
$a = array_flip(array("B", "KB", "MB", "GB", "TB", "PB"));
$b = array_flip(array("B", "K", "M", "G", "T", "P"));
$pos = $a[$suffix] && $a[$suffix] !== 0 ? $a[$suffix] : $b[$suffix];
return round($size * pow(1024, $pos), $dec);
}
/**
* 十六进制 转 RGB
*/
public static function hex2rgb($hexColor)
{
$color = str_replace('#', '', $hexColor);
if (strlen($color) > 3) {
$rgb = array(
'r' => hexdec(substr($color, 0, 2)),
'g' => hexdec(substr($color, 2, 2)),
'b' => hexdec(substr($color, 4, 2))
);
} else {
$color = $hexColor;
$r = substr($color, 0, 1) . substr($color, 0, 1);
$g = substr($color, 1, 1) . substr($color, 1, 1);
$b = substr($color, 2, 1) . substr($color, 2, 1);
$rgb = array(
'r' => hexdec($r),
'g' => hexdec($g),
'b' => hexdec($b)
);
}
return $rgb;
}
/**
* RGB转 十六进制
* @param $rgb RGB颜色的字符串 如rgb(255,255,255);
* @return string 十六进制颜色值 如:#FFFFFF
*/
public static function RGBToHex($rgb){
$regexp = "/^rgb\(([0-9]{0,3})\,\s*([0-9]{0,3})\,\s*([0-9]{0,3})\)/";
$re = preg_match($regexp, $rgb, $match);
$re = array_shift($match);
$hexColor = "#";
$hex = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
for ($i = 0; $i < 3; $i++) {
$r = null;
$c = $match[$i];
$hexAr = array();
while ($c > 16) {
$r = $c % 16;
$c = ($c / 16) >> 0;
array_push($hexAr, $hex[$r]);
}
array_push($hexAr, $hex[$c]);
$ret = array_reverse($hexAr);
$item = implode('', $ret);
$item = str_pad($item, 2, '0', STR_PAD_LEFT);
$hexColor .= $item;
}
return $hexColor;
}
}