实用的php文件操作类

<?php
class File {

    /**
     * 创建多级目录
     * @param string $dir
     * @param int $mode
     * @return boolean
     */
    public function create_dir($dir,$mode=0777)
    {
        return is_dir($dir) or ($this->create_dir(dirname($dir)) and mkdir($dir, $mode));
    }
    
    /**
     * 创建指定路径下的指定文件
     * @param string $path(需要包含文件名和后缀)
     * @param boolean $over_write 是否覆盖文件
     * @param int $time 设置时间。默认是当前系统时间
     * @param int $atime 设置访问时间。默认是当前系统时间
     * @return boolean
     */
    public function create_file($path,$over_write=FALSE,$time=NULL,$atime=NULL)
    {
        $path = $this->dir_replace($path);
        $time = empty($time) ? time() : $time;
        $atime = empty($atime) ? time() : $atime;
        if(file_exists($path) && $over_write)
        {
            $this->unlink_file($path);
        }
        $aimDir = dirname($path);
        $this->create_dir($aimDir);
        return touch($path,$time,$atime);
    }
    
    /**
     * 关闭文件操作
     * @param string $path
     * @return boolean
     */
    public function close($path)
    {
        return fclose($path);
    }
    
    /**
     * 读取文件操作
     * @param string $file
     * @return boolean
     */
    public function read_file($file)
    {
        return @file_get_contents($file);
    }
    
    /**
     * 确定服务器的最大上传限制(字节数)
     * @return int 服务器允许的最大上传字节数
     */
    public function allow_upload_size()
    {
        $val = trim(ini_get('upload_max_filesize'));
        return $val;
    }
    
    /**
     * 字节格式化 把字节数格式为 B K M G T P E Z Y 描述的大小
     * @param int $size 大小
     * @param int $dec 显示类型
     * @return int
     */
    public function byte_format($size,$dec=2)
    {
        $a = array("B", "KB", "MB", "GB", "TB", "PB","EB","ZB","YB");
        $pos = 0;
        while ($size >= 1024) 
        {
             $size /= 1024;
             $pos++;
        }
        return round($size,$dec)." ".$a[$pos];
    }
    
    /**
     * 删除非空目录
     * 说明:只能删除非系统和特定权限的文件,否则会出现错误
     * @param string $dirName 目录路径
     * @param boolean $is_all 是否删除所有
     * @param boolean $del_dir 是否删除目录
     * @return boolean
     */
    public function remove_dir($dir_path,$is_all=FALSE)
    {
        $dirName = $this->dir_replace($dir_path);
        $handle = @opendir($dirName);
        while (($file = @readdir($handle)) !== FALSE)
        {
            if($file != '.' && $file != '..')
            {
                $dir = $dirName . '/' . $file;
                if($is_all)
                {
                    is_dir($dir) ? $this->remove_dir($dir) : $this->unlink_file($dir);
                }
                else 
                {
                    if(is_file($dir))
                    {
                        $this->unlink_file($dir);
                    }
                }
            }
        }
        closedir($handle);
        return @rmdir($dirName);
    }
    
    /**
     * 获取完整文件名
     * @param string $fn 路径
     * @return string
     */
    public function get_basename($file_path)
    {
        $file_path = $this->dir_replace($file_path);
        return basename(str_replace('\\', '/', $file_path));
        //return pathinfo($file_path,PATHINFO_BASENAME);
    }
    
    /**
     * 获取文件后缀名
     * @param string $file_name 文件路径
     * @return string
     */
    public function get_ext($file)
    {
        $file = $this->dir_replace($file);
        //return strtolower(substr(strrchr(basename($file), '.'),1));
        //return end(explode(".",$filename ));
        //return strtolower(trim(array_pop(explode('.', $file))));//取得后缀
        //return preg_replace('/.*\.(.*[^\.].*)*/iU','\\1',$file);
        return pathinfo($file,PATHINFO_EXTENSION);
    }
    
    /**
     * 取得指定目录名称
     * @param string $path 文件路径
     * @param int $num 需要返回以上级目录的数
     * @return string
     */
    public function father_dir($path,$num=1)
    {
        $path = $this->dir_replace($path);
        $arr = explode('/',$path);
        if ($num == 0 || count($arr)<$num) return pathinfo($path,PATHINFO_BASENAME);
        return substr(strrev($path),0,1) == '/' ? $arr[(count($arr)-(1+$num))] : $arr[(count($arr)-$num)];
    }
    
