Changes in trunk/wp-includes/class-IXR.php [12263:10571]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-includes/class-IXR.php
r12263 r10571 154 154 // The XML parser 155 155 var $_parser; 156 function IXR_Message ( &$message) {157 $this->message = &$message;156 function IXR_Message ($message) { 157 $this->message = $message; 158 158 } 159 159 function parse() { 160 // first remove the XML declaration 161 // this method avoids the RAM usage of preg_replace on very large messages 162 $header = preg_replace( '/<\?xml.*?\?'.'>/', '', substr( $this->message, 0, 100 ), 1 ); 163 $this->message = substr_replace($this->message, $header, 0, 100); 160 // first remove the XML declaration 161 $this->message = preg_replace('/<\?xml.*?\?'.'>/', '', $this->message); 164 162 if (trim($this->message) == '') { 165 163 return false; 166 164 } 167 165 $this->_parser = xml_parser_create(); 168 166 // Set XML parser to take the case of tags in to account … … 171 169 xml_set_object($this->_parser, $this); 172 170 xml_set_element_handler($this->_parser, 'tag_open', 'tag_close'); 173 xml_set_character_data_handler($this->_parser, 'cdata'); 174 $chunk_size = 262144; // 256Kb, parse in chunks to avoid the RAM usage on very large messages 175 do { 176 if ( strlen($this->message) <= $chunk_size ) 177 $final=true; 178 $part = substr( $this->message, 0, $chunk_size ); 179 $this->message = substr( $this->message, $chunk_size ); 180 if ( !xml_parse( $this->_parser, $part, $final ) ) 181 return false; 182 if ( $final ) 183 break; 184 } while ( true ); 185 xml_parser_free($this->_parser); 171 xml_set_character_data_handler($this->_parser, 'cdata'); 172 if (!xml_parse($this->_parser, $this->message)) { 173 /* die(sprintf('XML error: %s at line %d', 174 xml_error_string(xml_get_error_code($this->_parser)), 175 xml_get_current_line_number($this->_parser))); */ 176 return false; 177 } 178 xml_parser_free($this->_parser); 186 179 // Grab the error messages, if any 187 180 if ($this->messageType == 'fault') { 188 181 $this->faultCode = $this->params[0]['faultCode']; 189 182 $this->faultString = $this->params[0]['faultString']; 190 183 } 191 184 return true; 192 185 } … … 312 305 die('XML-RPC server accepts POST requests only.'); 313 306 } 314 $data = &$HTTP_RAW_POST_DATA;307 $data = $HTTP_RAW_POST_DATA; 315 308 } 316 309 $this->message = new IXR_Message($data);
Note: See TracChangeset
for help on using the changeset viewer.