PDA

View Full Version : [PHP] Parser XML e php 5.2.1


dennyv
08-03-2007, 15:58
Ciao a tutti!

Ho appena eseguito l'upgrade da php 5.1.6 alla 5.2.1 per via delle numerose falle e per il supporto a JSON.

Ora mi ritrovo con il problema che la mia classe per effettuare il parsing dei feed RSS non funziona più come dovrebbe. O meglio, funziona, ma la pagina impiega anche 30 secondi a generarsi.
Ho provato a cercare un'altra classe in internet e il risultato è stato lo stesso; ovviamente se escludo il parser tutto funziona a dovere. Ora prima di aprire un bug, vorrei sapere se qualcuno si è trovato nella stessa situazione e ha capito dove sta il rallentamento... non è la fopen (che ha subito modifiche il php 5.2.1), perchè dai log apache questa viene eseguita regolarmente, la GET è eseguita subito; è prorpio il parsing ad essere lento.

Il "bug" sono riuscito a riprodurlo con tre classi differenti (se volete cerco i link, comunque le ho trovate tutte in google) e con tre installazioni differenti:
Apache 1.3 + PHP 5.2.1 su Mac OS X, Apache 2 + PHP 5.2.1 su Gentoo e Slackware.

Grazie! Ciao!

dennyv
08-03-2007, 16:05
Per dirvi, anche l'inserimento questo semplicissimo parser causa un ritardo nell'apertura della pagina di almeno una 20 di secondi

<?php

// Create an XML parser
$xml_parser = xml_parser_create();

// Set the functions to handle opening and closing tags
xml_set_element_handler($xml_parser, "startElement", "endElement");

// Set the function to handle blocks of character data
xml_set_character_data_handler($xml_parser, "characterData");

// Open the XML file for reading
$fp = fopen("http://.../feed.rss","r")
or die("Error reading RSS data.");

// Read the XML file 4KB at a time
while ($data = fread($fp, 4096))
// Parse each 4KB chunk with the XML parser created above
xml_parse($xml_parser, $data, feof($fp))
// Handle errors in parsing
or die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));

// Close the XML file
fclose($fp);

// Free up memory used by the XML parser
xml_parser_free($xml_parser);
?>