1. 程式人生 > >PHP常用程式碼片段

PHP常用程式碼片段


/**
 * 高效判斷遠端檔案是否存在
 * @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;
}