主頁 > 後端開發 > PHP常用的自定義函式

PHP常用的自定義函式

2020-09-29 03:39:57 後端開發

目錄

  • php常用自定義函式類下載
  • php 設定字符編碼為utf-8
  • GB2312和utf8相互轉換
  • 路徑格式化(替換雙斜線為單斜線)
  • 獲取當前檔案的目錄
  • 列印輸出
  • api回傳資訊
  • 字串截取
    • 方法一:
    • 方法二:
  • 字串make_by_id轉成makeById
  • 陣列 字串 物件 json格式的字串互轉
  • 強制型別轉換
  • php序列化serialize與回傳序列化unserialeze
  • 創建日志檔案
  • 回傳二維陣列其中一段的資料
  • 獲取ip地址
  • PHP限制IP訪問 只允許指定IP訪問 允許*號通配符過濾IP
  • 獲取地址路徑里0到第一個\線的部分
  • 獲取當前檔案所在的檔案路徑
  • 獲取隨機字串
  • 中文字串反轉
  • 檢查目標檔案夾是否存在,如果不存在則自動創建該目錄
  • 默認獲得檔案修改時間
  • 判斷后綴型別
  • 檢查檔案型別
  • 獲取檔案后綴名,并判斷是否在定義的陣列中
  • 判斷路徑是檔案還是目錄
  • 計算檔案或目錄位元組大小
  • 接收異步過來的get訊息
  • curl之get請求
  • curl之post請求
  • curl之post_get請求
  • 判斷陣列型別引數是否含有空元素值
  • 判斷是否傳入必要引數

php常用自定義函式類下載

https://pan.baidu.com/s/18ZuQm5cx3ynQtQqcQgK0Vw


php 設定字符編碼為utf-8

header("Content-Type: text/html;charset=utf-8");


GB2312和utf8相互轉換

echo iconv('GB2312', 'UTF-8//IGNORE', $str);      //將字串的編碼從GB2312轉到UTF-8
//ignore的意思是忽略轉換時的錯誤,如果沒有ignore引數,所有該字符后面的字串都無法被保存,
iconv("UTF-8","GB2312//IGNORE",$data);    
print_r(iconv_get_encoding());            //得到當前頁面編碼資訊
// 轉碼
function gbk($str){return iconv('utf-8','gbk',$str);}
function utf8($str){return iconv('gbk','utf-8',$str);}

路徑格式化(替換雙斜線為單斜線)

function path_formate($str){
    return str_replace('\\\\','\\',$str);
}

獲取當前檔案的目錄

方法一:
define('BASE_PATH',rtrim(str_replace('\\','/',__DIR__).'/'));
方法二:
define('BASE_DIR', rtrim(str_replace('\\', '/', dirname(__FILE__)),'/').'/');

列印輸出

function dump($var)
{
    echo '<pre>';
    print_r($var);
    echo '</pre>';
}

function vp($var)
{
    echo '<pre>';
    var_dump($var);
    echo '</pre>';
}

function dd($var)
{
    echo '<pre>';
    var_dump($var);
    echo '</pre>';
    die;
}

api回傳資訊

/**
*  資料回傳
 * @param  [int] $code [結果碼 200:正常/4**資料問題/5**服務器問題]
 * @param  [string] $msg  [回傳的提示資訊]
 * @param  [array]  $data [回傳的資料]
 * @return [string]       [最終的json資料]
*/
public function return_msg($code, $msg = '', $data = https://www.cnblogs.com/xssz/p/[]) {
 
    /*********** 組合資料  ***********/
    $return_data['code'] = $code;
    $return_data['msg']  = $msg;
    $return_data['data'] = $data;
 
    /*********** 回傳資訊并終止腳本  ***********/
    echo json_encode($return_data,JSON_UNESCAPED_UNICODE);
    die;
}

字串截取

方法一:

在公共的common.php中

//字串截取并且超出顯示省略號
function subtext($text, $length)
{
if(mb_strlen($text, ‘utf8’) > $length)
return mb_substr($text,0,$length,’utf8′).’ …’;
return $text;
}

在模版中呼叫則:
{$tops.title | subtext=18}

方法二:

在公共的common.php中

//字串截取

function cut_str($sourcestr,$cutlength)  