    /**
     * 删除文件
     * @param string $path
     * @return boolean
     */
    public function unlink_file($path) 
    {
        $path = $this->dir_replace($path);
        if (file_exists($path)) 
        {
            return unlink($path);
        }
    }
    
    /**
     * 文件操作(复制/移动)
     * @param string $old_path 指定要操作文件路径(需要含有文件名和后缀名)
     * @param string $new_path 指定新文件路径(需要新的文件名和后缀名)
     * @param string $type 文件操作类型
     * @param boolean $overWrite 是否覆盖已存在文件
     * @return boolean
     */
    public function handle_file($old_path,$new_path,$type='copy',$overWrite=FALSE)
    {
        $old_path = $this->dir_replace($old_path);
        $new_path = $this->dir_replace($new_path);
        if(file_exists($new_path) && $overWrite=FALSE)
        {
            return FALSE;
        }
        else if(file_exists($new_path) && $overWrite=TRUE)
        {
            $this->unlink_file($new_path);
        }
        
        $aimDir = dirname($new_path);
        $this->create_dir($aimDir);
        switch ($type)
        {
            case 'copy':
                return copy($old_path,$new_path);
                break;
            case 'move':
                return rename($old_path,$new_path);
                break;
        }
    }
    
    /**
     * 文件夹操作(复制/移动)
     * @param string $old_path 指定要操作文件夹路径
     * @param string $aimDir 指定新文件夹路径
     * @param string $type 操作类型
     * @param boolean $overWrite 是否覆盖文件和文件夹
     * @return boolean
     */
    public function handle_dir($old_path,$new_path,$type='copy',$overWrite=FALSE)
    {
        $new_path = $this->check_path($new_path);
        $old_path = $this->check_path($old_path);
        if (!is_dir($old_path)) return FALSE;
        
        if (!file_exists($new_path)) $this->create_dir($new_path);
        
        $dirHandle = opendir($old_path);
        
        if (!$dirHandle) return FALSE;
        
        $boolean = TRUE;
        
        while(FALSE !== ($file=readdir($dirHandle))) 
        {
            if ($file=='.' || $file=='..') continue;
            
            if (!is_dir($old_path.$file)) 
            {
                $boolean = $this->handle_file($old_path.$file,$new_path.$file,$type,$overWrite);
            }
            else 
            {
                $this->handle_dir($old_path.$file,$new_path.$file,$type,$overWrite);
            }
        }
        switch ($type)
        {
            case 'copy':
                closedir($dirHandle);
                return $boolean;
                break;
            case 'move':
                closedir($dirHandle);
                return rmdir($old_path);
                break;
        }
    }
    
    /**
     * 替换相应的字符
     * @param string $path 路径
     * @return string
     */
    public function dir_replace($path)
    {
        return str_replace('//','/',str_replace('\\','/',$path));
    }
    
    /**
     * 读取指定路径下模板文件
     * @param string $path 指定路径下的文件
     * @return string $rstr 
     */
    public function get_templtes($path)
    {
        $path = $this->dir_replace($path);
        if(file_exists($path))
        {
            $fp = fopen($path,'r');
            $rstr = fread($fp,filesize($path));
            fclose($fp);
            return $rstr;
        }
        else
        {
            return '';
        }
    }
    
    /**
     * 文件重命名
     * @param string $oldname
     * @param string $newname
     */
    public function rename($oldname,$newname)
    {
        if(($newname!=$oldname) && is_writable($oldname))
        {
            return rename($oldname,$newname);
        }
    }
    
    /**
     * 获取指定路径下的信息
     * @param string $dir 路径
     * @return ArrayObject
     */
    public function get_dir_info($dir)
    {
        $handle = @opendir($dir);//打开指定目录
        $directory_count = 0;
        while (FALSE !== ($file_path = readdir($handle)))
        {
            if($file_path != "." && $file_path != "..")
            {
                //is_dir("$dir/$file_path") ? $sizeResult += $this->get_dir_size("$dir/$file_path") : $sizeResult += filesize("$dir/$file_path");
                $next_path = $dir.'/'.$file_path;
                if (is_dir($next_path))
                {
                    $directory_count++;
                    $result_value = self::get_dir_info($next_path);
                    $total_size += $result_value['size'];
                    $file_cout += $result_value['filecount'];
                    $directory_count += $result_value['dircount'];
                }
                elseif (is_file($next_path))
                {
                    $total_size += filesize($next_path);
                    $file_cout++;
                }
            }   
        }
        closedir($handle);//关闭指定目录
        $result_value['size'] = $total_size;
        $result_value['filecount'] = $file_cout;
        $result_value['dircount'] = $directory_count;
        return $result_value;
    }
    
