素材牛VIP会员
# PHP函数 #

收集整理一些常用的PHP自定义函数

项目中经常会需要一些让人头疼的函数,作为开发者应该整理一个自己的函数库,在需要之时复制过来即可。
收录资源 17 个 2022年11月14日 逸秋#AAS
资源列表(共17个) 新增资源

PHP递归删除目录自定义函数

2023年05月27日 综合评分:3 xiaoniuX
/**
 * 递归删除目录
 * @param string $path
 * @return bool 
 */
function deldir($path){
    //如果是目录则继续
    if(is_dir($path)){
        //扫描一个文件夹内的所有文件夹和文件并返回数组
        $p = scandir($path);
        //如果 $p 中有两个以上的元素则说明当前 $path 不为空
        if(count($p)>2){
            foreach($p as $val){
                //排除目录中的.和..
                if($val !="." && $val !=".."){
                    //如果是目录则递归子目录,继续操作
                    if(is_dir($path.$val)){
                        //子目录中操作删除文件夹和文件
                        deldir($path.$val.'/');
                    }else{
                        //如果是文件直接删除
                        unlink($path.$val);
                    }
                }
            }
        }
    }
    //删除目录
    return rmdir($path);
}

PHP二维数组排序自定义函数

2023年05月27日 综合评分:3 疯狂玛克斯
/**
 * 二维数组排序
 * @param array $arr 传入数组
 * @param string $key 需要排序的键值
 * @param int $order/$type 查看https://www.w3school.com.cn/php/func_array_multisort.asp
 * @return array 转换得到的数组
 */
function array_key_sort($arr, $key, $order=SORT_ASC, $type=SORT_NUMERIC){  
    if(is_array($arr)){  
        foreach ($arr as $array){  
            if (is_array($array)) {  
                $key_arr[] = $array[$key];  
            } else {  
                return false;  
            }  
        }  
    }else{  
        return false;  
    } 
    array_multisort($key_arr, $order, $type, $arr);  
    return $arr;  
}

PHP生成指定位数的随机字符串

2022年11月14日 综合评分:3 风吹裤裆毛飞扬

当我们需要生成一个随机名字,临时密码等字符串时可以用到此PHP函数

随机生成函数:

function generateRandomString($length = 10)
{ 
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
    $randomString = ''; 
    for ($i = 0; $i < $length; $i++)
    { 
        $randomString .= $characters[rand(0, strlen($characters) - 1)]; 
    } 
    return $randomString; 
} 

使用方法:

echo generateRandomString(20);

PHP二维数组自定义键值去重自定义函数

2023年05月27日 综合评分:1 非常幸运星
/**
 * 二维数组去重
 * @param array $arr 传入数组
 * @param string $key 判断的键值
 * @return array $res
 */
function array_unset_repeat($arr, $key){     
    //建立一个目标数组  
    $res = array();        
    foreach ($arr as $value) {           
        //查看有没有重复项  
        if(isset($res[$value[$key]])){  
            //有:销毁  
            unset($value[$key]);  
        }else{  
            $res[$value[$key]] = $value;  
        }    
    }  
    return array_values($res);  
} 

PHP判断移动设备函数