{  

   $returnstr='';  

   $i=0;  

   $n=0;  

   $str_length=strlen($sourcestr);//字串的位元組數  

   while (($n<$cutlength) and ($i<=$str_length))  

   {  

      $temp_str=substr($sourcestr,$i,1);  

      $ascnum=Ord($temp_str);//得到字串中第$i位字符的ascii碼  

      if ($ascnum>=224)    //如果ASCII位高與224,  

      {  

$returnstr=$returnstr.substr($sourcestr,$i,3); //根據UTF-8編碼規范,將3個連續的字符計為單個字符          

         $i=$i+3;            //實際Byte計為3  

         $n++;            //字串長度計1  

      }  

      elseif ($ascnum>=192) //如果ASCII位高與192,  

      {  

         $returnstr=$returnstr.substr($sourcestr,$i,2); //根據UTF-8編碼規范,將2個連續的字符計為單個字符  

         $i=$i+2;            //實際Byte計為2  

         $n++;            //字串長度計1  

      }  

      elseif ($ascnum>=65 && $ascnum<=90) //如果是大寫字母,  

      {  

         $returnstr=$returnstr.substr($sourcestr,$i,1);  

         $i=$i+1;            //實際的Byte數仍計1個  

         $n++;            //但考慮整體美觀,大寫字母計成一個高位字符  

      }  

      else                //其他情況下,包括小寫字母和半角標點符號,  

      {  

         $returnstr=$returnstr.substr($sourcestr,$i,1);  

         $i=$i+1;            //實際的Byte數計1個  

         $n=$n+0.5;        //小寫字母和半角標點等與半個高位字符寬...  

      }  

   }  

         if ($str_length>$i){  

          $returnstr = $returnstr . "...";//超過長度時在尾處加上省略號  

      }  

    return $returnstr;  

} 