    /**
     * 指定文件编码转换
     * @param string $path 文件路径
     * @param string $input_code 原始编码
     * @param string $out_code 输出编码
     * @return boolean
     */
    public function change_file_code($path,$input_code,$out_code)
    {
        if(is_file($path))//检查文件是否存在,如果存在就执行转码,返回真
        {
            $content = file_get_contents($path);
            $content = string::chang_code($content,$input_code,$out_code);
            $fp = fopen($path,'w');
            return fputs($fp,$content) ? TRUE : FALSE;
            fclose($fp);
        }
    }
    
    /**
     * 指定目录下指定条件文件编码转换
     * @param string $dirname 目录路径
     * @param string $input_code 原始编码
     * @param string $out_code 输出编码
     * @param boolean $is_all 是否转换所有子目录下文件编码
     * @param string $exts 文件类型
     * @return boolean
     */
    public function change_dir_files_code($dirname,$input_code,$out_code,$is_all=TRUE,$exts='')
    {
        if(is_dir($dirname))
        {
            $fh = opendir($dirname);
            while (($file = readdir($fh)) !== FALSE)
            {
                if (strcmp($file , '.')==0 || strcmp($file , '..')==0)
                {
                    continue;
                }
                $filepath = $dirname.'/'.$file;
                
                if (is_dir($filepath) && $is_all==TRUE)
                {
                    $files = $this->change_dir_files_code($filepath,$input_code,$out_code,$is_all,$exts );
                }
                else 
                {
                    if($this->get_ext($filepath) == $exts && is_file($filepath))
                    {
                        $boole = $this->change_file_code($filepath,$input_code,$out_code,$is_all,$exts);
                        if(!$boole) continue;
                    }
                }
            }
            closedir($fh);
            return TRUE;
        }
        else 
        {
            return FALSE;
        }
    }
    
    /**
     * 列出指定目录下符合条件的文件和文件夹
     * @param string $dirname 路径
     * @param boolean $is_all 是否列出子目录中的文件
     * @param string $exts 需要列出的后缀名文件
     * @param string $sort 数组排序
     * @return ArrayObject
     */
    public function list_dir_info($dirname,$is_all=FALSE,$exts='',$sort='ASC')
    {
        //处理多于的/号
        $new = strrev($dirname);
        if(strpos($new,'/')==0)
        {
            $new = substr($new,1);
        }
        $dirname = strrev($new);
        
        $sort = strtolower($sort);//将字符转换成小写
        
        $files = array();
        $subfiles = array();
        
        if(is_dir($dirname))
        {
            $fh = opendir($dirname);
            while (($file = readdir($fh)) !== FALSE)
            {
                if (strcmp($file, '.')==0 || strcmp($file, '..')==0) continue;
                
                $filepath = $dirname.'/'.$file;
                
                switch ($exts)
                {
                    case '*':
                        if (is_dir($filepath) && $is_all==TRUE)
                        {
                            $files = array_merge($files,self::list_dir_info($filepath,$is_all,$exts,$sort));
                        }
                        array_push($files,$filepath);
                        break;
                    case 'folder':
                        if (is_dir($filepath) && $is_all==TRUE)
                        {
                            $files = array_merge($files,self::list_dir_info($filepath,$is_all,$exts,$sort));
                            array_push($files,$filepath);
                        }
                        elseif (is_dir($filepath))
                        {
                            array_push($files,$filepath);
                        }
                        break;
                    case 'file':
                        if (is_dir($filepath) && $is_all==TRUE)
                        {
                            $files = array_merge($files,self::list_dir_info($filepath,$is_all,$exts,$sort));
                        }
                        elseif (is_file($filepath))
                        {
                            array_push($files, $filepath);
                        }
                        break;
                    default:
                        if (is_dir($filepath) && $is_all==TRUE)
                        {
                            $files = array_merge($files,self::list_dir_info($filepath,$is_all,$exts,$sort));
                        }
                        elseif(preg_match("/\.($exts)/i",$filepath) && is_file($filepath))
                        {
                            array_push($files, $filepath);
                        }
                        break;
                }
                
                switch ($sort)
                {
                    case 'asc':
                        sort($files);
                        break;
                    case 'desc':
                        rsort($files);
                        break;
                    case 'nat':
                        natcasesort($files);
                        break;
                }
            }
            closedir($fh);
            return $files;
        }
        else
        {
            return FALSE;
        }
    }
    
