资讯专栏INFORMATION COLUMN

PHP 常用函数记录 一

snowell / 2650人阅读

递归创建目录
/**
 * 递归创建目录
 * @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/ffffd/");
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 "
"; 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 "
"; echo formatTime(time()-200000); echo "
"; 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("" . $down_url . "");
        } 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"=>"ffffdffffdffffdffffdffffddd"],
        ["key"=>67, "name"=>"ffffffffffffffffffffffff"],
        ["key"=>2, "name"=>"ooooooooooooooooooo"],
    );
    $aaas = arrayKeySort($aaa, "key");
    echo "
";
    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连接

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30505.html

相关文章

  • PHP 常用类分享(记录

    摘要:加密解密类由于开始废弃传统的加密函数而改用,因此该类支持的版本为简易加解密类通用秘钥所有可用的加密类型可参考构造函数加密类型。 加密解密类 由于 PHP7.1 开始废弃传统的加密函数 mcrypt_encrypt 而改用 openssl_encrypt,因此该类支持的 PHP 版本为: (PHP 5 >= 5.3.0, PHP 7)

    seal_de 评论0 收藏0
  • PHP的CURL功能扩展基本用法

    摘要:的功能提供了很多函数,需要将这些函数按特定的步骤组合到一起,我们先来了解下建立请求的基本步骤。代码如下我们可以通设置函数的不同参数,可以获得不同的结果,这也是扩展的强大之处。函数的常用参数选项具体可查阅官方文档,此处就不列举。 PHP的curl功能提供了很多函数,需要将这些函数按特定的步骤组合到一起,我们先来了解下PHP建立curl请求的基本步骤。 $ch = curl_init()...

    nicercode 评论0 收藏0
  • TP5学习记录(Controller篇)

    摘要:可以在入口文件中定义,然后新建文件夹,达到将应用配置放到该文件的目的,这样方便将配置进行统一管理。动态配置返回数据类型功能同上张三男请求成功 ThinkPHP5 ThinkPHP是一个免费开源的、快速简单的、面向对象的、轻量级PHP开发框架。 为什么选择ThinkPHP5? ThinkPHP5采用了全新的架构思想; 优化了核心是一个颠覆性的版本; 支持composer方式安装; 对...

    leone 评论0 收藏0
  • 十五个常用的 Laravel 集合(Collection)

    摘要:将返回通过回调真值测试的第一个项的键。方法将集合分割为多个给定大小的较小集合。它可用于在任何位置的调试和查找集合内的内容。方法用于遍历整个集合。这对集合同样有效。它将导致由第二个参数的值作为键的集合。它接受回调并传递并将集合传递给它。 showImg(https://segmentfault.com/img/remote/1460000018924972); 文章转自:https://...

    alphahans 评论0 收藏0
  • PHP学习记录(文件函数库)

    摘要:文件函数库文件目录函数库为核心函数库,可以通过其提供的完成对于文件及目录的常用操作。 文件函数库 文件、目录函数库为PHP核心函数库,可以通过其提供的API完成对于文件及目录的常用操作。 文件信息相关的API /* * 文件信息相关API * filetype(), filesize(), filectime(),filemtime(), fileatime() */ $dir...

    chavesgu 评论0 收藏0

发表评论

0条评论

snowell

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<