在模版中呼叫則:
{$brand.brand_description|cut_str=###,10}


字串make_by_id轉成makeById

function changestr($string){
    if(!is_string($string)){
        die('please input string.');
    }
    if(strpos($string,'_')){
        $stringArr=explode('_',$string);
        $str='';
        foreach ($stringArr as $v){
            $str .= ucfirst($v);
        }
        return $str;
    }
}

陣列 字串 物件 json格式的字串互轉

/**
 * 物件 轉 陣列
 *
 * @param object $obj 物件
 * @return array
 */
function object2array(&$object) {
    $object =  json_decode( json_encode( $object),true);
    return  $object;
}


/****物件轉json陣列格式的字串*****/
function obj2arr($object) {
    
    $json_object = json_encode($object);
    echo "<pre>";
    var_dump($json_object);die;
    $arr = json_decode($json_object, 1);
    return $arr;
}


/****json轉陣列*****/
/**
 * [json_to_arr description] json_to_arr 遍歷把json轉為陣列
 * @param  [type]  $jsonstr [description]
 * @return boolean          [description]
 */
 //測驗資料:$resp='{"jingdong_omnichannel_order_ship_update_responce":{"code":"0","result":"{\\"code\\":\\"400\\",\\"message\\":\\"系統例外:物流組件中為已取消狀態\\",\\"success\\":false}"}}';

function json_to_arr2($jsonstr)
{
    if (is_string($jsonstr)&&is_array(json_decode($jsonstr, true))) {
        $arr = json_decode($jsonstr, true);
        foreach ($arr as $k => $v) {
            if (is_array($v)) {
                foreach ($v as $kk=>$vv){
                    if(is_string($vv) && is_array(json_decode($vv, true))){
                        $arr[$k][$kk] = json_decode($vv, true);
                    }
                }
            }
            if(is_string($v)&&is_sarray(json_decode($v,true))){
                $arr[$k]=json_decode($v,true);
            }
        }
        return $arr;
    } else {
        die('This is not jsonString!');
    }
}



/**
 * 陣列 轉 物件
 *
 * @param array $arr 陣列
 * @return object
 */
function array_to_object($arr) {
    if (gettype($arr) != 'array') {
        return;
    }
    foreach ($arr as $k => $v) {
        if (gettype($v) == 'array' || getType($v) == 'object') {
            $arr[$k] = (object)array_to_object($v);
        }
    }
 
    return (object)$arr;
}


$arr = array(
    'name'=>'haima',
    'age'=>32,
    'gender'=>'nan'
);
$a=(Object)($arr); //陣列轉物件
echo '<pre>';
var_dump($a);

$jsonstring=json_encode($array,JSON_UNESCAPED_UNICODE); //物件轉json字串 不轉義中文漢字
echo '<pre>';
var_dump($jsonstring);

$abj=json_decode($array); //json轉物件
$array=json_decode($array,true); //json轉陣列


echo '<pre>';
$b=(Array)($a); //物件轉陣列
var_dump($b);

強制型別轉換

/**
 * 強制型別轉換
 * @param string $data
 * @param string $type
 * @return mixed
 */
private function typeCast(&$data, $type)
{
    switch (strtolower($type)) {
        // 陣列
        case 'a':
            $data = https://www.cnblogs.com/xssz/p/(array) $data;
            break;
        // 數字
        case 'd':
            $data = https://www.cnblogs.com/xssz/p/(int) $data;
            break;
        // 浮點
        case 'f':
            $data = https://www.cnblogs.com/xssz/p/(float) $data;
            break;
        // 布爾
        case 'b':
            $data = https://www.cnblogs.com/xssz/p/(boolean) $data;
            break;
        // 字串
        case 's':
        default:
            if (is_scalar($data)) {
                $data = https://www.cnblogs.com/xssz/p/(string) $data;
            } else {
                throw new \InvalidArgumentException('variable type error:' . gettype($data));
            }
    }
}


php序列化serialize與回傳序列化unserialeze

serialize() 把變數和它們的值編碼成文本
unserialize() 恢復原先變數


創建日志檔案

  1. 方法一(適合臨時用):
//陣列/字串都可以
file_put_contents( 'log.log', date('Y-m-d H:i:s',time()) .' ' . var_export($_REQUEST,true) . "\r\n", FILE_APPEND);
  1. 方法二:

例: /www.wdmcake.com/data/log/日期/$file檔案名

/**
*$str array/str 要寫入的內容
*$dir str 日期檔案夾里面的新建的檔案夾名字  例如 /www.wdmcake.com/data/log/201806/sms_apiaas
*$file string 檔案的名字 例:send_log_20180628.log
*/
function wdmlog($str,$dir='log',$file='log')
{
    if (!file_exists(ROOT_PATH . 'data/log/' . date('Ym'). '/' . $dir))
    {
        make_dir(ROOT_PATH . 'data/log/' . date('Ym'). '/' . $dir);
    }
    $str = is_array($str) ? var_export($str,true):$str;
       file_put_contents(ROOT_PATH . 'data/log/' . date('Ym'). '/' . $dir.'/' . $file .'_' . date('Ymd') . '.log', local_date('Y-m-d H:i:s') .' ' . $str . "\r\n", FILE_APPEND);
}    
  1. 方法三:
function create_log($data,$merchant,$agency,$file='')
{
   if(empty($merchant)) die("商戶code不可為空");
   if(empty($agency)) die("平臺code不可為空");
   $file_path = ROOT_PATH . 'logdata/'.$merchant.'/'.$agency;
   if(!is_dir($file_path)){
        mkdir($file_path, 0777, true); 
    }    
    file_put_contents($file_path.'/'.$agency.'_' . $file . date('Ymd',time()) . '.log', date('Y-m-d H:i:s',time()) .' ' . var_export($data,true) . "\r\n", FILE_APPEND);
}

回傳二維陣列其中一段的資料

/**
 * [slice description] 回傳二維陣列其中一段的資料
 * @param  [type] $arr [description] 傳二維關聯陣列
 * @param  [type] $star [description] 截取的開始位置
 * @param  [type] $length [description] 截取的長度
 * @param  [type] $order [description] 0順序 -1倒序
 * @param  [type] $preserve [description] 保持索引關系 true - 保留鍵名 false - 默認,重置鍵名
 * @return [type]      [description]
 */
function slice($arr, $star, $length, $order = 0, $preserve = false)
{
    foreach ($arr as $key => $value) {
        $arr[$key] = array_slice($value, $star, $length, $preserve);
    }
    if ($order) {
        return array_reverse($arr);
    }
    return $arr;
}

例子:

<?php
header('Content-Type=text/html;charset:utf8');
$arr = array(
    [
        'id' => '1',
        'name' => '李四',
        'age' => '21',
        'gender' => '男',
    ],
    [
        'id' => '2',
        'name' => '王五',
        'age' => '22',
        'gender' => '男',
    ],

);

echo '<pre>';
print_r(slice($arr, 0, 2));

//列印:
// 列印結果:
// Array
// (
//     [0] => Array
//         (
//             [id] => 1
//             [name] => 李四
//         )

//     [1] => Array
//         (
//             [id] => 2
//             [name] => 王五
//         )

// )

獲取ip地址

  1. 方法一
$_SERVER['REMOTE_ADDR']
  1. 方法二
    /** 
     * 獲得訪問的IP 
     * Enter description here ... 
     */  
    function getIP() {  
        return isset($_SERVER["HTTP_X_FORWARDED_FOR"])?$_SERVER["HTTP_X_FORWARDED_FOR"]  
        :(isset($_SERVER["HTTP_CLIENT_IP"])?$_SERVER["HTTP_CLIENT_IP"]  
        :$_SERVER["REMOTE_ADDR"]);  
    } 
  1. 方法三
/**
 * 獲得用戶的真實IP地址
 *
 * @access  public
 * @return  string
 */
function real_ip()
{
    static $realip = NULL;

    if ($realip !== NULL)
    {
        return $realip;
    }

    if (isset($_SERVER))
    {
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        {
            $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);

            /* 取X-Forwarded-For中第一個非unknown的有效IP字串 */
            foreach ($arr AS $ip)
            {
                $ip = trim($ip);

                if ($ip != 'unknown')
                {
                    $realip = $ip;

                    break;
                }
            }
        }
        elseif (isset($_SERVER['HTTP_CLIENT_IP']))
        {
            $realip = $_SERVER['HTTP_CLIENT_IP'];
        }
        else
        {
            if (isset($_SERVER['REMOTE_ADDR']))
            {
                $realip = $_SERVER['REMOTE_ADDR'];
            }
            else
            {
                $realip = '0.0.0.0';
            }
        }
    }
    else
    {
        if (getenv('HTTP_X_FORWARDED_FOR'))
        {
            $realip = getenv('HTTP_X_FORWARDED_FOR');
        }
        elseif (getenv('HTTP_CLIENT_IP'))
        {
            $realip = getenv('HTTP_CLIENT_IP');
        }
        else
        {
            $realip = getenv('REMOTE_ADDR');
        }
    }

    preg_match("/[\d\.]{7,15}/", $realip, $onlineip);
    $realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0';

    return $realip;
}