    /**
     * 返回指定路径的文件夹信息,其中包含指定路径中的文件和目录
     * @param string $dir
     * @return ArrayObject
     */
    public function dir_info($dir)
    {
        return scandir($dir);
    }
    
    /**
     * 判断目录是否为空
     * @param string $dir
     * @return boolean
     */
    public function is_empty($dir)
    {
        $handle = opendir($dir);
        while (($file = readdir($handle)) !== false)
        {
            if ($file != '.' && $file != '..')
            {
                closedir($handle);
                return true;
            }
        }
        closedir($handle);
        return false;
    }
    
    /**
     * 返回指定文件和目录的信息
     * @param string $file
     * @return ArrayObject
     */
    public function list_info($file)
    {
        $dir = array();
        $dir['filename']   = basename($file);//返回路径中的文件名部分。
        $dir['pathname']   = realpath($file);//返回绝对路径名。
        $dir['owner']      = fileowner($file);//文件的 user ID (所有者)。
        $dir['perms']      = fileperms($file);//返回文件的 inode 编号。
        $dir['inode']      = fileinode($file);//返回文件的 inode 编号。
        $dir['group']      = filegroup($file);//返回文件的组 ID。
        $dir['path']       = dirname($file);//返回路径中的目录名称部分。
        $dir['atime']      = fileatime($file);//返回文件的上次访问时间。
        $dir['ctime']      = filectime($file);//返回文件的上次改变时间。
        $dir['perms']      = fileperms($file);//返回文件的权限。 
        $dir['size']       = filesize($file);//返回文件大小。
        $dir['type']       = filetype($file);//返回文件类型。
        $dir['ext']        = is_file($file) ? pathinfo($file,PATHINFO_EXTENSION) : '';//返回文件后缀名
        $dir['mtime']      = filemtime($file);//返回文件的上次修改时间。
        $dir['isDir']      = is_dir($file);//判断指定的文件名是否是一个目录。
        $dir['isFile']     = is_file($file);//判断指定文件是否为常规的文件。
        $dir['isLink']     = is_link($file);//判断指定的文件是否是连接。
        $dir['isReadable'] = is_readable($file);//判断文件是否可读。
        $dir['isWritable'] = is_writable($file);//判断文件是否可写。
        $dir['isUpload']   = is_uploaded_file($file);//判断文件是否是通过 HTTP POST 上传的。
        return $dir;
    }
    
    /**
     * 返回关于打开文件的信息
     * @param $file
     * @return ArrayObject
     * 数字下标     关联键名(自 PHP 4.0.6)     说明
     * 0     dev     设备名
     * 1     ino     号码
     * 2     mode     inode 保护模式
     * 3     nlink     被连接数目
     * 4     uid     所有者的用户 id
     * 5     gid     所有者的组 id
     * 6     rdev     设备类型,如果是 inode 设备的话
     * 7     size     文件大小的字节数
     * 8     atime     上次访问时间(Unix 时间戳)
     * 9     mtime     上次修改时间(Unix 时间戳)
     * 10     ctime     上次改变时间(Unix 时间戳)
     * 11     blksize     文件系统 IO 的块大小
     * 12     blocks     所占据块的数目
     */
    public function open_info($file)
    {
        $file = fopen($file,"r");
        $result = fstat($file);
        fclose($file);
        return $result;
    }
    
    /**
     * 改变文件和目录的相关属性
     * @param string $file 文件路径
     * @param string $type 操作类型
     * @param string $ch_info 操作信息
     * @return boolean
     */
    public function change_file($file,$type,$ch_info)
    {
        switch ($type)
        {
            case 'group' : $is_ok = chgrp($file,$ch_info);//改变文件组。
                break;
            case 'mode' : $is_ok = chmod($file,$ch_info);//改变文件模式。
                break;
            case 'ower' : $is_ok = chown($file,$ch_info);//改变文件所有者。
                break;
        }
    }
    
    /**
     * 取得文件路径信息
     * @param $full_path 完整路径
     * @return ArrayObject
     */
    public function get_file_type($path)
    {
        //pathinfo() 函数以数组的形式返回文件路径的信息。
        //---------$file_info = pathinfo($path); echo file_info['extension'];----------//
        //extension取得文件后缀名【pathinfo($path,PATHINFO_EXTENSION)】-----dirname取得文件路径【pathinfo($path,PATHINFO_DIRNAME)】-----basename取得文件完整文件名【pathinfo($path,PATHINFO_BASENAME)】-----filename取得文件名【pathinfo($path,PATHINFO_FILENAME)】
        return pathinfo($path);
    }
    