2023年03月16日 综合评分:1 Jasonxjz
function isMobile() {

$user_agent = $_SERVER['HTTP_USER_AGENT'];
$mobile_agents = Array("240x320", "acer", "acoon", "acs-", "abacho", "ahong", "airness", "alcatel", "amoi", "android", "anywhereyougo.com", "applewebkit/525", "applewebkit/532", "asus", "audio", "au-mic", "avantogo", "becker", "benq", "bilbo", "bird", "blackberry", "blazer", "bleu", "cdm-", "compal", "coolpad", "danger", "dbtel", "dopod", "elaine", "eric", "etouch", "fly ", "fly_", "fly-", "go.web", "goodaccess", "gradiente", "grundig", "haier", "hedy", "hitachi", "htc", "huawei", "hutchison", "inno", "ipad", "ipaq", "ipod", "jbrowser", "kddi", "kgt", "kwc", "lenovo", "lg ", "lg2", "lg3", "lg4", "lg5", "lg7", "lg8", "lg9", "lg-", "lge-", "lge9", "longcos", "maemo", "mercator", "meridian", "micromax", "midp", "mini", "mitsu", "mmm", "mmp", "mobi", "mot-", "moto", "nec-", "netfront", "newgen", "nexian", "nf-browser", "nintendo", "nitro", "nokia", "nook", "novarra", "obigo", "palm", "panasonic", "pantech", "philips", "phone", "pg-", "playstation", "pocket", "pt-", "qc-", "qtek", "rover", "sagem", "sama", "samu", "sanyo", "samsung", "sch-", "scooter", "sec-", "sendo", "sgh-", "sharp", "siemens", "sie-", "softbank", "sony", "spice", "sprint", "spv", "symbian", "tablet", "talkabout", "tcl-", "teleca", "telit", "tianyu", "tim-", "toshiba", "tsm", "up.browser", "utec", "utstar", "verykool", "virgin", "vk-", "voda", "voxtel", "vx", "wap", "wellco", "wig browser", "wii", "windows ce", "wireless", "xda", "xde", "zte");

$is_mobile = false;
foreach ($mobile_agents as $device) {
  if (stristr($user_agent, $device)) {
    $is_mobile = true;
    break;
  }
}
return $is_mobile;
}

PHP二维数组合并重复项自定义函数

2023年05月27日 综合评分:0 风停了你还在
**
 * 二维数组合并重复项
 * @param array $arr 传入数组
 * @param string $key 判断的键值
 * @return array $res
 */
function array_restruct($arr, $key){
    $res = array_column($arr, NULL, $key);
    foreach ($res as &$value) {
        $value = array();
    }
    foreach($arr as $v) {
        array_push($res[$v[$key]], $v);
    }
    return array_values($res);
}

PHP获取url地址中的一级域名、顶级域名的函数方法

2023年03月19日 综合评分:0 陈火火_1401150

在开发中经常需要获取url地址中的一级域名或者顶级域名,特别是在需要验证权限时这个功能就非常重要,虽然php内置了很多超全局变量,但是不能让我们轻易的获取到顶级域名,下面我们可以通过自定义函数的方式来截取到我们需要的。

/**
 * 获取顶级域名
 * 
 * @param string $url 域名 HOST,如:www.iowen.cn ,www.baidu.com
 * @return string 顶级域名 如:iowen.cn ,baidu.com
 */
