function.init.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. <?php
  2. if (!defined('IS_INITPHP')) exit('Access Denied!');
  3. /*********************************************************************************
  4. * InitPHP 3.8.2 国产PHP开发框架 扩展类库-方法库
  5. *-------------------------------------------------------------------------------
  6. * 版权所有: CopyRight By initphp.com
  7. * 您可以自由使用该源码,但是在使用过程中,请保留作者信息。尊重他人劳动成果就是尊重自己
  8. *-------------------------------------------------------------------------------
  9. * Author:zhuli Dtime:2014-11-25
  10. ***********************************************************************************/
  11. class functionInit {
  12. /**
  13. * 方法库-sign签名方法
  14. * @param $array 需要加密的参数
  15. * @param $secret 秘钥
  16. * @param $signName sign的名称,sign不会进行加密
  17. */
  18. public function sign($array, $secret, $signName = "sign") {
  19. if (count($array) == 0) {
  20. return "";
  21. }
  22. ksort($array); //按照升序排序
  23. $str = "";
  24. foreach ($array as $key => $value) {
  25. if ($signName == $key) continue;
  26. $str .= $key . "=" . $value . "&";
  27. }
  28. $str = rtrim($str, "&");
  29. return md5($str . $secret);
  30. }
  31. /**
  32. * 方法库-获取随机值
  33. * @return string
  34. */
  35. public function get_rand($str, $len) {
  36. return substr(md5(uniqid(rand()*strval($str))),0, (int) $len);
  37. }
  38. /**
  39. * 方法库-获取随机Hash值
  40. * @return string
  41. */
  42. public function get_hash($length = 13) {
  43. $chars = '0123456789abcdefghijklmnopqrstuvwxyz';
  44. $max = strlen($chars) - 1;
  45. mt_srand((double)microtime() * 1000000);
  46. for ($i=0; $i<$length; $i++) {
  47. $hash .= $chars[mt_rand(0, $max)];
  48. }
  49. return $hash;
  50. }
  51. /**
  52. * 方法库-截取字符串-【该函数作者未知】
  53. * @param string $string 字符串
  54. * @param int $length 字符长度
  55. * @param string $dot 截取后是否添加...
  56. * @param string $charset编码
  57. * @return string
  58. */
  59. public function cutstr($string, $length, $dot = ' ...', $charset = 'utf-8') {
  60. if (strlen($string) <= $length) {
  61. return $string;
  62. }
  63. $string = str_replace(array('&amp;', '&quot;', '&lt;', '&gt;'), array('&', '"', '<', '>'), $string);
  64. $strcut = '';
  65. if (strtolower($charset) == 'utf-8') {
  66. $n = $tn = $noc = 0;
  67. while ($n < strlen($string)) {
  68. $t = ord($string[$n]); //ASCIIֵ
  69. if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
  70. $tn = 1; $n++; $noc++;
  71. } elseif (194 <= $t && $t <= 223) {
  72. $tn = 2; $n += 2; $noc += 2;
  73. } elseif (224 <= $t && $t < 239) {
  74. $tn = 3; $n += 3; $noc += 2;
  75. } elseif (240 <= $t && $t <= 247) {
  76. $tn = 4; $n += 4; $noc += 2;
  77. } elseif (248 <= $t && $t <= 251) {
  78. $tn = 5; $n += 5; $noc += 2;
  79. } elseif ($t == 252 || $t == 253) {
  80. $tn = 6; $n += 6; $noc += 2;
  81. } else {
  82. $n++;
  83. }
  84. if($noc >= $length) {
  85. break;
  86. }
  87. }
  88. if ($noc > $length) {
  89. $n -= $tn;
  90. }
  91. $strcut = substr($string, 0, $n);
  92. } else {
  93. for ($i = 0; $i < $length; $i++) {
  94. $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
  95. }
  96. }
  97. $strcut = str_replace(array('&', '"', '<', '>'), array('&amp;', '&quot;', '&lt;', '&gt;'), $strcut);
  98. return $strcut.$dot;
  99. }
  100. /**
  101. * 方法库-字符串是否存在
  102. * @param string $str :字符或字符串
  103. * @param string $string :字符串
  104. * @return string 例子: $str='34' $string='1234' 返回 TRUE
  105. */
  106. public function is_str_exist($str, $string) {
  107. $string = (string) $string;
  108. $str = (string) $str;
  109. return strstr($string,$str)===false ? false : true;
  110. }
  111. /**
  112. * 方法库-token使用
  113. * @param string $type :encode-加密方法|decode-解密方法
  114. * @return string|bool
  115. */
  116. public function token($type = 'encode') {
  117. session_start();
  118. if ($type == 'encode') {
  119. $key = $this->get_hash(5);
  120. $_SESSION['init_token'] = $key;
  121. return '<input name="init_token" type="hidden" value="'.$_SESSION['init_token'].'"/>';
  122. } else {
  123. $value = trim($_POST['init_token']);
  124. if ($value !== $_SESSION['init_token']) return false;
  125. return true;
  126. }
  127. }
  128. /**
  129. * 方法库-压缩函数,主要是发送http页面内容过大的时候应用
  130. * @param string $content 内容
  131. * @return string
  132. */
  133. public function gzip(&$content) {
  134. if(!headers_sent()&&extension_loaded("zlib")&&strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip")){
  135. $content = gzencode($content,2);
  136. header("Content-Encoding: gzip");
  137. header("Vary: Accept-Encoding");
  138. header("Content-Length: ".strlen($content));
  139. }
  140. return $content;
  141. }
  142. /**
  143. * 方法库-向父串中插入子串
  144. * @param string $string : 父串
  145. * @param number $sublen : 长度
  146. * @param string $str : 子串
  147. * @param string $code : 编码
  148. * @return string
  149. */
  150. public function insert_str($string, $sublen=10, $str="<br/>", $code='UTF-8'){
  151. if ($code == 'UTF-8') {
  152. $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]/";
  153. preg_match_all($pa, $string, $t_string);
  154. $n = count($t_string[0]);
  155. $floor = ceil($n / $sublen);
  156. if ($n > $sublen) {
  157. for ($i=0; $i < $floor; $i++) {
  158. array_splice($t_string[0], ($sublen * ($i+1))-1, 0, $str);
  159. }
  160. return implode('', $t_string[0]);
  161. } else {
  162. array_splice($t_string[0], $sublen, 0);
  163. return implode('', $t_string[0]);
  164. }
  165. }
  166. }
  167. /**
  168. * 方法库-加密解密函数
  169. * @param string $string 加密的字符串
  170. * @param number $key 加密的密钥
  171. * @param string $type 加密的方法-ENCODE|加密 DECODE|解密
  172. * @return string
  173. */
  174. public function str_code($string, $key, $type = 'ENCODE') {
  175. $string = ($type == 'DECODE') ? base64_decode($string) : $string;
  176. $key_len = strlen($key);
  177. $key = md5($key);
  178. $string_len = strlen($string);
  179. for ($i=0; $i<$string_len; $i++) {
  180. $j = ($i * $key_len) % 32;
  181. $code .= $string[$i] ^ $key[$j];
  182. }
  183. return ($type == 'ENCODE') ? base64_encode($code) : $code;
  184. }
  185. /**
  186. * 方法库-输出钱的格式
  187. * @param string $num 数值
  188. * @return string
  189. */
  190. public function format_number($num){
  191. return number_format($num, 2, ".", ",");
  192. }
  193. /**
  194. * 方法库-字节转换-转换成MB格式等
  195. * @param string $num 数值
  196. * @return string
  197. */
  198. public function bitsize($num) {
  199. if(!preg_match("/^[0-9]+$/", $num)) return 0;
  200. $type = array( "B", "KB", "MB", "GB", "TB", "PB" );
  201. $j = 0;
  202. while($num >= 1024) {
  203. if( $j >= 5 ) return $num.$type[$j];
  204. $num = $num / 1024;
  205. $j++;
  206. }
  207. return $num.$type[$j];
  208. }
  209. /**
  210. * 方法库-数组去除空值
  211. * @param string $num 数值
  212. * @return string
  213. */
  214. public function array_remove_empty(&$arr, $trim = true) {
  215. if (!is_array($arr)) return false;
  216. foreach($arr as $key => $value){
  217. if (is_array($value)) {
  218. self::array_remove_empty($arr[$key]);
  219. } else {
  220. $value = ($trim == true) ? trim($value) : $value;
  221. if ($value == "") {
  222. unset($arr[$key]);
  223. } else {
  224. $arr[$key] = $value;
  225. }
  226. }
  227. }
  228. }
  229. /**
  230. * 生成 options html 代码
  231. * @param array $arr 健值数组
  232. * @param string $default 默认值
  233. * @return string htmlcode
  234. */
  235. function generateHtmlOptions($arr, $default = null){
  236. $string = '';
  237. if (!is_array($arr) && count($arr)) return $string;
  238. foreach ($arr as $key => $val) {
  239. $selected = ($default == $key) ? 'selected' : '';
  240. $string .= '<option value="'.$key.'" '.$selected.'>';
  241. $string .= $val;
  242. $string .= '</option>';
  243. }
  244. return $string;
  245. }
  246. /**
  247. * 清空数组中的空值
  248. * @param array $array
  249. * @return array
  250. */
  251. public function clear_array_null(&$array) {
  252. foreach($array as $k => $v){
  253. if(empty($v)) unset($array[$k]);
  254. }
  255. return $array;
  256. }
  257. /**
  258. * 左边清空
  259. * @param string $string
  260. * @return string
  261. */
  262. public function rltrim($string) {
  263. if (is_string($string)) return trim($string);
  264. foreach($string as $k => $v){
  265. $string[$k] = trim($v);
  266. }
  267. return $string;
  268. }
  269. /**
  270. * 生成唯一的订单号 20110809111259232312
  271. * 2011-年日期
  272. * 08-月份
  273. * 09-日期
  274. * 11-小时
  275. * 12-分
  276. * 59-秒
  277. * 2323-微秒
  278. * 12-随机值
  279. * @return string
  280. */
  281. public function trade_no() {
  282. list($usec, $sec) = explode(" ", microtime());
  283. $usec = substr(str_replace('0.', '', $usec), 0 ,4);
  284. $str = rand(10,99);
  285. return date("YmdHis").$usec.$str;
  286. }
  287. /**
  288. * 获取接受JS传递中文编码函数
  289. * 作者:Min
  290. * @param string $str
  291. * @return string
  292. */
  293. public function js_unescape($str){
  294. $ret = '';
  295. $len = strlen($str);
  296. for ($i = 0; $i < $len; $i++) {
  297. if ($str[$i] == '%' && $str[$i+1] == 'u') {
  298. $val = hexdec(substr($str, $i+2, 4));
  299. if ($val < 0x7f) $ret .= chr($val);
  300. else if($val < 0x800) $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f));
  301. else $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f));
  302. $i += 5;
  303. } else if ($str[$i] == '%') {
  304. $ret .= urldecode(substr($str, $i, 3));
  305. $i += 2;
  306. }
  307. else $ret .= $str[$i];
  308. }
  309. return $ret;
  310. }
  311. }