function.init.php 10 KB

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