|
|
@@ -892,32 +892,33 @@ class utils {
|
|
|
}
|
|
|
|
|
|
public static function hasMacros($filePath) {
|
|
|
- $extension = pathinfo($filePath, PATHINFO_EXTENSION);
|
|
|
- if ($extension === 'xlsx') {
|
|
|
- // 检查 .xlsx 文件
|
|
|
- $zip = new ZipArchive();
|
|
|
- if ($zip->open($filePath) === TRUE) {
|
|
|
- // 检查是否存在 vbaProject.bin 文件
|
|
|
- $hasMacros = $zip->locateName('xl/vbaProject.bin') !== false;
|
|
|
- $zip->close();
|
|
|
- return $hasMacros;
|
|
|
- } else {
|
|
|
- return false; // 无法打开文件
|
|
|
- }
|
|
|
- } elseif ($extension === 'docx') {
|
|
|
- // 检查 .docx 文件
|
|
|
- $zip = new ZipArchive();
|
|
|
- if ($zip->open($filePath) === TRUE) {
|
|
|
- // 检查是否存在 vbaProject.bin 文件
|
|
|
- $hasMacros = $zip->locateName('word/vbaProject.bin') !== false;
|
|
|
- $zip->close();
|
|
|
- return $hasMacros;
|
|
|
- } else {
|
|
|
- return false; // 无法打开文件
|
|
|
- }
|
|
|
- } else {
|
|
|
- return false; // 不是支持的文件类型
|
|
|
+ //$extension = pathinfo($filePath, PATHINFO_EXTENSION);
|
|
|
+ //在 MIME 校验之后,再加一层 ZIP 宏检测(同时查 xl/ 和 word/)
|
|
|
+ $zip = new ZipArchive();
|
|
|
+ if ($zip->open($filePath) !== true) {
|
|
|
+ // 无法打开为 ZIP:可能是 .xls/.doc 或损坏文件
|
|
|
+ // 由于你只允许 .xlsx/.docx/.pdf,这类文件应已被 MIME 拦截
|
|
|
+ return false;
|
|
|
}
|
|
|
+ // 同时检查 Excel 和 Word 的宏路径!
|
|
|
+ $hasExcelMacro = $zip->locateName('xl/vbaProject.bin') !== false;
|
|
|
+ $hasWordMacro = $zip->locateName('word/vbaProject.bin') !== false;
|
|
|
+
|
|
|
+ $zip->close();
|
|
|
+ return $hasExcelMacro || $hasWordMacro;
|
|
|
+
|
|
|
+ // if ($extension === 'xlsx') {
|
|
|
+ // // 检查 .xlsx 文件
|
|
|
+ // $zip = new ZipArchive();
|
|
|
+ // if ($zip->open($filePath) === TRUE) {
|
|
|
+ // // 检查是否存在 vbaProject.bin 文件
|
|
|
+ // $hasMacros = $zip->locateName('xl/vbaProject.bin') !== false;
|
|
|
+ // $zip->close();
|
|
|
+ // return $hasMacros;
|
|
|
+ // } else {
|
|
|
+ // return false; // 无法打开文件
|
|
|
+ // }
|
|
|
+ // }
|
|
|
}
|
|
|
|
|
|
public static function arrayKeyToInt($arr){
|