PHP限制IP訪問 只允許指定IP訪問 允許*號通配符過濾IP

/** 
 * 檢測訪問的ip是否為規定的允許的ip 
 * Enter description here ... 
 */  
function check_ip(){  
    $ALLOWED_IP=array('192.168.2.*','127.0.0.1','192.168.2.49');  
    $IP=getIP();  
    $check_ip_arr= explode('.',$IP);//要檢測的ip拆分成陣列  
    #限制IP  
    if(!in_array($IP,$ALLOWED_IP)) {  
        foreach ($ALLOWED_IP as $val){  
            if(strpos($val,'*')!==false){//發現有*號替代符  
                 $arr=array();//  
                 $arr=explode('.', $val);  
                 $bl=true;//用于記錄回圈檢測中是否有匹配成功的  
                 for($i=0;$i<4;$i++){  
                    if($arr[$i]!='*'){//不等于*  就要進來檢測,如果為*符號替代符就不檢查  
                        if($arr[$i]!=$check_ip_arr[$i]){  
                            $bl=false;  
                            break;//終止檢查本個ip 繼續檢查下一個ip  
                        }  
                    }  
                 }//end for   
                 if($bl){//如果是true則找到有一個匹配成功的就回傳  
                    return;  
                    die;  
                 }  
            }  
        }//end foreach  
        header('HTTP/1.1 403 Forbidden');  
        echo "Access forbidden";  
        die;  
    }  
}  

獲取地址路徑里0到第一個\線的部分

function f_dirname($f_path){
    return substr($f_path,0,strrpos($f_path,'\\'));
}

獲取當前檔案所在的檔案路徑

define('CUR_API_PATH', rtrim(str_replace('\\', '/', dirname(__FILE__)),'/').'/');

獲取隨機字串

/**
 * 隨機字符
 * @param int $length 長度
 * @param string $type 型別
 * @param int $convert 轉換大小寫 1大寫 0小寫
 * @return string
 */
function random($length=10, $type='letter', $convert=0)
{
    $config = array(
        'number'=>'1234567890',
        'letter'=>'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
        'string'=>'abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789',
        'all'=>'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
    );

    if(!isset($config[$type])) $type = 'letter';
    $string = $config[$type];

    $code = '';
    $strlen = strlen($string) -1;
    for($i = 0; $i < $length; $i++){
        $code .= $string{mt_rand(0, $strlen)};
    }
    if(!empty($convert)){
        $code = ($convert > 0)? strtoupper($code) : strtolower($code);
    }
    return $code;
}

中文字串反轉


檢查目標檔案夾是否存在,如果不存在則自動創建該目錄

/**
 * 檢查目標檔案夾是否存在,如果不存在則自動創建該目錄
 *
 * @access      public
 * @param       string      folder     目錄路徑,不能使用相對于網站根目錄的URL
 *
 * @return      bool
 */
