1 public function zpk_parser() {
2
3 $res_path = ROOT_PATH . "public/zpk/";
4 $file_lists = glob($res_path . "*.zpk");
5 foreach ($file_lists as $file_path) {
6
7 $dir_name = explode(".zpk", $file_path)[0];
8 if (!is_dir($dir_name)) {
9 mkdir($dir_name, "0777");
10 }
11 $zpk = file_get_contents($file_path);
12 $bin = bin2hex($zpk);
13 $json = [
14 "head" => "7b22",
15 "end" => "227d"
16 ];
17 $jpg = [
18 "head" => "ffd8ff",
19 "end" => "ffd9"
20 ];
21 $jpeg = [
22 "head" => "ffd8ff",
23 "end" => "ffd9"
24 ];
25 $gif = [
26 "head" => "474946383961",
27 "end" => ""
28 ];
29 $png = [
30 "head" => "89504e470d0a1a0a",
31 "end" => "0000000049454e44ae426082"
32 ];
33
34 /**
35 * 读取文件列表
36 */
37 preg_match_all("/6d6574612e6a736f6e(.*)/", $bin, $matches_lists);
38 $matches_lists
39 = array_map(function ($v) { return hex2bin($v); }, array_filter(explode("0a", $matches_lists[0][0])));
40 //根据文件位置确定标识
41 $mp3 = [
42 "head" => $json["end"],
43 "end" => $jpg["head"]
44 ];
45 $aac = [
46 "head" => $jpg["end"],
47 "end" => $png["head"]
48 ];
49
50 $message = var_export($matches_lists, true) . "\r\n";
51 $flag = true;
52 foreach ($matches_lists as $v) {
53 //遍历文件列表,从流中读取内容并生成相应文件
54 $file_name = $v;
55 $file_type = explode(".", $v)[1];
56
57 //跳过gif图片
58 if ($file_type == "gif") continue;
59
60 $head = $$file_type["head"];
61 $end = $$file_type["end"];
62 preg_match_all("/{$head}(.*?){$end}/i", $bin, $matches);
63 $message .= $file_type . ":";
64 if (!empty($matches[0][0])) {
65 if (strlen($matches[0][0]) % 2 == 0) {
66 file_put_contents($dir_name . DS . $file_name, hex2bin($matches[0][0]));
67 $message .= "生成成功" . "\r\n";
68 } else {
69 $message .= "数据错误\r\n";
70 $flag = false;
71 }
72 } else {
73 $message .= "没有匹配到数据";
74 }
75 }
76 file_put_contents($dir_name . DS . ($flag ? "true.log" : "false.log"), $message, FILE_APPEND);
77 echo $file_path . "\r\n";
78 }
79 }