" ); } if ( !file_exists( $filename ) ) { die( "File doesn't exisit: $filename" ); } $read_stage = 0; $read_dirname = NULL; $read_numfiles = 0; $read_filelist = array(); $read_filelist_counter = 0; $read_bleed = NULL; $read_counter = 0; $read_output = NULL; if ( $handle = fopen( $filename, 'rb' ) ) { while ( !feof( $handle ) ) { $buffer = fgets( $handle, 8192 ); if ( $read_stage <= 3 ) { $buffer = trim( $buffer ); } if ( $read_stage == 0 ) { if ( $buffer == 'ISUN Disk Label' ) { $read_stage = 1; echo "Header name: $buffer\n"; } else { die( "Invalid file header (\"$buffer\")" ); } } elseif ( $read_stage == 1 ) { $read_dirname = $buffer; $read_stage = 2; echo "Directory name: $read_dirname\n"; if ( !file_exists( $read_dirname ) ) { mkdir( $read_dirname ); } } elseif ( $read_stage == 2 ) { $read_numfiles = (int)$buffer; $read_stage = 3; echo "Number of files: $read_numfiles\n"; } elseif( $read_stage == 3 ) { $read_filelist_counter++; $buffer = explode( "\t", $buffer); $buffer[3] = explode( "\0", $buffer[3] ); if ( count( $buffer[3] ) > 1 ) { if ( $read_filelist_counter != $read_numfiles ) { echo "NOT EXPECTED !! "; } echo "Bleeding edge: $read_filelist_counter\n"; for( $x = 1; $x <= count( $buffer[3] ); $x++ ) { if ( !empty( $read_bleed ) ) { $read_bleed .= "\0"; } $read_bleed .= $buffer[3][$x]; } } $buffer[3] = $buffer[3][0]; $read_filelist[$read_filelist_counter] = array( $buffer[2], $buffer[3] ); echo "Entry: $read_filelist_counter\n"; if ( $read_filelist_counter == $read_numfiles ) { $read_filelist_counter = 1; $read_stage = 4; } } else { $data_length = $read_filelist[$read_filelist_counter][1]; $data_filename = $read_filelist[$read_filelist_counter][0]; if ( !empty( $read_bleed ) ) { $buffer = $read_bleed . $buffer; $read_bleed = NULL; } $read_output .= $buffer; if ( strlen( $read_output ) >= $data_length ) { $data_filename = str_pad( $read_filelist_counter, 2, '0', STR_PAD_LEFT ) . ' - '. $data_filename; echo "\nFile($read_filelist_counter): $data_filename ($data_length)\n"; $write_output = substr( $read_output, 0, $data_length ); $read_bleed = substr( $read_output, $data_length + 1 ); $read_output = NULL; file_put_contents( $read_dirname .'\\'. $data_filename, $write_output ); $write_output = NULL; $read_filelist_counter++; } } } } if ( !empty( $read_bleed ) ) { echo "Appears there was left over data, something went wrong?\n"; } ?>