1

递归创建目录

/**
 * 递归创建目录
 * @param  [type] $dir [description]
 * @return [type]      [description]
 */
function mkdirs($dir)
{
    if(!is_dir($dir)){
        if(!mkdirs(dirname($dir))){
            return false;
        }
        if(!mkdir($dir, 0777)){
            return false;
        } else {
            chmod($dir, 0777);
        }
    }
    return true;
}


################# 使用实例 #######################
echo mkdirs('aaa/bbb/ccc/ddd/');

mb_substr系列函数截取字符串

    /**
     * 截取中文字符串
     * @param  [type]  $string [截取字符串]
     * @param  integer $length [截取长度]
     * @param  integer $start  [开始位置]
     * @return [type]          [description]
     */
    function getSubstr($string, $length = 10, $start = 0) 
    {
        if(mb_strlen($string,'utf-8')>$length){
            # 对英文或中文字符都表示一个单位
            $str = mb_strcut($string, $start, $length,'utf-8');
            # 对中文字符是3个单位,英文是1个单位
            $str = mb_substr($string, $start, $length,'utf-8'); 
            return $str.'...';
        }else{
                return $string;
        }
    }

    ################# 使用实例 #######################
    echo getSubstr('这样ABc来我的abc字符串就不会有乱码^_^', 5);
    exit;

字节单位换算函数

    /**
     * 字节单位换算函数
     * @param  [type]  $size   [资源大小]
     * @param  integer $digits [保留小数位]
     * @return [type]          [description]
     */
    function size2mb($size,$digits=2)
    {
        $unit   = array('','K','M','G','T','P');   //单位数组,是必须1024进制依次的哦。 
        $base   = 1024;                             //对数的基数 
        $i      = floor(log($size,$base));           //字节数对1024取对数,值向下取整。 
        return round($size/pow($base,$i),$digits).' '.$unit[$i] . 'B';
    }

    /**
     * 容量单位计算,支持定义小数保留长度;定义起始和目标单位,或按1024自动进位
     * 
     * @param int $size,容量计数
     * @param type $unit,容量计数单位,默认为字节
     * @param type $decimals,小数点后保留的位数,默认保留一位
     * @param type $targetUnit,转换的目标单位,默认自动进位
     * @return type 返回符合要求的带单位结果
     */
    function fileSizeConv($size, $unit = 'B', $decimals = 2, $targetUnit = 'auto') 
    {
        $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB');
        $theUnit = array_search(strtoupper($unit), $units); //初始单位是哪个
        //判断是否自动计算,
        if ($targetUnit != 'auto')
            $targetUnit = array_search(strtoupper($targetUnit), $units);
        //循环计算
        while ($size >= 1024) {
            $size/=1024;
            $theUnit++;
            if ($theUnit == $targetUnit)//已符合给定则退出循环吧!
                break;
        }
        return sprintf("%1\$.{$decimals}f", $size) . $units[$theUnit];
    }


    ################# 使用实例 #######################
    echo size2mb(10240000900);
    echo '<br>';
    echo fileSizeConv(10240000900);
    exit;

获取页面URL地址

    /**
     * 获取页面URL地址
     * @return [type] [description]
     */
    function getUrl(){ 
        $url="http://www.xxxx.com"; 
        
        if(isset($_SERVER["REQUEST_URI"])){ 
            $url.=$_SERVER["REQUEST_URI"]; 
        } else{ 
            $url.=$_SERVER["PHP_SELF"]; 
            if(!empty($_SERVER["QUERY_STRING"])){ 
                $url.="?".$_SERVER["QUERY_STRING"]; 
            } 
        } 
        return $url; 
    }

获取上页地址

    /**
     * 获取上页地址
     * @return [type] [description]
     */
    function getReferer()
    {
        return $_SERVER['HTTP_REFERER'];
    }
    

设置登录成功返回页地址

    /**
     * 设置返回页地址
     */
    function setReturnUrl()
    {
        $return_url = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
        setcookie('returnurl', $return_url,time()+3600, '/', ".xxxx.com");
    }

