prune_dir( $bucket, $bucket_dir ); class S3_Prune { var $s3; var $xml_cur_element; var $xml_depth; var $xml_contents; var $isTruncated; var $lastKey; function prune_dir( $bucket, $bucket_dir ) { $this->xml_depth = array(); if( !$this->s3 ) { $s3 = new s3; $s3->setBucketName( $bucket ); $this->s3 = $s3; } $this->isTruncated = 'true'; $this->lastKey = null; while( $this->isTruncated == 'true' ) { echo "getting XML dump from S3...\n"; $xmldata = $s3->getObjects( $bucket, $bucket_dir.'/', $this->lastKey ); echo "parsing XML dump...\n"; $xml_parser = xml_parser_create(); xml_set_object( $xml_parser, $this ); xml_set_element_handler($xml_parser, 'startElement', 'endElement' ); xml_set_character_data_handler($xml_parser, 'characterData' ); if (!xml_parse($xml_parser, $xmldata, 1)) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } xml_parser_free($xml_parser); } } function process_file( $contents ) { $s3 = $this->s3; if( !isset( $contents['KEY'] )) return; $this->lastKey = $contents['KEY']; echo "pruning {$contents['KEY']}...\n"; $res = $s3->deleteObject( $contents['KEY'] ); } function startElement($parser, $name, $attrs) { $this->xml_cur_element = $name; $this->xml_depth[$parser]++; } function endElement($parser, $name) { if( $name == 'CONTENTS' ) { $this->process_file( $this->xml_contents ); $contents = array(); } if( $name == 'ISTRUNCATED' ) { $this->isTruncated = $this->xml_contents['ISTRUNCATED']; } $this->xml_depth[$parser]--; } function characterData($parser, $data) { $this->xml_contents[$this->xml_cur_element] = $data; } }