PHP常用的自定義函數

来源:https://www.cnblogs.com/xssz/archive/2019/10/03/11620738.html
-Advertisement-
Play Games

目錄 php常用自定義函數類下載 php 設置字元編碼為utf-8 GB2312和utf8相互轉換 路徑格式化(替換雙斜線為單斜線) 獲取當前文件的目錄 列印輸出 api返回信息 字元串截取 方法一: 方法二: 字元串make_by_id轉成makeById 數組 字元串 對象 json格式的字元串 ...


目錄


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 = []) {
 
    /*********** 組合數據  ***********/
    $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 = (array) $data;
            break;
        // 數字
        case 'd':
            $data = (int) $data;
            break;
        // 浮點
        case 'f':
            $data = (float) $data;
            break;
        // 布爾
        case 'b':
            $data = (boolean) $data;
            break;
        // 字元串
        case 's':
        default:
            if (is_scalar($data)) {
                $data = (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 = $_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 = 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 = '', $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 = 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • "Flask的使用以及返回值(其中Response後續詳細單獨補充)" "Flask的路由解讀以及其配置" "Flask的請求擴展" "Flask中的cookie和session" "Flask中的request和response" "Flask中的渲染變數" "Flask中的CBV以及正則表達式" ...
  • 第一次寫博客,正好在回顧Java的時候用到了比較器,記錄一下使用的方法。 Java比較器多用於對象數組的排序,主要用到comparable和comparator介面 1、使用comparable介面 首先將需要實現排序對象的類實現comparable介面,實現後覆寫comparaTo(T other ...
  • 1、HashMap源碼解析(JDK8) 基礎原理: 對比上一篇《Java中的容器(集合)之ArrayList源碼解析》而言,本篇只解析HashMap常用的核心方法的源碼。 HashMap是一個以鍵值對存儲的容器。 hashMap底層實現為數組+鏈表+紅黑樹(鏈表超過8時轉為紅黑樹,JDK7為數組+鏈 ...
  • 我們將生產者、消費者、庫存、和調用線程的主函數分別寫進四個類中,通過搶奪非線程安全的數據集合來直觀的表達在進行生產消費者模型的過程中可能出現的問題與解決辦法。 我們假設有一個生產者,兩個消費者來共同搶奪庫存里的資源,而生產者和消費者都以線程來實現。 庫存對象只有是唯一的才會出現搶奪一個資源的可能,所 ...
  • vue實現選擇圖片文件後預覽 利用h5的api可以實現選擇文件並實現預覽 readAsDataURL 方法會讀取指定的 Blob 或 File 對象。讀取操作完成的時候,readyState 會變成已完成DONE,並觸發 loadend 事件,同時 result 屬性將包含一個data:URL格式的 ...
  • 面向對象三大特性:封裝、繼承、多態 繼承的概念: 在定義類時,可以從已有類當中提取想要的內容 被繼承的類稱為父類、基類、超類,新定義的類稱為子類、派生類 註意:如果派生類中的屬性與基類屬性重名,那麼派生類的屬性會覆蓋掉基類的屬性。包括初始化函數。 派生類在初始化函數中需要繼承和修改初始化過程,使用’ ...
  • T1 動態逆序對 題目 【題目描述】 給出一個長度為n的排列a(1~n這n個數在數列中各出現1次)。每次交換兩個數,求逆序對數%2的結果。 逆序對:對於兩個數a[i],a[j](i<j),若a[i]>a[j],則(a[i],a[j])為1個逆序對。 【輸入格式】 第一行一個正整數n。 接下來一行n個 ...
  • 正則表達式是一個特殊的字元序列,它能幫助你方便的檢查一個字元串是否與某種模式匹配。 一、元字元 1) . --匹配任意字元(不包括換行符) 2) ^ --匹配開始位置,多行模式下匹配每一行的開始 3) $ --匹配結束位置,多行模式下匹配每一行的結束 4) * --匹配前一個元字元0到多次 5) + ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...