显示友好的时间格式

    /**
     * [显示友好的时间格式 xx分钟前  xx小时前  xx天 超过3天显示正常时间]
     * @param  [type] $date [description]
     * @return [type]       [description]
     */
    function dataStr($date){
        if((time()-$date)<60*10){
            //十分钟内
            echo '刚刚';
        }elseif(((time()-$date)<60*60)&&((time()-$date)>=60*10)){
            //超过十分钟少于1小时
            $s = floor((time()-$date)/60);
            echo  $s."分钟前";
        }elseif(((time()-$date)<60*60*24)&&((time()-$date)>=60*60)){
            //超过1小时少于24小时
            $s = floor((time()-$date)/60/60);
            echo  $s."小时前";
        }elseif(((time()-$date)<60*60*24*3)&&((time()-$date)>=60*60*24)){
            //超过1天少于3天内
            $s = floor((time()-$date)/60/60/24);
            echo $s."天前";
        }else{
            //超过3天
            echo  date("Y/m/d",$date);
        }

    }


    /**
     * 显示友好的时间格式
     *
     * @param  [type] $time [description]
     * @return [type]       [description]
     */
    function formatTime($time)
    {
        //获取今天凌晨的时间戳
        $day = strtotime(date('Y-m-d',time()));
        //获取昨天凌晨的时间戳
        $pday = strtotime(date('Y-m-d',strtotime('-1 day')));
        //获取现在的时间戳
        $nowtime = time();

        $tc = $nowtime-$time;
        if($time<$pday){
            $str = date('Y-m-d H:i:s',$time);
        }elseif($time<$day && $time>$pday){
            $str = "昨天";
        }elseif($tc>60*60){
            $str = floor($tc/(60*60))."小时前";
        }elseif($tc>60){
            $str = floor($tc/60)."分钟前";
        }else{
            $str = "刚刚";
        }
        return $str;
    }

    /**
     * 显示友好的时间格式
     *
     * @param  [type] $time [description]
     * @return [type]       [description]
     */
    function transfer_time($time)
    {
        $rtime = date("m-d H:i",$time);
        $htime = date("H:i",$time);
        $time = time() - $time;

        if ($time < 60)
        {
            $str = '刚刚';
        }
        elseif ($time < 60 * 60)
        {
            $min = floor($time/60);
            $str = $min.'分钟前';
        }
        elseif ($time < 60 * 60 * 24)
        {
            $h = floor($time/(60*60));
            $str = $h.'小时前 '.$htime;
        }
        elseif ($time < 60 * 60 * 24 * 3)
        {
            $d = floor($time/(60*60*24));
            if($d==1)
                $str = '昨天 '.$rtime;
            else
                $str = '前天 '.$rtime;
        }
        else
        {
            $str = $rtime;
        }
        return $str;
    }

    ################# 使用实例 #######################
    echo dataStr(time()-200000);
    echo '<br>';
    echo formatTime(time()-200000);
    echo '<br>';
    echo transfer_time(time()-200000);

创建头像存放路径

    /**
     * 创建资源存放路径
     * 格式:000/00/01/36_middle.jpg
     * 
     * @param $uid
     * @param string $size
     * @return string
     */
    function createSavePath($saveId, $size = '')
    {
        $size = in_array($size, array('big', 'middle', 'small')) ? $size : 'middle';
        $saveId = abs(intval($saveId));
        $saveId = sprintf("%09d", $saveId);
        $dir1 = substr($saveId, 0, 3);
        $dir2 = substr($saveId, 3, 2);
        $dir3 = substr($saveId, 5, 2);
        return  "{$dir1}/{$dir2}/{$dir3}/".substr($saveId, -2)."_{$size}.jpg";
    }

    ################# 使用实例 #######################
    echo createSavePath(136);

创建安全下载地址

    /**
     * 创建安全下载地址
     * @param $fileName
     * @param int $show
     * @return string
     */
    function downUrl($fileName, $show = 1)
    {
        $expired     = time() + (3600 * 1);        // 过期时间
        $secret     = 'ADFO9834RH94';             // salt
        $md5_secret = base64_encode(md5("{$secret}{$fileName}{$expired}", true));
        $md5_secret = str_replace('=', '', strtr($md5_secret, '+/', '-_'));
        $down_url     = "http://www.xxxx.com{$fileName}?st={$md5_secret}&e={$expired}";
        if ($show == 1) {
            die("<a href='{$down_url}'>" . $down_url . "</a>");
        } elseif ($show == 2) {
            return $down_url;
            exit;
        }
        header("Content-type:application/zip");
        header("location:{$down_url}");
        exit;
    }

防止表单注入

    /**
     * 防止表单注入
     * 显示的时候要用 stripslashes() 去掉反斜杠
     * stripslashes()了,它能把addslashes()处理时自动加上去的(反斜杠)\去掉
     * @param $str
     * @return string
     */
    function formSafe($str)
    {
        $str = strip_tags($str);    //去掉html标签
        if(!get_magic_quotes_gpc())            //判断设置是否开启 只有0和1两种情况
        {
            $str = addslashes($str);    //转换sql语句特殊字符
        }
        return $str;
    }

数组键值排序函数

    /**
     * 数组键值排序
     * @param $arr
     * @param $keys
     * @param string $type
     * @return array
     */
    function arrayKeySort($arr,$keys,$type='asc'){
        $keysvalue = $new_array = array();
        foreach ($arr as $k=>$v){
            $keysvalue[$k] = $v[$keys];
        }
        if($type == 'asc'){
            asort($keysvalue);
        }else{
            arsort($keysvalue);
        }
        reset($keysvalue);
        $i = 0;
        foreach ($keysvalue as $k=>$v){
            $new_array[$i] = $arr[$k];
            $i++;
        }
        return $new_array;
    }

    ################# 使用实例 #######################
    $aaa = array(
        ['key'=>10, 'name'=>'aaaaaaaaaa'],
        ['key'=>4, 'name'=>'sssssssssssss'],
        ['key'=>7, 'name'=>'cccccccccccccccc'],
        ['key'=>22, 'name'=>'ddddddddddddddddd'],
        ['key'=>67, 'name'=>'ffffffffffffffffffffffff'],
        ['key'=>2, 'name'=>'ooooooooooooooooooo'],
    );
    $aaas = arrayKeySort($aaa, 'key');
    echo '<pre>';
    print_r($aaas);