function make_dir($folder)
{
    $reval = false;

    if (!file_exists($folder))
    {
        /* 如果目錄不存在則嘗試創建該目錄 */
        @umask(0);

        /* 將目錄路徑拆分成陣列 */
        preg_match_all('/([^\/]*)\/?/i', $folder, $atmp);

        /* 如果第一個字符為/則當作物理路徑處理 */
        $base = ($atmp[0][0] == '/') ? '/' : '';

        /* 遍歷包含路徑資訊的陣列 */
        foreach ($atmp[1] AS $val)
        {
            if ('' != $val)
            {
                $base .= $val;

                if ('..' == $val || '.' == $val)
                {
                    /* 如果目錄為.或者..則直接補/繼續下一個回圈 */
                    $base .= '/';

                    continue;
                }
            }
            else
            {
                continue;
            }

            $base .= '/';

            if (!file_exists($base))
            {
                /* 嘗試創建目錄,如果創建失敗則繼續回圈 */
                if (@mkdir(rtrim($base, '/'), 0777))
                {
                    @chmod($base, 0777);
                    $reval = true;
                }
            }
        }
    }
    else
    {
        /* 路徑已經存在,回傳該路徑是不是一個目錄 */
        $reval = is_dir($folder);
    }

    clearstatcache();

    return $reval;
}

默認獲得檔案修改時間

function filetime($way,$char='m'){
    date_default_timezone_set('PRC');
    switch($char){
        case 'c':$localtime = date('Y-m-d H:i:s',filectime($way));
        break;
        case 'm':$localtime = date('Y-m-d H:i:s',filemtime($way));
        break;
        case 'a':$localtime = date('Y-m-d H:i:s',fileatime($way));
        break;
    }
    return $localtime;
}

判斷后綴型別

function suffixtype($f_path){
    $info = pathinfo($f_path);
    $f_type = 'file';
    switch(strtolower(@$info["extension"])){
        case 'jpg':case 'jpeg':case 'gif':
        case 'png':case 'bmp':$f_type = 'image';break;
        case 'pl':case 'c':case 'cpp':case 'log':case 'asp':case 'php':case 'jsp':case 'txt':case 'xml':case 'html':case 'htm':case 'phtml':case 'jhtml':case 'java':case 'cfg':case 'ini':
        case 'text':case 'bat':$f_type = 'text';break;
    }
    return $f_type;
}

檢查檔案型別

/**
 * 檢查檔案型別
 *
 * @access      public
 * @param       string      filename            檔案名
 * @param       string      realname            真實檔案名
 * @param       string      limit_ext_types     允許的檔案型別
 * @return      string
 */
