【推荐】PHP-集成函数总结

来源:互联网 发布:树莓派3b 网络配置 编辑:程序博客网 时间:2024/06/05 06:30

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;    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

  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; }  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

  3. 脚本运行时间记录

当需要检测脚本运行时间时使用:监测时间开始点:$start_time = runTime();监测时间结束点:$run_time = runTime($start_time);
  • 1
  • 2
  • 3
  • 4
  /**     * 当 $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;        }    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

  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;  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

  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 ;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

  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);            }        }    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

  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'];    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

  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; // 避免非法参数    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

  9. PHP获取IP 地址

  该函数将获取用户的真实 IP 地址,即便他使用代理服务器。

    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;     }  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

取上一步来源地址

/** * 取上一步来源地址 * * @param * @return string 字符串类型的返回结果 */function getReferer(){    return empty($_SERVER['HTTP_REFERER'])?'':$_SERVER['HTTP_REFERER'];}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

  10. PHP寻找两个字符串的相似性

  PHP 提供了一个极少使用的 similar_text 函数,但此函数非常有用,用于比较两个字符串并返回相似程度的百分比。

similar_text($string1, $string2, $percent); 
  • 1

 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;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

  12. 价格格式化

/*** 价格格式化** @param int    $price* @return string    $price_format*/function PriceFormat($price) {    $price_format= number_format($price,2,'.','');    return $price_format;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

  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);
原创粉丝点击