1. file_get_contents無效時使用
其返回false,使用curl調用
/*file_get_contents相同功能,curl*/ function file_get_content($url) { if (function_exists('file_get_contents')) { $file_contents = @file_get_contents($url); } if ($file_contents =='') { $ch = curl_init(); $timeout = 30; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $file_contents = curl_exec($ch); curl_close($ch); } return $file_contents; }
2. PHP產生一個隨機字串
如果不需要可閱讀的字串,使用此函數替代,即可建立一個隨機字串,作為使用者的隨機密碼等。
function generate_rand($l){ $c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; srand((double)microtime()*1000000); for($i=0; $i<$l; $i++) { $rand.= $c[rand()%strlen($c)]; } return $rand; }
3. 指令碼已耗用時間記錄
當需要檢測指令碼已耗用時間時使用:監測時間開始點:$start_time = runTime();監測時間結束點:$run_time = runTime($start_time);
/** * 當 $start_time!=0 計算時間差 * @param int $start_time,開始時間 ,0表示開始計時,有值是返回時間差 * @return float ,返回目前時間 | 返回時間差,單位為毫秒 */ function runTime($start_time = 0){ if($start_time){ return runTime()-$start_time; }else{ list($usec, $sec) = explode(" ", microtime()); $a = ((float)$usec + (float)$sec)*1000; return $a; } }
4. xml->array
介面開發的過程中難免用到xml格式,把它轉換成array
function xmlToArray($xml){ //禁止引用外部xml實體 libxml_disable_entity_loader(true); $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); $val = json_decode(json_encode($xmlstring),true); return $val; }
5. array->xml
/*數組轉化成XML*/function arrayToXml($arr){ $xml = "<root>"; foreach ($arr as $key=>$val){ if(is_array($val)){ $xml.="<".$key.">".arrayToXml($val)."</".$key.">"; }else{ $xml.="<".$key.">".$val."</".$key.">"; } } $xml.="</root>"; return $xml ;}
6. 寫檔案快取
當訪問量上來時沒有記憶體緩衝redis,memcache時,可以先用檔案快取擋一下。
tips:可以json_encode + md5 作為檔案的名稱,方便緩衝不同查詢條件下的內容。
/** * 寫商品資訊到檔案快取,與r_cache合用 * @param $data ,寫檔案快取的資料 * @param $file_name,檔案名稱 * @param $append,是否是追加寫入檔案 * @param $dir,檔案目錄 ,預設在/var/logdata/121shop/下 */ function w_cache($data,$file_name,$dir,$append = false){ $ret = array('time'=>time(),'data'=>$data); $ret = json_encode($ret); if (!@mkdir('/var/logdata/'.$dir.'/', 0755)){ if($append){ // 追加寫入的模式 file_put_contents('/var/logdata/'.$dir.'/'.$file_name.date('Y-m-d'),$ret,FILE_APPEND); }else{ //重寫的模式覆蓋原來 file_put_contents('/var/logdata/'.$dir.'/'.$file_name,$ret); } } }
7. 讀檔案快取
/** * 讀取商品檔案快取 * @param $min ,緩衝有效時間。預設5分鐘 * @param $file_name ,檔案名稱 * @param $dir ,目錄 * @return bool 檔案不存在 | 資料不存在 | 或者資料時間超過$min分鐘, 返回false */ function r_cache($min ,$file_name,$dir){ $cache_time = $min * 60 ;//單位秒 $file_name = '/var/logdata/121shop/'.$dir.'/'.$file_name; if(!is_file($file_name)){ return false; } $data = file_get_contents($file_name); if(empty($data)){ return false; } $data = json_decode($data,true); $now = time(); $data_time = $data['time']; if($now-$data_time>$cache_time){ return false; } return empty($data)?false:$data['data']; }
8. 設定檔讀取 C方法
$config_db = include_once PATH.”/Conf/db.php”; //引入資料庫設定檔,返回數組
// 擷取配置值 function C($name=null, $value=null) { //靜態局部變數,後面的使用取值都是在 $)config數組取 static $_config = array(); // 無參數時擷取所有 if (empty($name)) return $_config; // 優先執行設定擷取或賦值 if (is_string($name)) { if (!strpos($name, '.')) { $name = strtolower($name); if (is_null($value)) return isset($_config[$name]) ? $_config[$name] : null; $_config[$name] = $value; return; } // 二維數組設定和擷取支援 $name = explode('.', $name); $name[0] = strtolower($name[0]); if (is_null($value)) return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : null; $_config[$name[0]][$name[1]] = $value; return; } // include 'config.php' 返回的是一個數組,這個數組作為C函數的參數,所以會跳到這裡,然後將數組的值返回給 $_config if (is_array($name)){ return $_config = array_merge($_config, array_change_key_case($name)); } return null; // 避免非法參數 }
9. PHP擷取IP 位址
該函數將擷取使用者的真實 IP 位址,即便他使用Proxy 伺服器。
function getRealIpAddr() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip=$_SERVER['HTTP_CLIENT_IP']; }elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ //to check ip is pass from proxy $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip=$_SERVER['REMOTE_ADDR']; } return $ip; }
取上一步來源地址
/** * 取上一步來源地址 * * @param * @return string 字串類型的返回結果 */function getReferer(){ return empty($_SERVER['HTTP_REFERER'])?'':$_SERVER['HTTP_REFERER'];}
10. PHP尋找兩個字串的相似性
PHP 提供了一個極少使用的 similar_text 函數,但此函數非常有用,用於比較兩個字串並返回相似程度的百分比。
similar_text($string1, $string2, $percent);
11. unicode轉為utf8
/** * unicode轉為utf8 * @param string $str 待轉的字串 * @return string */function unicodeToUtf8($str, $order = "little"){ $utf8string =""; $n=strlen($str); for ($i=0;$i<$n ;$i++ ) { if ($order=="little") { $val = str_pad(dechex(ord($str[$i+1])), 2, 0, STR_PAD_LEFT) . str_pad(dechex(ord($str[$i])), 2, 0, STR_PAD_LEFT); } else { $val = str_pad(dechex(ord($str[$i])), 2, 0, STR_PAD_LEFT) . str_pad(dechex(ord($str[$i+1])), 2, 0, STR_PAD_LEFT); } $val = intval($val,16); // 由於上次的.串連,導致$val變為字串,這裡得轉回來。 $i++; // 兩個位元組表示一個unicode字元。 $c = ""; if($val < 0x7F) { // 0000-007F $c .= chr($val); } elseif($val < 0x800) { // 0080-07F0 $c .= chr(0xC0 | ($val / 64)); $c .= chr(0x80 | ($val % 64)); } else { // 0800-FFFF $c .= chr(0xE0 | (($val / 64) / 64)); $c .= chr(0x80 | (($val / 64) % 64)); $c .= chr(0x80 | ($val % 64)); } $utf8string .= $c; } /* 去除bom標記 才能使內建的iconv函數正確轉換 */ if (ord(substr($utf8string,0,1)) == 0xEF && ord(substr($utf8string,1,2)) == 0xBB && ord(substr($utf8string,2,1)) == 0xBF) { $utf8string = substr($utf8string,3); } return $utf8string;}
12. 價格格式化
/*** 價格格式化** @param int $price* @return string $price_format*/function PriceFormat($price) { $price_format= number_format($price,2,'.',''); return $price_format;}
13. j s判斷訪問網站的類型,ios or android
var u = navigator.userAgent; var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android終端 var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios終端alert(isAndroid);//true or falsealert(isiOS);