function check_file_type($filename, $realname = '', $limit_ext_types = '')
{
    if ($realname)
    {
        $extname = strtolower(substr($realname, strrpos($realname, '.') + 1));
    }
    else
    {
        $extname = strtolower(substr($filename, strrpos($filename, '.') + 1));
    }

    if ($limit_ext_types && stristr($limit_ext_types, '|' . $extname . '|') === false)
    {
        return '';
    }

    $str = $format = '';

    $file = @fopen($filename, 'rb');
    if ($file)
    {
        $str = @fread($file, 0x400); // 讀取前 1024 個位元組
        @fclose($file);
    }
    else
    {
        if (stristr($filename, ROOT_PATH) === false)
        {
            if ($extname == 'jpg' || $extname == 'jpeg' || $extname == 'gif' || $extname == 'png' || $extname == 'doc' ||
                $extname == 'xls' || $extname == 'txt'  || $extname == 'zip' || $extname == 'rar' || $extname == 'ppt' ||
                $extname == 'pdf' || $extname == 'rm'   || $extname == 'mid' || $extname == 'wav' || $extname == 'bmp' ||
                $extname == 'swf' || $extname == 'chm'  || $extname == 'sql' || $extname == 'cert'|| $extname == 'pptx' || 
                $extname == 'xlsx' || $extname == 'docx')
            {
                $format = $extname;
            }
        }
        else
        {
            return '';
        }
    }

    if ($format == '' && strlen($str) >= 2 )
    {
        if (substr($str, 0, 4) == 'MThd' && $extname != 'txt')
        {
            $format = 'mid';
        }
        elseif (substr($str, 0, 4) == 'RIFF' && $extname == 'wav')
        {
            $format = 'wav';
        }
        elseif (substr($str ,0, 3) == "\xFF\xD8\xFF")
        {
            $format = 'jpg';
        }
        elseif (substr($str ,0, 4) == 'GIF8' && $extname != 'txt')
        {
            $format = 'gif';
        }
        elseif (substr($str ,0, 8) == "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A")
        {
            $format = 'png';
        }
        elseif (substr($str ,0, 2) == 'BM' && $extname != 'txt')
        {
            $format = 'bmp';
        }
        elseif ((substr($str ,0, 3) == 'CWS' || substr($str ,0, 3) == 'FWS') && $extname != 'txt')
        {
            $format = 'swf';
        }
        elseif (substr($str ,0, 4) == "\xD0\xCF\x11\xE0")
        {   // D0CF11E == DOCFILE == Microsoft Office Document
            if (substr($str,0x200,4) == "\xEC\xA5\xC1\x00" || $extname == 'doc')
            {
                $format = 'doc';
            }
            elseif (substr($str,0x200,2) == "\x09\x08" || $extname == 'xls')
            {
                $format = 'xls';
            } elseif (substr($str,0x200,4) == "\xFD\xFF\xFF\xFF" || $extname == 'ppt')
            {
                $format = 'ppt';
            }
        } elseif (substr($str ,0, 4) == "PK\x03\x04")
        {
            if (substr($str,0x200,4) == "\xEC\xA5\xC1\x00" || $extname == 'docx')
            {
                $format = 'docx';
            }
            elseif (substr($str,0x200,2) == "\x09\x08" || $extname == 'xlsx')
            {
                $format = 'xlsx';
            } elseif (substr($str,0x200,4) == "\xFD\xFF\xFF\xFF" || $extname == 'pptx')
            {
                $format = 'pptx';
            }else
            {
                $format = 'zip';
            }
        } elseif (substr($str ,0, 4) == 'Rar!' && $extname != 'txt')
        {
            $format = 'rar';
        } elseif (substr($str ,0, 4) == "\x25PDF")
        {
            $format = 'pdf';
        } elseif (substr($str ,0, 3) == "\x30\x82\x0A")
        {
            $format = 'cert';
        } elseif (substr($str ,0, 4) == 'ITSF' && $extname != 'txt')
        {
            $format = 'chm';
        } elseif (substr($str ,0, 4) == "\x2ERMF")
        {
            $format = 'rm';
        } elseif ($extname == 'sql')
        {
            $format = 'sql';
        } elseif ($extname == 'txt')
        {
            $format = 'txt';
        }
    }

    if ($limit_ext_types && stristr($limit_ext_types, '|' . $format . '|') === false)
    {
        $format = '';
    }

    return $format;
}

獲取檔案后綴名,并判斷是否在定義的陣列中

/**
 * 獲取檔案后綴名,并判斷是否合法
 *
 * @param string $file_name //是一個檔案的路徑
 * @param array $allow_type //需要的檔案型別陣列
 * @return blob
 */
function get_file_suffix($file_name, $allow_type = array())
{
    $file_suffix = strtolower(array_pop(explode('.', $file_name)));
    if (empty($allow_type))
    {
        return $file_suffix;
    }
    else
    {
        if (in_array($file_suffix, $allow_type))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

判斷路徑是檔案還是目錄

function f_type($f_path){
    return is_dir($f_path)?'dir':suffixtype($f_path);
}

計算檔案或目錄位元組大小

//計算檔案或目錄位元組大小
function bytesize_calc($f_path){
    if(!is_dir($f_path)){
        return sprintf("%u", filesize($f_path));}
    $bytesize = 0;
    $f_arr = scandir($f_path);
    $size = count($f_arr);
    for($i=0;$i<$size;$i++){
        if('.'==$f_arr[$i]||'..'==$f_arr[$i])continue;
        $file_or_dir = $f_path.'/'.$f_arr[$i];
        $bytesize += bytesize_calc($file_or_dir);
    }
    return $bytesize;
}
//獲得檔案大小
function f_size($f_path){
    return size_formate(bytesize_calc($f_path));
}

接收異步過來的get訊息

    $sms_result_data = https://www.cnblogs.com/xssz/p/$_GET;   //用這種
    $param = request()->param(); //thinkphp5接收訊息
    $sms_result_data1 = file_get_contents("php://input");

curl之get請求

function _curl_get($urldata)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$urldata);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//不驗證SSL證書,
    $data = https://www.cnblogs.com/xssz/p/curl_exec($ch);
    curl_close($ch);
    if ($data)
        return $data;
    else
        return false;
}

curl之post請求

如果是有圖片要上傳加下面用這行代碼

