初始上传
This commit is contained in:
161
extend/FileManage.php
Executable file
161
extend/FileManage.php
Executable file
@@ -0,0 +1,161 @@
|
||||
<?php
|
||||
|
||||
namespace extend;
|
||||
|
||||
/**
|
||||
* 文件比对管理类
|
||||
* @author Administrator
|
||||
*
|
||||
*/
|
||||
class FileManage
|
||||
{
|
||||
public $map = [];
|
||||
public $dir = [];
|
||||
|
||||
public function mapCompare($map_old_path, $map_new_path)
|
||||
{
|
||||
$map_old = include_once $map_old_path;
|
||||
$map_new = include_once $map_new_path;
|
||||
$upgrade_map = [];
|
||||
|
||||
//比对
|
||||
foreach ($map_new as $k => $v) {
|
||||
$check_path = isset($map_old[ $k ]) ? $map_old[ $k ] : '';
|
||||
if ($check_path != $v) {
|
||||
$upgrade_map[ $k ] = $v;
|
||||
}
|
||||
}
|
||||
return $upgrade_map;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建文件夹
|
||||
*
|
||||
* @param string $path 文件夹路径
|
||||
* @param int $mode 访问权限
|
||||
* @param bool $recursive 是否递归创建
|
||||
* @return bool
|
||||
*/
|
||||
public function dir_mkdir($path = '', $mode = 0777, $recursive = true)
|
||||
{
|
||||
clearstatcache();
|
||||
if (!is_dir($path)) {
|
||||
mkdir($path, $mode, $recursive);
|
||||
return chmod($path, $mode);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getDir($path)
|
||||
{
|
||||
if (is_dir($path)) {
|
||||
$dir = scandir($path);
|
||||
foreach ($dir as $value) {
|
||||
$sub_path = $path . '/' . $value;
|
||||
if ($value == '.' || $value == '..') {
|
||||
continue;
|
||||
} else if (is_dir($sub_path)) {
|
||||
$this->getDir($sub_path);
|
||||
} else {
|
||||
$this->dir[] = $path . '/' . $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 生成更新文件地图
|
||||
* @param $path
|
||||
* @return array
|
||||
*/
|
||||
public function getFileMap($path)
|
||||
{
|
||||
|
||||
$this->getDir($path);
|
||||
$array = [];
|
||||
if (!empty($this->dir)) {
|
||||
foreach ($this->dir as $k => $v) {
|
||||
$file = file_get_contents($v);
|
||||
$file_md5 = md5($file);
|
||||
$v = str_replace($path . '/', '', $v);
|
||||
$array[ $v ] = $file_md5;
|
||||
}
|
||||
}
|
||||
return $array;
|
||||
}
|
||||
|
||||
/**
|
||||
* 解压文件
|
||||
* @param $filename
|
||||
* @param $path
|
||||
* @return array|string
|
||||
*/
|
||||
public function unzip($filename, $path)
|
||||
{
|
||||
if (!file_exists($filename)) {
|
||||
return [ "code" => -1, "message" => '文件不存在' ];
|
||||
}
|
||||
//将文件名和路径转成windows系统默认的gb2312编码,否则将会读取不到
|
||||
$filename = iconv("utf-8", "gb2312", $filename);
|
||||
$path = iconv("utf-8", "gb2312", $path);
|
||||
//打开压缩包
|
||||
$resource = zip_open($filename);
|
||||
$i = 1;
|
||||
//遍历读取压缩包里面的一个个文件
|
||||
while ($dir_resource = zip_read($resource)) {
|
||||
//如果能打开则继续
|
||||
if (zip_entry_open($resource, $dir_resource)) {
|
||||
//获取当前项目的名称,即压缩包里面当前对应的文件名
|
||||
$file_name = $path . zip_entry_name($dir_resource);
|
||||
//以最后一个“/”分割,再用字符串截取出路径部分
|
||||
$file_path = substr($file_name, 0, strrpos($file_name, "/"));
|
||||
//如果路径不存在,则创建一个目录,true表示可以创建多级目录
|
||||
if (!is_dir($file_path)) {
|
||||
mkdir($file_path, 0777, true);
|
||||
}
|
||||
//如果不是目录,则写入文件
|
||||
if (!is_dir($file_name)) {
|
||||
//读取这个文件
|
||||
$file_size = zip_entry_filesize($dir_resource);
|
||||
//最大读取6M,如果文件过大,跳过解压,继续下一个
|
||||
if ($file_size < ( 1024 * 1024 * 50 )) {
|
||||
$file_content = zip_entry_read($dir_resource, $file_size);
|
||||
file_put_contents($file_name, $file_content);
|
||||
} else {
|
||||
return "<p> " . $i++ . " 此文件已被跳过,原因:文件过大, -> " . iconv("gb2312", "utf-8", $file_name) . " </p>";
|
||||
}
|
||||
}
|
||||
//关闭当前
|
||||
zip_entry_close($dir_resource);
|
||||
}
|
||||
}
|
||||
//关闭压缩包
|
||||
zip_close($resource);
|
||||
return [ "code" => 0, "message" => '解压完毕' ];
|
||||
}
|
||||
|
||||
/**
|
||||
* 数组写入文件
|
||||
* @param $array
|
||||
* @param $path
|
||||
* @return mixed
|
||||
*/
|
||||
public function arrayWrite($array, $path)
|
||||
{
|
||||
$str = '';
|
||||
foreach ($array as $k => $v) {
|
||||
if (empty($str)) {
|
||||
$str = "'$k' => '" . $v . "'" . ',';
|
||||
} else {
|
||||
$str = $str . "\n" . "'$k' => '" . $v . "'" . ',';
|
||||
}
|
||||
|
||||
}
|
||||
$str = '<?php' . "\n" . ' return [' . "\n" . $str . "\n" . ']; ' . "\n" . '?>';
|
||||
$str = charsetToUTF8($str);
|
||||
file_put_contents($path, $str);
|
||||
return $path;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user