PHP常用的自定義函數

PHP常用的自定義函數

目錄

  • php常用自定義函數類下載
  • php 設置字符編碼為utf-8
  • 路徑格式化(替換雙斜線為單斜線)
  • 轉碼
  • 打印輸出
  • api返回信息
  • 字符串截取
    • 方法一:
    • 方法二:
  • 數組 字符串 對象 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");


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

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

轉碼

function gbk($str){return iconv('utf-8','gbk',$str);}
function utf8($str){return iconv('gbk','utf-8',$str);}
---

打印輸出

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}


數組 字符串 對象 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; } /** * 數組 轉 對象 * * @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); }

獲取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 = 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 = '',$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 = 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 = false, &$err_msg = null, $timeout = 20, $cert_info = array()) { $type = strtoupper($type); if ($type == 'GET' && is_array($data)) { $data = 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; }

判斷數組類型參數是否含有空元素值

//$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.cnblogs.com/hzg8754/p/9952399.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249022.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249022.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249022.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring注解@Component、@Repository、@Service、@Controller區別

很長時間沒做web項目都把以前學的那點框架知識忘光了&#xff0c;今天把以前做的一個項目翻出來看一下發現用Component標記一個組件&#xff0c;而網上有的用Service標記組件&#xff0c;我暈就查了一下資料&#xff1a; Spring 2.5 中除了提供 Component 注釋外&#xff0c;還…

春第十周作業

作業&#xff1a; 這個作業屬于那個課程C語言程序設計II這個作業要求在哪里https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/3162我在這個課程的目標是閱讀并學習這個作業在那個具體方面幫助我實現目標知道了我們以后工作所需的是雇主所需的參…

在原生js中的事件監聽方法

一、傳統事件綁定方法我們在學習的時候&#xff0c;最初接觸的事件綁定方式大多是傳統事件綁定方法。傳統事件綁定方法事例如下&#xff1a; window.οnlοadfunction(){alert("頁面已加載"); } document.getElementById("btn").οnclickfunction(){alert(…

MySql修改數據庫編碼為UTF8

mysql 創建 數據庫時指定編碼很重要&#xff0c;很多開發者都使用了默認編碼&#xff0c;亂碼問題可是防不勝防。制定數據庫的編碼可以很大程度上避免倒入導出帶來的亂碼問題。 網頁數據一般采用UTF8編碼&#xff0c;而數據庫默認為latin 。我們可以通過修改數據庫默認編碼方式…

第六次作業(C語言)

心得體會 該題主要涉及知識點有&#xff1a;1、函數的定義&#xff1b;2、函數的調用&#xff08;即prime函數的調用&#xff09;&#xff1b;3、素數的判斷&#xff1b;4、大小排序。 看到題時我首先想到了嵌套循環&#xff0c;可是仔細一看題目要求的是用prime函數的調用&…

Javascript系列——對象元素的數組去重實現

概要 這是一篇記錄文&#xff0c;記錄數組操作對象去重的實現。 需求 有這樣一個數組 [{_id: 123,name: 張三 },{_id: 124,name: 李四 },{_id: 123,name: 張三 }] 實際上我們只需要 [{_id: 123,name: 張三 },{_id: 124,name: 李四 }] 去重 簡單數組的去重 Array.from(new Set([…

關于__getattribute__

先看一個案例 class Tree(object):def __init__(self,name):self.namenameself.cateplantdef __getattribute__(self, item):if item大樹:print(log 大樹)return 我愛大樹else:return object.__getattribute__(self,item)aaTree(rrrr) print(aa.name) print(aa.cate) 運行結果…

通過Navicat for MySQL遠程連接的時候報錯mysql 1130的解決方法

來源&#xff1a;互聯網 作者&#xff1a;佚名 時間&#xff1a;10-16 18:41:20 【大 中 小】 錯誤代碼是1130&#xff0c;ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server 是無法給遠程連接的用戶權限問題 Navicat for mysql 1130錯誤 用…

Java Language Changes for Java SE 9

Java9引入了module模塊的概念&#xff0c;是類與接口和數據資源的一種封裝&#xff0c;并可以聲明與其他模塊的依賴關系。這里總結一下Java9帶來的新特性。更簡練的try-with-resources語句final Resource resource1 new Resource("resource1");//a final resourceRe…

ProtocolHandler繼承體系

轉載于:https://www.cnblogs.com/GooPolaris/p/10815072.html

mysql數據庫存儲過程及調用方法

mysql數據庫存儲過程及調用方法 mysql5.0以后就支持存儲過程了&#xff0c;目前mysql的6.0Alpha版也已經推出。6.0不僅支持大型數據庫如oracle等的絕大部分功 能&#xff0c;如存儲過程、視圖、觸發器、job等等&#xff0c;而且修正了這些功能所存在的bug&#xff0c;其中6.0.1…

紅蜻蜓

日本人なら一度は耳にしたことのある曲でしょう。忘れかけている里山の風景が目に浮かびます。このあたりは昔養蠶が盛んで、何処へ行っても桑畑があったものでしたが、最近はとんと見かけません。小さい頃、よく桑の実をつんで食べたものでした。&#xff08;このあたりでは&q…

elastic學習筆記

要點 不同工具之間版本匹配很重要由點及面&#xff0c;先實踐起來再學細節的原理和使用 技術棧 laravel5.5框架scout組件elasticsearch6.3.0搜索引擎輔助 elasticsearch-head 查看集群數據可視化 中文分詞插件Ik介紹 laravel是一款現代化的php框架es是搜索引擎es-head是管理查看…

mysql 存儲過程中limit

mysql 存儲過程中limit 1、mysql的高版本&#xff08;5.5&#xff09;&#xff0c;存儲過程中的limit可以使用變量&#xff0c;如下&#xff1a;select * from student limit iStart,iNum; 2、mysql的低版本&#xff08;5.1&#xff09;&#xff0c;存儲過程中的limit不能使用…

高頻ES6

var promise new Promise((resolve, reject)> {if (操作成功) {resolve (value)}else{reject(error)} }) promise.than(function (value) {/*成功*/}, function(value) {/*失敗*/}) Promise是異步編程的一種解決方案, 比傳統的解決方案--回調函數和事件更加強大.由社區最早…

