ho risolto in un modo che non sarà fine, ma certamente è più efficente rispetto a fare il parsing del file attraverso array. Posto la soluzione spiegando il funzionamento, in caso a qualcuno potesse essere utile:
Codice PHP:
# AGGIORNAMENTO PAGINA
# Gestisce l'aggiornamento sitemap per la pagina specificata (aggiunta o modifica)
function sitemap_aggiornamentoPagina($sitemap_file, $pagina_percorso) {
# Legge il contenuto del file sitemap, se non riesce restituisce false
if(!$sitemap_buffer = @file_get_contents($sitemap_file))
return false;
# Verifica se la pagina è già presente nel contenuto del file, facendo una semplice ricerca
# testuale del percorso da inserire
if($pagina_posizione = strpos($sitemap_buffer, $pagina_percorso)) {
# Se hai trovato la pagina memorizza le posizioni della prima occorrenza di <lastmod> e </lastmod>, successive alla
# posizione della pagina trovata (infatti chiama la funzione strpos con offset la posizione della pagina)
$sitemap_opentag_pos = strpos($sitemap_buffer, "<lastmod>", $pagina_posizione);
$sitemap_closetag_pos = strpos($sitemap_buffer, "</lastmod>", $pagina_posizione);
# Ricerca la prima occorrenza di <lastmod> successiva alla posizione della URL e
# copia il documento dall'inizio a quella posizione
$sitemap_buffer_pre = substr($sitemap_buffer, 0, $sitemap_opentag_pos + strlen("<lastmod>"));
# Ricerca la prima occorrenza di </lastmod> successiva alla posizione della URL
# e copia il documento da quella posizione alla fine
$sitemap_buffer_post = substr($sitemap_buffer, $sitemap_closetag_pos, strlen($sitemap_buffer) - $sitemap_closetag_pos);
@file_put_contents($sitemap_file, $sitemap_buffer_pre.date("Y-m-d").$sitemap_buffer_post);
} else {
# Se la pagina non esiste ancora genera il nodo per la URL corrente
$node_buffer = chr(9)."<url>".chr(13).chr(10);
$node_buffer .= chr(9).chr(9)."<loc>".$pagina_percorso."</loc>".chr(13).chr(10);
$node_buffer .= chr(9).chr(9)."<lastmod>".date("Y-m-d")."</lastmod>".chr(13).chr(10);
$node_buffer .= chr(9).chr(9)."<changefreq>monthly</changefreq>".chr(13).chr(10);
$node_buffer .= chr(9).chr(9)."<priority>0.8</priority>".chr(13).chr(10);
$node_buffer .= chr(9)."</url>".chr(13).chr(10);
$node_buffer .= "</urlset>";
# Aggiungi il nodo in coda alla sitemap (ovvero sostituisce il nodo più </urlset>, il tag di
# fine sitemap, al posto dello stesso </urlset> del documento originale)
@file_put_contents($sitemap_file, str_replace("</urlset>", $node_buffer, $sitemap_buffer));
}
}
alla prossima!