|
|
<?php
|
|
|
|
|
|
// +----------------------------------------------------------------------
|
|
|
// | ThinkLibrary 6.0 for ThinkPhP 6.0
|
|
|
// +----------------------------------------------------------------------
|
|
|
// | 版权所有 2017~2020 [ https://www.dtapp.net ]
|
|
|
// +----------------------------------------------------------------------
|
|
|
// | 官方网站: https://gitee.com/liguangchun/ThinkLibrary
|
|
|
// +----------------------------------------------------------------------
|
|
|
// | 开源协议 ( https://mit-license.org )
|
|
|
// +----------------------------------------------------------------------
|
|
|
// | gitee 仓库地址 :https://gitee.com/liguangchun/ThinkLibrary
|
|
|
// | github 仓库地址 :https://github.com/GC0202/ThinkLibrary
|
|
|
// | Packagist 地址 :https://packagist.org/packages/liguangchun/think-library
|
|
|
// +----------------------------------------------------------------------
|
|
|
|
|
|
declare (strict_types=1);
|
|
|
|
|
|
namespace DtApp\ThinkLibrary\helper;
|
|
|
|
|
|
use DtApp\ThinkLibrary\exception\DtaException;
|
|
|
use think\Exception;
|
|
|
use ZipArchive;
|
|
|
|
|
|
/**
|
|
|
* 文件管理类
|
|
|
* @mixin Files
|
|
|
* @package DtApp\ThinkLibrary\helper
|
|
|
*/
|
|
|
class Files
|
|
|
{
|
|
|
/**
|
|
|
* 删除文件
|
|
|
* @param string $name 路径
|
|
|
* @return bool
|
|
|
* @throws DtaException
|
|
|
*/
|
|
|
public function delete(string $name): bool
|
|
|
{
|
|
|
if (empty($name)) {
|
|
|
throw new DtaException('请检查需要删除文件夹的名称');
|
|
|
}
|
|
|
return file_exists($name) && unlink($name);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 删除文件夹
|
|
|
* @param string $name 路径
|
|
|
* @return bool
|
|
|
* @throws DtaException
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public function deletes(string $name): bool
|
|
|
{
|
|
|
if (empty($name)) {
|
|
|
throw new DtaException('请检查需要删除文件夹的名称');
|
|
|
}
|
|
|
//先删除目录下的文件:
|
|
|
$dh = opendir($name);
|
|
|
while ($file = readdir($dh)) {
|
|
|
if ($file !== "." && $file !== "..") {
|
|
|
$fullpath = $name . "/" . $file;
|
|
|
if (!is_dir($fullpath)) {
|
|
|
unlink($fullpath);
|
|
|
} else {
|
|
|
$this->deletes($fullpath);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
closedir($dh);
|
|
|
//删除当前文件夹:
|
|
|
if (rmdir($name)) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 把文件夹里面的文件打包成zip文件
|
|
|
* @param string $name 路径
|
|
|
* @param string $suffix_name 需要打包的后缀名,默认.png
|
|
|
* @param string $file_name 文件名,默认全部名
|
|
|
* @return bool
|
|
|
* @throws DtaException
|
|
|
*/
|
|
|
public function folderZip(string $name, string $suffix_name = '.png', string $file_name = '*'): bool
|
|
|
{
|
|
|
if (empty($name)) {
|
|
|
throw new DtaException('请检查需要打包的路径名称');
|
|
|
}
|
|
|
$list = glob($name . "{$file_name}.{$suffix_name}");
|
|
|
$fileList = $list;
|
|
|
$zip = new ZipArchive();
|
|
|
// 打开压缩包
|
|
|
$zip->open($name, ZipArchive::CREATE);
|
|
|
//向压缩包中添加文件
|
|
|
foreach ($fileList as $file) {
|
|
|
$zip->addFile($file, basename($file));
|
|
|
}
|
|
|
//关闭压缩包
|
|
|
$zip->close();
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取目录下的所有文件和目录
|
|
|
* @param string $path
|
|
|
* @return array
|
|
|
*/
|
|
|
public function getFiles(string $path): array
|
|
|
{
|
|
|
$files = [];
|
|
|
if (is_dir($path)) {
|
|
|
$path = dirname($path) . '/' . basename($path) . '/';
|
|
|
$file = dir($path);
|
|
|
while (false !== ($entry = $file->read())) {
|
|
|
if ($entry !== '.' && $entry !== '..') {
|
|
|
$cur = $path . $entry;
|
|
|
if (is_dir($cur)) {
|
|
|
$subPath = $cur . '/';
|
|
|
$this->getFiles($subPath);
|
|
|
}
|
|
|
$files[] = $cur;
|
|
|
}
|
|
|
}
|
|
|
$file->close();
|
|
|
return $files;
|
|
|
}
|
|
|
|
|
|
return [];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 删除目录下的文件
|
|
|
* @param string $path
|
|
|
* @return bool
|
|
|
*/
|
|
|
public function rmFiles(string $path): bool
|
|
|
{
|
|
|
$files = $this->getFiles($path);
|
|
|
if (!is_array($files)) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
if (empty($files)) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
foreach ($files as $item => $file) {
|
|
|
if (is_dir($file)) {
|
|
|
rmdir($file);
|
|
|
} elseif (is_file($file)) {
|
|
|
unlink($file);
|
|
|
}
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 判断文件是否存在
|
|
|
* @param string $path
|
|
|
* @return bool
|
|
|
*/
|
|
|
public function judgeFile(string $path): bool
|
|
|
{
|
|
|
if (file_exists($path)) {
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 判断目录是否存在
|
|
|
* @param string $path
|
|
|
* @return bool
|
|
|
*/
|
|
|
public function judgeContents(string $path): bool
|
|
|
{
|
|
|
if (is_dir($path)) {
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
}
|