PHP常用程式碼片段
阿新 • • 發佈:2018-12-30
/** * 高效判斷遠端檔案是否存在 * @param $file * @return bool 存在返回 true 不存在或者其他原因返回false */ function remoteFileExist($file) { if(preg_match('/^http:\/\//',$file)){ //遠端檔案 if(ini_get('allow_url_fopen')){ if(@fopen($file,'r')) return true; } else{ $parseurl=parse_url($file); $host=$parseurl['host']; $path=$parseurl['path']; $fp=fsockopen($host,80, $errno, $errstr, 10); if(!$fp)return false; fputs($fp,"GET {$path} HTTP/1.1 \r\nhost:{$host}\r\n\r\n"); if(preg_match('/HTTP\/1.1 200/',fgets($fp,1024))) return true; } return false; } return file_exists($file); } /** * 物件obj 轉陣列array * @param $object * @return mixed */ function object2array(&$object) { $object = json_decode( json_encode( $object),true); return $object; } /** * @param 位元組大小 $size * @param 保留小數位數 $dec * 格式化檔案大小 */ function file_size($size, $dec=2) { $a = array("B", "KB", "MB", "GB", "TB", "PB"); $pos = 0; while ($size >= 1024) { $size /= 1024; $pos++; } return round($size,$dec)." ".$a[$pos]; } /** * 隱藏手機號中間4位 * @param $phone * @return mixed */ function hidetel($phone){ $IsWhat = preg_match('/(0[0-9]{2,3}[-]?[2-9][0-9]{6,7}[-]?[0-9]?)/i',$phone); if($IsWhat == 1){ return preg_replace('/(0[0-9]{2,3}[-]?[2-9])[0-9]{3,4}([0-9]{3}[-]?[0-9]?)/i','$1****$2',$phone); }else{ return preg_replace('/(1[3587]{1}[0-9])[0-9]{4}([0-9]{4})/i','$1****$2',$phone); } } /** * 時間格式化 * @param $time * @return string */ function formatTime($time) { $now_time = time(); $t = $now_time - $time; $mon = (int) ($t / (86400 * 30)); if ($mon >= 1) { return '一個月前'; } $day = (int) ($t / 86400); if ($day >= 1) { return $day . '天前'; } $h = (int) ($t / 3600); if ($h >= 1) { return $h . '小時前'; } $min = (int) ($t / 60); if ($min >= 1) { return $min . '分鐘前'; } return '剛剛'; } /** * 時間格式化 * @param $time * @return string */ function pincheTime($time) { $today = strtotime(date('Y-m-d')); //今天零點 $here = (int)(($time - $today)/86400) ; if($here==1){ return '明天'; } if($here==2) { return '後天'; } if($here>=3 && $here<7){ return $here.'天后'; } if($here>=7 && $here<30){ return '一週後'; } if($here>=30 && $here<365){ return '一個月後'; } if($here>=365){ $r = (int)($here/365).'年後'; return $r; } return '今天'; } /** * * @param 時間戳 $time * 友好時間顯示 * @return */ function timeline($time){ if(time()<=$time){ return date("Y-m-d H:i:s",$time); }else{ $t = time()-$time; $f = array( '31536000'=>'年', '2592000'=>'個月', '604800'=>'星期', '86400'=>'天', '3600'=>'小時', '60'=>'分鐘', '1'=>'秒' ); foreach($f as $k=>$v){ if(0 != $c = floor($t/(int)$k)){ return $c.$v.'前'; } } } } /** * 計算兩個時間的時差 * @param $begin_time * @param $end_time * @return array */ function timeDiff($begin_time, $end_time) { if ($begin_time < $end_time) { $starttime = $begin_time; $endtime = $end_time; } else { $starttime = $end_time; $endtime = $begin_time; } $timediff = $endtime - $starttime; $days = intval( $timediff / 86400 ); $remain = $timediff % 86400; $hours = sprintf("%02d", intval( $remain / 3600 )); $remain = $remain % 3600; $mins = sprintf("%02d", intval( $remain / 60 )); $secs = sprintf("%02d",$remain % 60); $res = array( "day" => $days, "hour" => $hours, "min" => $mins, "sec" => $secs ); return $res; } /** * 獲取當前毫秒時間戳 * @return string */ function getMillisecond() { list($t1, $t2) = explode(' ', microtime()); return $t2 . ceil( ($t1 * 1000) ); } /** * 生成n位隨機數 * @param int $length * @return string */ function createRandomKey($length=32) { $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; $str =""; for ( $i = 0; $i < $length; $i++ ) { $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1); } return $str; } /** * 生成n位包含$string的隨機數 * @param int $length * @param string $str * @return string */ function createRandomStringKey($length=32, $chars = "abcdefghijklmnopqrstuvwxyz0123456789") { $str =""; for ( $i = 0; $i < $length; $i++ ) { $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1); } return $str; } /** * post的curl 相容https * @param $url * @param $data * @return mixed */ function curlPostForHttps($url, $data) { $curl = curl_init(); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // https請求 不驗證證書和hosts curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($curl, CURLOPT_HTTPHEADER, array( "Content-Type: application/json", "Content-Length: ".strlen($data))); $result = json_decode(curl_exec($curl), true); curl_close($curl); return $result; } /** * 16進位制顏色值轉 rgb * @param $colour * @return array|bool */ function hex2rgb( $colour ) { if ( $colour[0] == '#' ) { $colour = substr( $colour, 1 ); } if ( strlen( $colour ) == 6 ) { list( $r, $g, $b ) = array( $colour[0] . $colour[1], $colour[2] . $colour[3], $colour[4] . $colour[5] ); } elseif ( strlen( $colour ) == 3 ) { list( $r, $g, $b ) = array( $colour[0] . $colour[0], $colour[1] . $colour[1], $colour[2] . $colour[2] ); } else { return false; } $r = hexdec( $r ); $g = hexdec( $g ); $b = hexdec( $b ); return array( 'red' => $r, 'green' => $g, 'blue' => $b ); } /** * 系統郵件傳送函式 * @param $address 收件人郵件 * @param $title 郵件標題 * @param $message 郵件內容 * @return bool */ function sendMail($address,$title,$message, $filePath=null) { $mail = new PHPMailer(); // 設定PHPMailer使用SMTP伺服器傳送Email $mail->IsSMTP(); // 設定郵件的字元編碼,若不指定,則為'UTF-8' $mail->CharSet='UTF-8'; // 新增收件人地址,可以多次使用來新增多個收件人 $mail->AddAddress($address); // SMTP除錯功能 0=關閉 1 = 錯誤和訊息 2 = 訊息 $mail->SMTPDebug = 0; // 設定郵件正文 $mail->Body=$message; // 設定郵件頭的From欄位。 $mail->From=config('mail.from'); // 設定發件人名字 $mail->FromName=config('mail.fromName'); // 設定郵件標題 $mail->Subject=$title; // 設定SMTP伺服器。 $mail->Host=config('mail.host'); // SMTP伺服器的埠號 $mail->Port = config('mail.port'); // 設定為"需要驗證" $mail->SMTPAuth=true; // 啟用SSL加密為true $mail->SMTPSecure =true; // 新增附件 if ($filePath != null) { $mail->AddAttachment($filePath); } // 設定使用者名稱和密碼。 $mail->Username=config('mail.username'); $mail->Password=config('mail.password'); // 傳送郵件。 return($mail->Send()); } /** * 指定位置插入字串 * @param $str 原字串 * @param $i 插入位置 * @param $substr 插入字串 * @return string 處理後的字串 */ function insertToStr($str, $i, $substr){ //指定插入位置前的字串 $startstr=""; for($j=0; $j<$i; $j++){ $startstr .= $str[$j]; } //指定插入位置後的字串 $laststr=""; for ($j=$i; $j<strlen($str); $j++){ $laststr .= $str[$j]; } //將插入位置前,要插入的,插入位置後三個字串拼接起來 $str = $startstr . $substr . $laststr; //返回結果 return $str; } /** * 阿拉伯數字轉中文數字 * @param $num * @return string */ function ToChinaseNum($num) { $char = array("零","一","二","三","四","五","六","七","八","九"); $dw = array("","十","百","千","萬","億","兆"); $retval = ""; $proZero = false; for($i = 0;$i < strlen($num);$i++) { if($i > 0) $temp = (int)(($num % pow (10,$i+1)) / pow (10,$i)); else $temp = (int)($num % pow (10,1)); if($proZero == true && $temp == 0) continue; if($temp == 0) $proZero = true; else $proZero = false; if($proZero) { if($retval == "") continue; $retval = $char[$temp].$retval; } else $retval = $char[$temp].$dw[$i].$retval; } if($retval == "一十") $retval = "十"; return $retval; }