curl_file_create(ROOT_PATH.'public'.$value["goods_img"]);

/**
 * [post description]
 * @param  [type]  $url       [請求的url]
 * @param  string  $post_data [請求的資料]
 * @param  integer $timeout   [請求超時時間]
 * @return [type]  $Mix     [混合資料json|array|obj]
 */
function post($url, $post_data = https://www.cnblogs.com/xssz/p/'', $timeout = 3000)
{
    header("Content-type:text/html;charset=utf-8");
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_POST, 1);
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $post_data);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_HEADER, false);
    $file_contents = curl_exec($ch);
    curl_close($ch); 
    if ($content){
        return $file_contents;
    }else{
        return false;
    }       
}

curl之post_get請求

如果是有圖片要上傳加下面用這行代碼

curl_file_create(ROOT_PATH.'public'.$value["goods_img"]);

  1. 方法一
/**
 * [_curl_post_get description]
 * 如果$data為空轉為get請求.https不驗證證書
 * @param  [type]  $url     [url]
 * @param  array   $data    [要傳的資料]
 * @param  integer $timeout [設定請求超時的時間]
 * @return [type]  $Mix     [混合資料json|array|obj]
 */
function _curl_post($url, $data = https://www.cnblogs.com/xssz/p/'',$timeout = 3000) {
    header("Content-type:text/html;charset=utf-8");
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);  //請求的url
    curl_setopt($ch, CURLOPT_HEADER, false);  ////是否攜帶head頭資訊 ture / error
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  //回傳資料還是列印資料 0,直接輸出 1,回傳
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); //設定請求超時的時間
    // https請求 不驗證證書和hosts方法:
    if (strlen($url) > 5 && strtolower(substr($url, 0, 5)) == "https")
    //if (1 == strpos("$".$url, "https://")) //效果同上面
    {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    }
    if(!empty($post_data)){
        curl_setopt($ch, CURLOPT_POST,1); //設定post方式請求,如果不寫默認為get方式
        curl_setopt($ch, CURLOPT_POSTFIELDS,$data); //要傳遞的引數
    }       

    //發送請求 并接收資料賦值給$data
    $data = https://www.cnblogs.com/xssz/p/curl_exec($ch);  
    //關閉請求資源
    curl_close($ch);   
    $content = iconv('gb2312', 'utf-8//IGNORE',$data); //修改字符編碼

    if ($content)
        return $content;
    else
        return false;
}
  1. 方法二
/**
 * curl訪問
 * @author rainfer <81818832@qq.com>
 * @param  string $url
 * @param string $type
 * @param boolean $data
 * @param string $err_msg
 * @param int $timeout
 * @param array $cert_info
 * @return string
 */
function go_curl($url, $type, $data = https://www.cnblogs.com/xssz/p/false, &$err_msg = null, $timeout = 20, $cert_info = array())
{
    $type = strtoupper($type);
    if ($type == 'GET' && is_array($data)) {
        $data = https://www.cnblogs.com/xssz/p/http_build_query($data);
    }
    $option = array();
    if ( $type == 'POST' ) {
        $option[CURLOPT_POST] = 1;
    }
    if ($data) {
        if ($type == 'POST') {
            $option[CURLOPT_POSTFIELDS] = $data;
        } elseif ($type == 'GET') {
            $url = strpos($url, '?') !== false ? $url.'&'.$data :  $url.'?'.$data;
        }
    }
    $option[CURLOPT_URL]            = $url;
    $option[CURLOPT_FOLLOWLOCATION] = TRUE;
    $option[CURLOPT_MAXREDIRS]      = 4;
    $option[CURLOPT_RETURNTRANSFER] = TRUE;
    $option[CURLOPT_TIMEOUT]        = $timeout;
    //設定證書資訊
    if(!empty($cert_info) && !empty($cert_info['cert_file'])) {
        $option[CURLOPT_SSLCERT]       = $cert_info['cert_file'];
        $option[CURLOPT_SSLCERTPASSWD] = $cert_info['cert_pass'];
        $option[CURLOPT_SSLCERTTYPE]   = $cert_info['cert_type'];
    }
    //設定CA
    if(!empty($cert_info['ca_file'])) {
        // 對認證證書來源的檢查,0表示阻止對證書的合法性的檢查,1需要設定CURLOPT_CAINFO
        $option[CURLOPT_SSL_VERIFYPEER] = 1;
        $option[CURLOPT_CAINFO] = $cert_info['ca_file'];
    } else {
        // 對認證證書來源的檢查,0表示阻止對證書的合法性的檢查,1需要設定CURLOPT_CAINFO
        $option[CURLOPT_SSL_VERIFYPEER] = 0;
    }
    $ch = curl_init();
    curl_setopt_array($ch, $option);
    $response = curl_exec($ch);
    $curl_no  = curl_errno($ch);
    $curl_err = curl_error($ch);
    curl_close($ch);
    // error_log
    if($curl_no > 0) {
        if($err_msg !== null) {
            $err_msg = '('.$curl_no.')'.$curl_err;
        }
    }
    return $response;
}
  1. 方法三
//curl模擬post發送請求
function curl_sent($url, $postFields = null)
{
    $header = array(
            // 'Content-Type: application/json',
            'Content-Type: application/x-www-form-urlencoded'
    );
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_FAILONERROR, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // https 請求
    if (strlen($url) > 5 && strtolower(substr($url, 0, 5)) == "https")
    {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    }

    if (is_array($postFields) && 0 < count($postFields))
    {
        curl_setopt($ch, CURLOPT_POST, true);
        $postMultipart = false;
        foreach ($postFields as $k => $v)
        {
            if ('@' == substr($v, 0, 1))
            {
                $postMultipart = true;
                break;
            }
        }
        unset($k, $v);
        if ($postMultipart) {
            curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
        } else {
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postFields));
        }
    }
    $reponse = curl_exec($ch);

    if (curl_errno($ch))
    {
        throw new JosSdkException(curl_error($ch), 0);
    } else {
        $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if (200 !== $httpStatusCode)
        {
            throw new JosSdkException($reponse, $httpStatusCode);
        }
    }
    curl_close($ch);
    return $reponse;
}