    /**
     * 取得上传文件信息
     * @param $file file属性信息
     * @return array
     */
    public function get_upload_file_info($file)
    {
        $file_info = $_FILES[$file];//取得上传文件基本信息
        $info = array();
        $info['type']  = strtolower(trim(stripslashes(preg_replace("/^(.+?);.*$/", "\\1", $file_info['type'])), '"'));//取得文件类型
        $info['temp']  = $file_info['tmp_name'];//取得上传文件在服务器中临时保存目录
        $info['size']  = $file_info['size'];//取得上传文件大小
        $info['error'] = $file_info['error'];//取得文件上传错误
        $info['name']  = $file_info['name'];//取得上传文件名
        $info['ext']   = $this->get_ext($file_info['name']);//取得上传文件后缀
        return $info;
    }
    
    /**
     * 设置文件命名规则
     * @param string $type 命名规则
     * @param string $filename 文件名
     * @return string
     */
    public function set_file_name($type)
    {
        switch ($type)
        {
            case 'hash' : $new_file = md5(uniqid(mt_rand()));//mt_srand()以随机数md5加密来命名
                break;
            case 'time' : $new_file = time();
                break;
            default : $new_file = date($type,time());//以时间格式来命名
                break;
        }
        return $new_file;
    }
    
    /**
     * 文件保存路径处理
     * @return string
     */
    public function check_path($path)
    {
        return (preg_match('/\/$/',$path)) ? $path : $path . '/';
    }
	
	public function down_remote_file($url,$save_dir='',$filename='',$type=0){
	
		if(trim($url)==''){
			return array('file_name'=>'','save_path'=>'','error'=>1);
		}
		if(trim($save_dir)==''){
			$save_dir='./';
		}
		if(trim($filename)==''){//保存文件名
			$ext=strrchr($url,'.');
		//    if($ext!='.gif'&&$ext!='.jpg'){
		//        return array('file_name'=>'','save_path'=>'','error'=>3);
		//    }
			$filename=time().$ext;
		}
		if(0!==strrpos($save_dir,'/')){
			$save_dir.='/';
		}
		//创建保存目录
		if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){
			return array('file_name'=>'','save_path'=>'','error'=>5);
		}
		//获取远程文件所采用的方法 
		if($type){
			$ch=curl_init();
			$timeout=5;
			curl_setopt($ch,CURLOPT_URL,$url);
			curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
			curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
			$img=curl_exec($ch);
			curl_close($ch);
		}else{
			ob_start(); 
			readfile($url);
			$img=ob_get_contents(); 
			ob_end_clean(); 
		}
		//$size=strlen($img);
		//文件大小 
		$fp2=fopen($save_dir.$filename,'a');
		
		fwrite($fp2,$img);
		fclose($fp2);
		unset($img,$url);
		return array('file_name'=>$filename,'save_path'=>$save_dir.$filename,'error'=>0);
	}

	
}
/*
$file = new file();
$file_path = 'C:/Documents and Settings/Administrator/桌面/phpThumb_1.7.10-201104242100-beta';
$files = 'C:/Documents and Settings/Administrator/桌面/phpThumb_1.7.10-201104242100-beta/index.php';
$create_path = 'D:/这是创建的目录/哈哈/爱/的/味道/是/雪儿/给的/';
echo '创建文件夹:create_dir()<br>';
//if($file->create_dir($create_path)) echo '创建目录成功'; else '创建目录失败';
echo '<hr>创建文件:create_file()<br>';
//if($file->create_file($create_path.'创建的文件.txt',true,strtotime('1988-05-04'),strtotime('1988-05-04'))) echo '创建文件成功!'; else echo '创建文件失败!';
echo '<hr>删除非空目录:remove_dir()<br>';
//if($file->remove_dir($file_path,true)) echo '删除非空目录成功!'; else echo '删除非空目录失败!';
echo '<hr>取得文件完整名称(带后缀名):get_basename()<br>';
//echo $file->get_basename($files);
echo '<hr>取得文件后缀名:get_ext()<br>';
//echo $file->get_ext($files);
echo '<hr>取得上N级目录:father_dir()<br>';
//echo $file->father_dir($file_path,3);
echo '<hr>删除文件:unlink_file()<br>';
//if($file->unlink_file($file_path.'/index.php')) echo '删除文件成功!'; else '删除文件失败!';
echo '<hr>操作文件:handle_file()<br>';
//if($file->handle_file($file_path.'/index.php',$create_path.'/index.php','copy',true)) echo '复制文件成功!'; else echo '复制文件失败!';
//if($file->handle_file($file_path.'/index.php', $create_path.'/index.php','move',true)) echo '文件移动成功!'; else echo '文件移动失败!';
echo '<hr>操作文件夹:handle_dir()<br>';
//if($file->handle_dir($file_path,$create_path,'copy',true)) echo '复制文件夹成功!'; else echo '复制文件夹失败!';
//if($file->handle_dir($file_path,$create_path,'move',true)) echo '移动文件夹成功!'; else echo '移动文件夹失败!';
echo '<hr>取得文件夹信息:get_dir_info()<br>';
//print_r($file->get_dir_info($create_path));
echo '<hr>替换统一格式路径:dir_replace()<br>';
//echo $file->dir_replace("c:\d/d\e/d\h");
echo '<hr>取得指定模板文件:get_templtes()<br>';
//echo $file->get_templtes($create_path.'/index.php');
echo '<hr>取得指定条件的文件夹中的文件:list_dir_info()<br>';
//print_r($file->list_dir_info($create_path,true));
echo '<hr>取得文件夹信息:dir_info()<br>';
//print_r($file->dir_info($create_path));
echo '<hr>判断文件夹是否为空:is_empty()<br>';
//if($file->is_empty($create_path)) echo '不为空'; else echo'为空';
echo '<hr>返回指定文件和目录的信息:list_info()<br>';
//print_r($file->list_info($create_path));
echo '<hr>返回关于打开文件的信息:open_info()<br>';
//print_r($file->open_info($create_path.'/index.php'));
echo '<hr>取得文件路径信息:get_file_type()<br>';
//print_r($file->get_file_type($create_path));
 * */