function url_root($url=""){
    $url = $url ? $url : $_SERVER["HTTP_HOST"];
    $dual_host = array('aaa.pro','ac.cn','ac.kr','ac.mu','aca.pro','acct.pro','ae.org','ah.cn','ar.com','avocat.pro','bar.pro','biz.ki','biz.pl','bj.cn','br.com','busan.kr','chungbuk.kr','chungnam.kr','club.tw','cn.com','co.ag','co.am','co.at','co.bz','co.cm','co.com','co.gg','co.gl','co.gy','co.il','co.im','co.in','co.je','co.kr','co.lc','co.mg','co.ms','co.mu','co.nl','co.nz','co.uk','co.ve','co.za','com.af','com.ag','com.am','com.ar','com.au','com.br','com.bz','com.cm','com.cn','com.co','com.de','com.ec','com.es','com.gl','com.gr','com.gy','com.hn','com.ht','com.im','com.ki','com.lc','com.lv','com.mg','com.ms','com.mu','com.mx','com.nf','com.pe','com.ph','com.pk','com.pl','com.ps','com.pt','com.ro','com.ru','com.sb','com.sc','com.se','com.sg','com.so','com.tw','com.vc','com.ve','cpa.pro','cq.cn','daegu.kr','daejeon.kr','de.com','ebiz.tw','edu.cn','edu.gl','eng.pro','es.kr','eu.com','fin.ec','firm.in','fj.cn','game.tw','gangwon.kr','gb.com','gb.net','gd.cn','gen.in','go.kr','gov.cn','gr.com','gs.cn','gwangju.kr','gx.cn','gyeongbuk.kr','gyeonggi.kr','gyeongnam.kr','gz.cn','ha.cn','hb.cn','he.cn','hi.cn','hk.cn','hl.cn','hn.cn','hs.kr','hu.com','hu.net','idv.tw','in.net','incheon.kr','ind.in','info.ec','info.ht','info.ki','info.nf','info.pl','info.ve','jeju.kr','jeonbuk.kr','jeonnam.kr','jl.cn','jp.net','jpn.com','js.cn','jur.pro','jx.cn','kg.kr','kiwi.nz','kr.com','law.pro','ln.cn','me.uk','med.ec','med.pro','mex.com','mo.cn','ms.kr','ne.kr','net.af','net.ag','net.am','net.br','net.bz','net.cm','net.cn','net.co','net.ec','net.gg','net.gl','net.gr','net.gy','net.hn','net.ht','net.im','net.in','net.je','net.ki','net.lc','net.lv','net.mg','net.mu','net.my','net.nf','net.nz','net.ph','net.pk','net.pl','net.ps','net.ru','net.sb','net.sc','net.so','net.vc','net.ve','nm.cn','no.com','nom.ag','nom.co','nom.es','nom.ro','nx.cn','or.at','or.jp','or.kr','or.mu','org.af','org.ag','org.am','org.bz','org.cn','org.es','org.gg','org.gl','org.gr','org.hn','org.ht','org.il','org.im','org.in','org.je','org.ki','org.lc','org.lv','org.mg','org.ms','org.mu','org.my','org.nz','org.pk','org.pl','org.ps','org.ro','org.ru','org.sb','org.sc','org.so','org.uk','org.vc','org.ve','pe.kr','pro.ec','qc.com','qh.cn','radio.am','radio.fm','re.kr','recht.pro','ru.com','sa.com','sc.cn','sc.kr','sd.cn','se.com','senet','seoul.kr','sh.cn','sn.cn','sx.cn','tj.cn','tw.cn','uk.com','uk.net','ulsan.kr','us.com','us.org','uy.com','web.ve','xj.cn','xz.cn','yn.cn','za.com','zj.cn');
    $url_arr   = explode(".", $url);
    if (count($url_arr) <= 2) {
        $host = $url;
    } else {
        $last   = array_pop($url_arr);
        $last_1 = array_pop($url_arr);
        $last_2 = array_pop($url_arr);
        $host   = $last_1.'.'.$last;
        if (in_array($host, $dual_host)) {
            $host = $last_2.'.'.$last_1.'.'.$last;
        }
    }
    return $host;
}

经常用到的PHP字符串截取函数

2023年03月16日 综合评分:0 qqqqqqqqq
function msubpost($str, $start=0, $length=18, $charset="utf-8", $suffix=false) {
  if(strlen($str) > ($length*2)){
    $suffix = true;
  }else{
    $suffix = false;
  }
  if(function_exists('iconv_substr') || $charset=="utf-8") {
    $slice = iconv_substr($str,$start,$length,$charset);
    if(false === $slice) {
        $slice = '';
    }
  }elseif(function_exists("mb_substr")){
    $slice = mb_substr($str, $start, $length, $charset);
  }else{
    $re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
    $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
    $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
    $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
    preg_match_all($re[$charset], $str, $match);
    $slice = join("",array_slice($match[0], $start, $length));
  }
  return $suffix ? $slice.'...' : $slice;
}

PHP隐藏真实文件地址强制下载文件

2022年11月25日 综合评分:0 supbose

有时我们不想让浏览器直接打开文件,如PDF文件,而是要直接下载文件,那么以下函数可以强制下载文件,函数中使用了application/octet-stream头类型。

函数:

function download($filename){
    if ((isset($filename))&&(file_exists($filename))){
       header("Content-length: ".filesize($filename));
       header('Content-Type: application/octet-stream');
       header('Content-Disposition: attachment; filename="' . $filename . '"');
       readfile("$filename");
    } else {
       echo "Looks like file does not exist!";
    }
}

示例:

download('/down/test_45f73e852.zip');

PHP获取当前页面URL地址

2022年11月25日 综合评分:0 郭香港爱自己

以下函数可以获取当前页面的URL,不管是http还是https。

函数:

function curPageURL() {
	$pageURL = 'http';
	if (!empty($_SERVER['HTTPS'])) {$pageURL .= "s";}
	$pageURL .= "://";
	if ($_SERVER["SERVER_PORT"] != "80") {
		$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
	} else {
		$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
	}
	return $pageURL;
}

示例:

echo curPageURL();
上一页12下一页