![](https://img.kancloud.cn/bb/97/bb9770f0c37e3d4236737e8dcd8b3ba0_461x154.png)
文件目录如上
1、文件处理扩展包File.php
```
<?php
namespace files;
class File {
/**
* 判断文件是否存在
*
* @name f_has
* @param string filename 文件路径
* @return bool
*/
public function f_has($filename = '') {
$is = is_file($filename);
return $is ? 1 : 0;
}
/**
* 判断文件夹是否存在
*
* @name d_has
* @param string dir 目录
* @return bool
*/
public function d_has($dir = '') {
$is = is_dir($dir);
return $is ? 1 : 0;
}
/**
* 创建目录
*
* @name d_create
* @param string dir 目录
* @return bool
*/
public function d_create($dir = '') {
if (!$dir || $dir == "." || $dir == "./")
return true;
if (!$this -> d_has($dir)) {
$is = mkdir($dir, 0777, true);
return $is ? 1 : 0;
}
return 1;
}
/**
* 文件写入
*
* @name write
* @param string filename 文件路径
* @param string data 文件中要写入的内容
* @return bool
*/
public function write($filename = '', $data = '') {
$pathinfo = pathinfo($filename);
$dir = $pathinfo['dirname'];
$file = $pathinfo['basename'];
if (!$this->d_has($dir)) {
mkdir($dir, 0777, true);
}
$is = file_put_contents($filename, $data);
return $is ? 1 : 0;
}
/**
* 文件读取
*
* @name read
* @param string filename 文件路径
* @return string
*/
public function read($filename = '') {
if ($this->f_has($filename)) {
$content = file_get_contents($filename);
return $content;
} else {
return '';
}
}
/**
* 读取文件内容,将读取的内容放入数组中,每个数组元素为文件的一行,内容包括换行
*
* @name read_array
* @param string filename 文件路径
* @return array
*/
public function read_array($filename = "") {
if ($this->f_has($filename)) {
return file($filename);
} else {
return array();
}
}
public function read_line_trim($filename = "", $tp = "#", $line_size = '1024')
{
$arr_ = [];
if ($this->f_has($filename)) {
$handle = fopen($filename, "r");
while (!feof ($handle)) {
$buffer = fgets($handle, $line_size);
$f_str = trim($buffer);
if (!empty($f_str) && substr($f_str, 0, 1 ) != $tp) {
array_push($arr_,$f_str);
}
}
fclose($handle);
}
return $arr_;
}
/**
* 文件删除
*
* @name f_delete
* @param string filename 文件路径
* @return array
*/
public function f_delete($filename = "") {
if ($this -> f_has($filename)) {
return @unlink($filename);
}
}
/**
* 文件夹删除
*
* @name d_delete
* @param string filename 文件路径
* @return array
*/
public function d_delete($dir = "") {
// 先删除目录下的文件:
if (!$this->d_has($dir))
return true;
$dh = opendir($dir);
while ($file = readdir($dh)) {
if ($file != "." && $file != "..") {
$fullpath = $dir . DIRECTORY_SEPARATOR . $file;
if (!is_dir($fullpath)) {
@unlink($fullpath);
} else {
$this -> d_delete($fullpath);
}
}
}
closedir($dh);
// 删除当前文件夹:
if (rmdir($dir)) {
return true;
} else {
return false;
}
}
/**
* 拷贝文件或目录
*
* @name copy_
* @param string $new 拷贝目录或者文件
* @param string $old 目标目录或者文件
* @param $type $type 0为删除拷贝目录 1为不删除拷贝目录
* @return bool
*/
public function copy_($new, $old, $type = 1) {
$is = false;
if (!file_exists($old) && !is_dir($old))
return false;
$pathinfo_new = pathinfo($new);
$path = isset($pathinfo_new['extension']) ? $pathinfo_new['dirname'] : $new;
if (!is_dir($path))
mkdir($path, 0777, true);
if (is_file($old)) {
if (!isset($pathinfo_new['extension'])) {
$pathinfo = pathinfo($old);
$is = copy($old, $new . DIRECTORY_SEPARATOR . $pathinfo['basename']);
} else {
$is = copy($old, $new);
}
} else {
if (!isset($pathinfo_new['extension'])) {
$dir = scandir($old);
foreach ($dir as $filename) {
if (!in_array($filename, array('.', '..'))) {
if (is_dir($old . DIRECTORY_SEPARATOR . $filename)) {
$is = $this -> copy_($new . DIRECTORY_SEPARATOR . $filename, $old . DIRECTORY_SEPARATOR . $filename, $type);
if (!$is)
return false;
continue;
} else {
$is = copy($old . DIRECTORY_SEPARATOR . $filename, $new . DIRECTORY_SEPARATOR . $filename);
}
}
}
}
}
return $is;
}
/**
* 获取目录下的所有文件路劲 包括子目录的文件
*
* @name get_all_dir
* @param string dir 文件夹路径
* @return array
*/
public function get_all_dir($dir) {
$result = array();
$handle = opendir($dir);
if ($handle) {
while (($file = readdir($handle)) !== false) {
if ($file != '.' && $file != '..') {
$cur_path = $dir . DIRECTORY_SEPARATOR . $file;
if (is_dir($cur_path)) {
$files = $this -> get_all_dir($cur_path);
if ($files)
$result = $result ? array_merge($result, $files) : $files;
} else {
$result[] = $cur_path;
}
}
}
closedir($handle);
}
return $result;
}
/**
* 判断文件或者文件夹是否有对象权限
*
* @name is_write
* @param string $file 文件或者文件夹路径
* @return int
*/
function is_write($file) {
$pathinfo = pathinfo($file);
$dir = $pathinfo['dirname'];
$extension = isset($pathinfo_new['extension']) ? $pathinfo_new['extension'] : NULL;
if ($extension) {
$is = $this -> write($file);
return $is ? 1 : 0;
} else {
$filename = substr($file, 0, 1) == "/" ? $file . "is_write_000000123456789.txt" : $file . DIRECTORY_SEPARATOR . "is_write_000000123456789.txt";
$is = $this -> write($filename, 'OK');
if ($is) {
$this -> f_delete($filename);
return 1;
} else {
return 0;
}
}
}
}
```
2、压缩包处理扩展包Zip.php
```
<?php
namespace files;
class Zip
{
/**
* 初始化函数
*
* @name __construct
* @return void
*/
public function __construct()
{
$this->zip = new \ZipArchive();
$this->F = new \files\File();
}
/**
* 压缩单个文件
*
* @name add_file
* @param string $filename 被压缩的文件
* @param string filename_zip 在压缩文件中的文件名称,如果不设置为压缩文件的名称,默认不设置
* @return int 1 or 0
*/
public function add_file($filename, $filename_zip = null)
{
if ($filename_zip) {
$is = $this->zip->addFile($filename, $filename_zip);
} else {
$is = $this->zip->addFile($filename);
}
return $is ? 1 : 0;
}
/**
* 压缩整个目录
*
* @name zip
* @param string $dir 压缩目录路径
* @param string $zipfilename 压缩文件的文件名,包括路径
* @return int 1 or 0
*/
public function zip($dir, $zipfilename = 'zip.zip')
{
$pathinfo = pathinfo($zipfilename);
if ($this->F->d_create($pathinfo['dirname'])) {
// ZipArchive::OVERWRITE 如果文件存在则覆盖
if ($this->zip->open($zipfilename, \ZipArchive::CREATE) === TRUE) {
$this->createZip($dir);
}
return $this->zip->close();
}
return 0;
}
/**
* 解压缩文件
*
* @name unzip
* @param string $zipfilename 解压缩的文件
* @param string $path 解压缩后的路径
* @return int 1 or 0
*/
public function unzip($zipfilename = 'zip.zip', $path = '')
{
if ($this->zip->open($zipfilename) === true) {
$file_tmp = @fopen($zipfilename, "rb");
// 只读15字节 各个不同文件类型,头信息不一样。
$bin = fread($file_tmp, 15);
fclose($file_tmp);
// 只针对zip的压缩包进行处理
if (true === $this->getTypeList($bin)) {
$result = $this->zip->extractTo($path);
$this->zip->close();
return $result ? 1 : 0;
} else {
return 0;
}
}
return 0;
}
/**
* 添加目录到zip对象
*
* @name createZip
* @param string $dir 压缩目录路径
* @param string $parent 上级目录
* @return int
*/
public function createZip($dir, $parent = null)
{
$handle = opendir($dir);
if ($handle) {
try {
while ( ( $file = readdir ( $handle ) ) !== false ) {
if ( $file != '.' && $file != '..') {
$cur_path = $dir . DIRECTORY_SEPARATOR . $file;
if ( is_dir ( $cur_path ) ) {
$parentParam = $parent ? $parent . "/" . $file : $file;
$this->createZip($cur_path, $parentParam);
} else {
$filename_zip = $parent ? $parent . "/" . $file : $file;
$this->add_file($cur_path, $filename_zip);
}
}
}
closedir($handle);
return 1;
} catch(\Exception $e) {
return 0;
}
}
}
/**
* 获取压缩文件的列表
*
* @name get_list
* @param string $zipfilename 压缩文件
* @return array
*/
public function get_list($zipfilename="zip.zip")
{
$file_dir_list = array();
$file_list = array();
if ($this->zip->open($zipfilename) == true) {
for ($i = 0; $i < $this->zip->numFiles; $i++) {
$numfiles = $this->zip->getNameIndex($i);
if (preg_match('/\/$/i', $numfiles)) {
$file_dir_list[] = $numfiles;
} else {
$file_list[] = $numfiles;
}
}
}
return array('files'=>$file_list, 'dirs'=>$file_dir_list);
}
/**
* 得到文件头与文件类型映射表
*
* @name getTypeList
* @param string $bin 文件的二进制前一段字符
* @return bool
*/
public function getTypeList($bin)
{
$array = [
["504B0304", "zip"]
];
foreach ($array as $v) {
$blen = strlen(pack("H*", $v[0])); //得到文件头标记字节数
$tbin = substr($bin, 0, intval($blen)); ///需要比较文件头长度
if (strtolower($v[0]) == array_shift(unpack("H*", $tbin))) {
return true;
}
}
return true;
}
}
```
- 产品介绍
- 功能介绍
- 联系合作
- 修订记录
- 环境安装
- 依赖环境
- 依赖服务
- 前端环境
- 核心功能
- 流程引擎
- 流程编辑步骤
- 流程设计
- 业务表设计
- 表单设计
- 报表设计
- 节点配置
- 全局配置
- 规则引擎
- 模块功能
- 系统管理
- 平台架构
- 平台(单位)管理
- 组织架构
- 用户管理
- 角色管理
- 运维管理
- 菜单管理
- 流程管理
- 代码管理
- 字典管理
- 车型库管理
- 报表管理
- 产品管理
- 经销商管理
- 数据字典
- 业务设置
- 业务报表设置
- 系统配置
- 微信小程序设置
- OCR识别
- 钉钉通知
- 钉钉登录授权
- 云储存设置
- 服务规划
- 其他产品
- 教育点播
- 退役政务
- 三方报表
- 微信社群
- 场景名片
- 合同电子签
- TP5实用封装
- 通用封装
- Export通用封装
- Import通用封装
- 配合Import通用封装的ImportBaseVerify类
- Files通用封装
- Directory通用封装
- Pdf通用封装
- Words通用封装
- Nredis(redis封装)
- ZipArchives压缩zip文件封装
- BarQrcode条形码二维码
- Publics公共方法封装
- Curls(cUrl请求封装)
- extend扩展开发
- 何时编写扩展文件包
- 扩展文件包如何编写
- 题外话
- 常用的compose安装
- 一些建议及细节
- 实用工具
- 源码分析
- 入口文件index.php
- think\Facade类详解
- App对接Api设计
- 设计模式说明(为什么这么做)
- 代码设计逻辑方案
- 数据库备份
- 实用案例
- 如何“偷”JAVA代码
- SAAS接口设计
- 1、创建saas基类文件
- 2、初始化控制器服务
- 3、身份校验
- 4、创建登录控制器
- 5、实现登录服务层
- 6、服务层继承的service类
- 7、该案例的完整模块包
- 校验型规则校验扩展包
- 自定义规则解析(可供参考)
- 通用文件扩展包(File,Zip)
- PHP实现word转PDF功能环境搭建
- 日志通用扩展包
- 定时任务
- PHP视频处理器安装环境搭建
- 日常开发问题记录
- 1、mysql存储中带一些不可见字符
- 2、php开发规范校验及修复