#!/usr/bin/env php 0) { $name = fread($hdl, $nameLen); } else { $name = ''; } $numFiles = number8bit(fread($hdl, 1)); echo str_repeat(' ', $level) . $name . "/" . " (" . $numFiles . " files)\n"; for ($n = 0; $n < $numFiles; $n++) { parseEntry($level + 1); } } function parseFile($level) { global $hdl; $nameLen = number8bit(fread($hdl, 1)); $name = fread($hdl, $nameLen); $fileSize = number32bit(fread($hdl, 4)); $offset = number32bit(fread($hdl, 4)); $unknown = number32bit(fread($hdl, 4)); $compressed = ($fileSize != $unknown); echo str_pad( str_repeat(' ', $level) . $name, 30, ' ' ) . " " . str_pad($fileSize, 8, ' ', STR_PAD_LEFT) . " bytes" . ", offset " . str_pad($offset, 8, ' ') . " compressed: " . ($compressed ? 'yes' : 'no') . "\n"; } function number8bit($binary) { return unpack('C', $binary)[1]; } function number32bit($binary) { return unpack('V', $binary)[1]; } function error($msg) { file_put_contents('php://stderr', $msg . "\n"); } function debug($msg) { echo $msg . "\n"; } ?>