效果图
1.上传文件
2.压缩包文件
3.itemno1文件
4.上传到系统路径\ItemNo
更名后的itemno1文件
代码
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8'); ?>" method="post" enctype="multipart/form-data">
<input type="hidden" name="FormID" value="<?php echo $_SESSION['FormID']; ?>">
<input type="file" name="folderArchive[]" accept=".zip" multiple>
<input type="submit" value="上传" name="update">
</form>
<?php
$target_dir = "ItemNo/";
$now = date('YmdHis'); // 获取当前日期时间
$itemNo = pathinfo($target_path, PATHINFO_DIRNAME); // 获取料号,假设料号是文件夹名
$counter = 1; // 初始化序号计数器
if (isset($_POST['update'])) {
if (isset($_FILES['folderArchive']) && !empty($_FILES['folderArchive']['name'])) {
$zip_files = $_FILES['folderArchive'];
foreach ($zip_files['name'] as $key => $file_name) {
if ($zip_files['error'][$key] === UPLOAD_ERR_OK) {
$temp_file = $zip_files['tmp_name'][$key];
$target_path = $target_dir . basename($file_name);
// 将临时文件移动到服务器上的适当位置(如果需要)
move_uploaded_file($temp_file, $target_path);
// 创建一个新的 ZipArchive 对象
$zip = new ZipArchive;
// 打开zip文件
if ($zip->open($target_path) === TRUE) {
// 解压缩到指定的目录
$zip->extractTo($target_dir);
$zip->close();
prnMsg(sprintf(_('文件 "%s" 已成功上传成功.'), $file_name), 'success');
} else {
prnMsg(sprintf(_('文件 "%s" 上传成功但无法解压.'), $file_name), 'error');
}
} else {
prnMsg(sprintf(_('文件 "%s" 上传失败.'), $file_name), 'error');
}
//文件命名
if ($zip->open($target_path) === TRUE) {
$zip->extractTo($target_dir);
$zip->close();
// 获取解压后每个料号(子文件夹)的路径
$subDirs = glob($target_dir . '*', GLOB_ONLYDIR);
foreach ($subDirs as $subDir) {
// 获取料号名称
$itemNo = basename($subDir);
// 获取子文件夹中的所有文件
$filesInSubDir = glob($subDir . '/*');
$counter = 1; // 每个料号内部初始化序号计数器
foreach ($filesInSubDir as $file) {
// 跳过目录
if (is_dir($file)) continue;
// 修改日期格式为年月日
$dateForFilename = date('Ymd', strtotime($now));
// 构建新的文件名
$newFileName = $itemNo . '_' . $dateForFilename . '_' . sprintf('%04d', $counter++) . '.' . pathinfo($file, PATHINFO_EXTENSION);
// 重命名文件
rename($file, $subDir . '/' . $newFileName);
// prnMsg(sprintf(_('文件 "%s" 在料号 "%s" 下已成功上传并重命名为 "%s".'), basename($file), $itemNo, $newFileName), 'success');
}
}
} else {
prnMsg(_('命名出错'), 'error');
}
}
// 解压缩和重命名完成后删除原始压缩文件
unlink($target_path);
} else {
prnMsg(_('附件上传失败!'), 'error');
}
unset($_POST['update']);
}
?>