?>
免责声明:
一切资料仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。资料来自网络,版权争议与本人无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我联系处理。

更===多===课程====请====加===v===信=== a518958666
   基于SpringCloud 微服务架构 广告系统设计与实现
   系统学习docker
   docker前后端分离实战
   Docker+Kubernetes(k8s)微服务容器化实战
   Go语言实战抽奖系统
   Go语言开发分布式任务调度 轻松搞定高性能Crontab
   20小时快速入门go语言
   Java从零到企业级电商项目实战
   SSM主流框架入门与综合项目实战
   Socket网络编程进阶与实战

 0. 基于Python玩转人工智能最火框架 TensorFlow应用实践
 1. webapp书城开发
 2. 组件方式开发 Web App全站
 3. 前端到后台ThinkPHP开发整站
 4. MySQL性能管理及架构设计
 5. 响应式开发一招致胜
 6. 掌握React Native技术转型随意切换
 7. Yii 2.0开发一个仿京东商城平台
 8. Python高效编程技巧实战
 9. 快速开发轻量级App
 10. 6小时 jQuery开发一个前端应用
 11. Android架构师之路 网络层架构设计与实战
 12. 程序猿的内功修炼,学好算法与数据结构
 13. Vue.js高仿饿了么外卖App 1.0到2.0版本完美升级
 14. Android 专项测试 Python篇
 15. 微信小程序入门与实战 常用组件API开发技巧项目实战
 16. Android 5.0+高级动画开发 矢量图动画 轨迹动画路径变换
 17. Android自动化测试实战 Java篇 主流工具 框架 脚本
 18. Python升级3.6 强力Django+杀手级Xadmin打造在线教育平台
 19. 高性能可扩展MySQL数据库设计及架构优化 电商项目
 20. 带领新手快速开发Android App
 21. Angular JS 仿拉勾网 WebApp 开发移动端单页应用
 22. 组件化封装思想实战Android App
 23. React.js入门基础与案例开发
 24. Yii 2.0进阶版 高级组件 优化京东平台
 25. 双平台真实开发GitHub App React Native技术全面掌握
 26. 玩转算法面试 leetcode题库分门别类详细解析
 27. Thinkphp 5.0 仿百度糯米开发多商家电商平台
 28. ThinkPHP5.0正式版第二季:实战开发企业站【完结】
 29. 最容易上手的Vue 2.0入门实战教程
 30. 聚焦Python分布式爬虫必学框架Scrapy 打造搜索引擎
 31. Angular 4.0从入门到实战 打造股票管理网站
 32. Java Spring带前后端开发完整电商平台
 33. Node.js项目线上服务器部署与发布
 34. Java大牛 带你从0到上线开发企业级电商项目
 35. ThinkPHP 5.0开发微信小程序商场打通全栈项目架构
 36. ES6零基础教学 解析彩票项目
 37. React高级实战 打造大众点评 WebApp
 38. BAT大咖助力 全面升级Android面试
 39. 全程MVP手把手 打造IM即时通讯Android APP
 40. 微信服务号+Yii 2.0构建商城系统全栈应用
 41. 机器学习入门 Scikit-learn实现经典小案例
 42. 腾讯大牛亲授 Web 前后端漏洞分析与防御技巧
 43. IT段子手详解MyBatis遇到Spring 秒学Java SSM开发大众点评 难度中级
 44. Vue 2.0 高级实战-开发移动端音乐 WebApp
 45. 全新升级 Kotlin系统入门与进阶
 46. 对接真实数据 从0开发前后端分离企业级上线项目
 47. Android应用发展趋势必备武器 热修复与插件化
 48. Laravel 快速开发简书
 49. 以慕课网日志分析为例 进入大数据 Spark SQL 的世界
 50. Get全栈技能点 Vue2.0/Node.js/MongoDB 打造商城系统
 51. Python操作三大主流数据库
 52. 前端JavaScript面试技巧
 53. Java SSM快速开发仿慕课网在线教育平台
 54. Android通用框架设计与完整电商APP开发
 55. Spring Boot企业微信点餐系统
 56. 开发微信全家桶项目 Vue/Node/MongoDB高级技术栈全覆盖
 57. Web自动化测试 Selenium基础到企业应用
 58. 高性能的 PHP API 接口开发
 59. 企业级刚需Nginx入门,全面掌握Nginx配置+快速搭建高可用架构
 60. Angular 打造企业级协作平台
 61. Python Flask 构建微电影视频网站
 62. Spring Boot带前后端 渐进式开发企业级博客系统
 63. 从零开发Android视频点播APP
 64. 前端跳槽面试必备技巧
 65. 10小时入门大数据
 66. 让你页面速度飞起来 Web前端性能优化
 67. Google面试官亲授 升级Java面试
 68. LoadRunner 工具使用 企业级性能测试实战
 69. 360大牛带你横扫PHP职场 全面解读PHP面试
 70. Python前后端分离开发Vue+Django REST framework实战
 71. Spring Security技术栈开发企业级认证与授权
 72. PHP开发高可用高安全App后端
 73. 看得见的算法 7个经典应用诠释算法精髓
 74. 全网最热Python3入门+进阶 更快上手实际开发
 75. Android互动直播APP开发
 76. JMeter 深入进阶性能测试体系 各领域企业实战
 77. Node.js入门到企业Web开发中的应用
 78. SSM到Spring Boot 从零开发校园商铺平台
 79. 深度学习之神经网络核心原理与算法
 80. BAT大厂APP架构演进实践与优化之路
 81. PHP秒杀系统 高并发高性能的极致挑战
 82. Java开发企业级权限管理系统
 83. Redux+React Router+Node.js全栈开发
 84. Redis从入门到高可用,分布式实践
 85. ES6+ 开发电商网站的账号体系 JS SDK
 86. Spark Streaming实时流处理项目实战 
 87. 快速上手Linux 玩转典型应用 
 88. Python接口测试框架实战与自动化进阶 
 89. Python3数据科学入门与实战
 90. Android高级面试 10大开源框架源码解析
 91. 移动端App UI 设计入门与实战
 92. 精通高级RxJava 2响应式编程思想
 93. Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式
 94. Webpack + React全栈工程架构项目实战精讲
 95. 快速上手Ionic3 多平台开发企业级问答社区
 96. 全面系统讲解CSS 工作应用+面试一步搞定
 97. 跨平台混编框架 MUI 仿豆瓣电影 APP
 98. Kotlin打造完整电商APP 模块化+MVP+主流框架
 99. BAT大牛亲授 基于ElasticSearch的搜房网实战
 100. Python3入门机器学习 经典算法与应用
 101. Java秒杀系统方案优化 高性能高并发实战
 102. 四大维度解锁 Webpack3.0 工具全技能 
 103. 手工测试企业项目实践及面试提升 
 104. 基于Storm构建实时热力分布项目实战 
 105. Java深入微服务原理改造房产销售平台 
 106. 全网稀缺Python自动化运维项目实战 
 107. 前端成长必经之路-组件化思维与技巧 
 108. 基于Python玩转人工智能最火框架 TensorFlow应用实践
 109. Koa2框架从0开始构建预告片网站
 110. React16+React-Router4 从零打造企业级电商后台管理系统
 111. Google资深工程师深度讲解Go语言
 112. 微信小游戏入门与实战 刷爆朋友圈
 113. Elastic Stack从入门到实践
 114. Python移动自动化测试面试
 115. Python3数据分析与挖掘建模实战
 116. Tomcat+Memcached/Redis集群 构建高可用解决方案
 117. 系统学习Docker 践行DevOps理念
 118. Spring Cloud微服务实战
 119. 揭秘一线互联网企业 前端JavaScript高级面试
 120. OpenCV+TensorFlow 入门人工智能图像处理
 121. 基于Golang协程实现流量统计系统
 122. 移动端自动化测试Appium 从入门到项目实战Python版
 123. UI动效设计从入门到实战 PC与移动界面设计必学
 124. Java并发编程与高并发解决方案
 125. Vue核心技术 Vue+Vue-Router+Vuex+SSR实战精讲
 126. 韩天峰力荐 Swoole入门到实战打造高性能赛事直播平台
 127. Docker+Kubernetes(k8s)微服务容器化实践
 128. Python Flask高级编程
 129. ZooKeeper分布式专题与Dubbo微服务入门
 130. App界面设计利器Sketch 精选案例合集
 131. Python高级编程和异步IO并发编程
 132. 新浪微博资深大牛全方位剖析 iOS 高级面试
 133. Vue2.5开发去哪儿网App 从零基础入门到实战项目
 134. 最全面的Java接口自动化测试实战
 135. HBase+SpringBoot实战分布式文件存储
 136. Gradle3.0自动化项目构建技术精讲+实战
 137. 玩转数据结构 从入门到进阶
 138. MyCAT+MySQL 搭建高可用企业级数据库集群
 139. 验证码图像识别,快速掌握TensorFlow模型构建与开发
 140. SpringBoot2.0不容错过的新特性 WebFlux响应式编程
 141. 响应式开发一招致胜
 142. jquery源码分析
 143. AngularJS全栈开发知乎
 144. 揭秘一线互联网企业 前端JavaScript高级面试
 145. JavaScript版 数据结构与算法
 146. Koa2 实现电影微信公众号前后端开发
 147. Koa2+Nodejs+MongoDb 入门实战视频教程 
 148. Node.js 从零开发 web server博客项目 前端晋升全栈工程师必备
 149. Vue.js 源码全方位深入解析
 150. Vue核心技术 Vue+Vue-Router+Vuex+SSR实战精讲
 151. Vue全家桶+SSR+Koa2全栈开发美团网
 152. 飞速上手的跨平台App开发
 153. 前端JS基础面试技巧
 154. 前端跳槽面试必备技巧
 155. 让你页面速度飞起来 Web前端性能优化
 156. 微信小程序商城构建全栈应用
 157. 移动Web APP开发之实战美团外卖
 158. Thinkphp 5.0 仿百度糯米开发多商家电商平台
 159. ThinkPHP5.0正式版第二季:实战开发企业站
 160. ThinkPHP 5.0开发微信小程序商场打通全栈项目架构
 161. 前端到后台ThinkPHP开发整站
 162. PHP从基础语法到原生项目开发
 163. PHP高性能 高价值的PHP API
 164. 360大牛全面解读PHP面试
 165. PHP开发高可用高安全App后端
 166. PHP秒杀系统 高并发高性能的极致挑战
 167. Swoole入门到实战打造高性能赛事直播平台
 168. YII 2.0开发一个仿京东商城平台

......
......
更===多===课程====请====加===v===信=== a518958666
             
  ╭══════════════════════════════════════════╮                                                       ║
 ║    说明:教程版权归原作者所有,本人只是负责搜集整理,本人     ║
  ║          不承担任何技术及版权问题。本人分享的任何教程仅提        ║
  ║          供学习参考,不得用于商业用途,请在下载后在24小时       ║
  ║          内删除。                                                                          ║
  ║                                                                                                 ║
  ║     1.请遵守中华人民共和国相关法律、条例                                ║
  ║     2.本人提供的各类视频教程仅供研究学习,本人不承担观看     ║
  ║       本教程后造成的一切后果                                                    ║
  ║     3.本人不保证提供的教程十分安全或是完全可用,请下载后    ║
  ║       自行检查                                                                           ║
  ║     4.本人提供的教程均为网上搜集,如果该程序涉及                 ║
  ║       或侵害到您的版权请立即写信通知我们。                            ║
  ║     5.如不同意以上声明,请立即删除,不要使用,谢谢合作       ║
  ║                                                                                               ║
  ╰═════════════════════════════════════════╯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少林码僧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值