function getlist() { $f = fopen('data_t.jp.pac', 'rb'); $count = fread4($f); $tsize = fread4($f); $list = array(); for ($n = 0; $n < $count; $n++) { $size = fread4($f); $offset = fread4($f); $name_data = fread($f, 0x200); list($name) = explode("", mb_convert_encoding($name_data, 'utf-8', 'UTF-16LE'), 2); $list[] = $name; } return $list; }
function pak_extract($file) { $f = fopen($file, 'rb'); $count = fread2($f) / 0x10; $l_pos = $l_name = array(); for ($n = 0; $n < $count; $n++) { $name = rtrim(fread($f, 12), ""); $pos = fread4($f); $l_name[] = $name; $l_pos[] = $pos; } fclose($f); //array_pop($l_name); $list = array(); for ($n = 0, $l = count($l_name) - 1; $n < $l; $n++) { $list[] = array($l_name[$n], $l_pos[$n], $l_pos[$n + 1] - $l_pos[$n]); } pak_extract_real($file, $list); //print_r($list); /* $data = fread($f, ); fread($f); */ }
<?php function fread4($f) { list(, $v) = unpack('V', fread($f, 4)); return $v; } if (!file_exists('data_t.jp.pac')) { copy('data_t.pac', 'data_t.jp.pac'); } $f = fopen('data_t.jp.pac', 'rb'); $count = fread4($f); $tsize = fread4($f); $list = array(); for ($n = 0; $n < $count; $n++) { $size = fread4($f); $offset = fread4($f); $name_data = fread($f, 0x200); list($name) = explode("", mb_convert_encoding($name_data, 'utf-8', 'UTF-16LE'), 2); $list[] = array($name, $offset, $size); } foreach ($list as $file) { list($name, $offset, $size) = $file; @mkdir(dirname($name), 0777); fseek($f, $offset); file_put_contents($name, fread($f, $size)); }