方法四**:

    public $connectTimeout = 0;

    public $readTimeout = 0;
    public function curl($url, $postFields = null)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_FAILONERROR, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        if ($this->readTimeout) {
            curl_setopt($ch, CURLOPT_TIMEOUT, $this->readTimeout);
        }
        if ($this->connectTimeout) {
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->connectTimeout);
        }
        //https 請求
        if(strlen($url) > 5 && strtolower(substr($url,0,5)) == "https" ) {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        }

        if (is_array($postFields) && 0 < count($postFields))
        {
            $postBodyString = "";
            $postMultipart = false;
            foreach ($postFields as $k => $v)
            {
                if("@" != substr($v, 0, 1))//判斷是不是檔案上傳
                {
                    $postBodyString .= "$k=" . urlencode($v) . "&"; 
                }
                else//檔案上傳用multipart/form-data,否則用www-form-urlencoded
                {
                    $postMultipart = true;
                }
            }
            unset($k, $v);
            curl_setopt($ch, CURLOPT_POST, true);
            if ($postMultipart)
            {
                curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
            }
            else
            {
                curl_setopt($ch, CURLOPT_POSTFIELDS, substr($postBodyString,0,-1));
            }
        }
        $reponse = curl_exec($ch);
        $reponse = iconv('gb2312', 'utf-8//IGNORE',$reponse); //修改字符編碼
        create_log('第'.__LINE__.'行', 'wdm', 'jdomnic', 'curl');
        create_log($reponse, 'wdm', 'jdomnic', 'curl');
        if (curl_errno($ch))
        {
            throw new Exception(curl_error($ch),0);
        }
        else
        {
            $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            if (200 !== $httpStatusCode)
            {
                throw new Exception($reponse,$httpStatusCode);
            }
        }
        curl_close($ch);
        return $reponse;
    }

判斷陣列型別引數是否含有空元素值

//$param array
function is_arraynull($param){
    if(!is_array($param)){
        return '0';
    }else{
        foreach ($param as $key => $value) {
            if($value!=''){
                $ret = is_arraynull($value);
            }else{
                return  1;
            }
        }
    }
}

判斷是否傳入必要引數

  /**
   * 判斷是否傳入必要引數
   * @param  [type] $inter_param [description]
   * @param  [type] $agency      [description]
   * @param  [type] $merchant    [description]
   * @return [type]              [description]
   */
  function judge_parameter($param){
            if(!isset($param['inter_param']) || !isset($param['agency']) || !isset($param['merchant'])){
                return false;
            }
            if(empty($param['inter_param']) || empty($param['agency']) || empty($param['merchant'])){
                return false;
            }
            return true;
  }

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/136631.html

標籤:PHP

上一篇:非對稱加密openssl協議在php7實踐

下一篇:深度好文:PHP寫時拷貝與垃圾回識訓制(轉)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more