获取系统真实IP地址

    /**
     * 获取系统真实IP地址
     * @return string
     */
    function getRealIP(){
        if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
            $ip = getenv("HTTP_CLIENT_IP");
        else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
            $ip = getenv("HTTP_X_FORWARDED_FOR");
        else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
            $ip = getenv("REMOTE_ADDR");
        else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
            $ip = $_SERVER['REMOTE_ADDR'];
        else
            $ip = "unknown";
        return $ip;
    }

    ################# 使用实例 #######################
    echo getRealIP();

FTP操作类 [ 拷贝、移动、删除文件/创建目录]

    /**
     * 作用:FTP操作类( 拷贝、移动、删除文件/创建目录 )
     * 时间:2016年9月29日18:45:18
     * 作者:YPHP
     * QQ:418250505
     */
    class Ftp
    {
        public $off;         // 返回操作状态(成功/失败)
        public $conn_id;     // FTP连接

        /**
         * 方法:FTP连接
         * @FTP_HOST -- FTP主机
         * @FTP_PORT -- 端口
         * @FTP_USER -- 用户名
         * @FTP_PASS -- 密码
         */
        public function __construct($FTP_HOST, $FTP_PORT, $FTP_USER, $FTP_PASS)
        {
            $this->conn_id = @ftp_connect($FTP_HOST, $FTP_PORT) or die("FTP服务器连接失败");
            @ftp_login($this->conn_id, $FTP_USER, $FTP_PASS) or die("FTP服务器登陆失败");
            @ftp_pasv($this->conn_id, 1); // 打开被动模拟
        }

        /**
         * 方法:上传文件
         * @path -- 本地路径
         * @newpath -- 上传路径
         * @type -- 若目标目录不存在则新建
         */
        public function upFile($path, $newpath, $type = true)
        {
            if ($type) $this->createMkdir($newpath);
            $this->off = @ftp_put($this->conn_id, $newpath, $path, FTP_BINARY);
            if (!$this->off) echo "文件上传失败,请检查权限及路径是否正确!";
        }

        /**
         * 方法:移动文件
         * @path -- 原路径
         * @newpath -- 新路径
         * @type -- 若目标目录不存在则新建
         */
        public function moveFile($path, $newpath, $type = true)
        {
            if ($type) $this->createMkdir($newpath);
            $this->off = @ftp_rename($this->conn_id, $path, $newpath);
            if (!$this->off) echo "文件移动失败,请检查权限及原路径是否正确!";
        }

        /**
         * 方法:复制文件
         * 说明:由于FTP无复制命令,本方法变通操作为:下载后再上传到新的路径
         * @path -- 原路径
         * @newpath -- 新路径
         * @type -- 若目标目录不存在则新建
         */
        public function copyFile($path, $newpath, $type = true)
        {
            $downpath = "c:/tmp.dat";
            $this->off = @ftp_get($this->conn_id, $downpath, $path, FTP_BINARY);// 下载
            if (!$this->off) echo "文件复制失败,请检查权限及原路径是否正确!";
            $this->up_file($downpath, $newpath, $type);
        }

        /**
         * 方法:删除文件
         * @path -- 路径
         */
        public function delFile($path)
        {
            $this->off = @ftp_delete($this->conn_id, $path);
            if (!$this->off) echo "文件删除失败,请检查权限及路径是否正确!";
        }

        /**
         * 方法:生成目录
         * @path -- 路径
         */
        protected function createMkdir($path)
        {
            $path_arr = explode('/', $path);     // 取目录数组
            $file_name = array_pop($path_arr);     // 弹出文件名
            $path_div = count($path_arr);         // 取层数
            foreach ($path_arr as $val)         // 创建目录
            {
                if (@ftp_chdir($this->conn_id, $val) == FALSE) {
                    $tmp = @ftp_mkdir($this->conn_id, $val);
                    if ($tmp == FALSE) {
                        echo "目录创建失败,请检查权限及路径是否正确!";
                        exit;
                    }
                    @ftp_chdir($this->conn_id, $val);
                }
            }
            for ($i = 1; $i = $path_div; $i++) // 回退到根
            {
                @ftp_cdup($this->conn_id);
            }
        }

        /**
         * 方法:关闭FTP连接
         */
        public function close()
        {
            @ftp_close($this->conn_id);
        }
    }

    ################# 使用实例 #######################
    $ftp = new class_ftp('192.168.100.143', 21, 'user', 'pwd');     // 打开FTP连接
    $ftp->upFile('aa.txt', 'a/b/c/cc.txt');                         // 上传文件
    $ftp->moveFile('a/b/c/cc.txt', 'a/cc.txt');                     // 移动文件
    $ftp->copyFile('a/cc.txt', 'a/b/dd.txt');                         // 复制文件
    $ftp->delFile('a/b/dd.txt');                                     // 删除文件
    $ftp->close();                                                     // 关闭FTP连接

YPHP
967 声望77 粉丝

免费好用的素材站:[链接]