NodeJS+Express+MongoDB - 張果 - 博客園

目錄 一、MongoDB 1.1、安裝MongoDB 1.1.1、配置運行環境1.1.2、運行MongoDB1.2、數據庫操作 1.2.1、創建數據庫與查看數據庫1.2.2、刪除數據庫1.2.3、插入數據1.2.4、查詢數據1.2.5、修改1.2.6、刪除二、NodeJS訪問MongoDB 2.1、安裝MongoDB訪問驅動2.2、添加數據2.3、修改數…

一個好用的瀏覽器暗色瀏覽插件 Dark Reader

轉載于:https://www.cnblogs.com/tyong/p/9973363.html

Android小測驗感受

1.運行出現“...keeps stopping” 因為 前臺變量“無值”而后臺卻進行“獲取變量值” 2.switch(int,char...) case break;(不能忘) 3.轉載于:https://www.cnblogs.com/tangxx1996/p/10825134.html

SpringMVC ?注解式傳遞Ztree參數

前端頁面JS處理&#xff1a; $("#save").click( function(){var zTree $.fn.zTree.getZTreeObj("treeDemo" );if(projectType "" || projectType null || projectType undefined){alert( "請選擇項目類型&#xff01;" ); return…

實驗 4 [bx]和 loop 的使用

實驗結論 實驗1&#xff1a;綜合使用 loop,[bx]&#xff0c;編寫完整匯編程序&#xff0c;實現向內存 b800:07b8 開始的連續 16 個字單元重復填充字數據 0403H。 1.源代碼及實驗結果 運行結果&#xff1a;屏幕中央出現一排紅色的心?。 2.將源代碼程序中字數據 0403H→修改為 0…