Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Gestire XML (senza DOM)

    Ciao a tutti,
    ho bisogno di gestire dinamicamente le sitemap xml per il mio sito; purtroppo non dispongo del DOM, quindi dovrei arrangiarmi in altra maniera... Ho costruito una libreria di parsing, ma è davvero troppo lenta visto il gran numero di pagine, per cui mi rivolgo a voi per sapere se conoscete qualche buono script. Precisamente, ho bisogno di:

    1. leggere un file XML
    2. verificare se una pagina esiste

    e fino a qui dovrebbe essere abbastanza semplice, basta fare una semplice ricerca testuale della URL completa della pagina, senza scorrere nodo per nodo il file

    3. se non esiste aggiungere un nodo
    4. se esiste, aggiornare la data di ultima modifica (infatti la funzione viene richiamata quando la pagina viene ricreata)

    Ringrazio tutti anticipatamente per l'attenzione

  2. #2
    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_buffer0$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_posstrlen($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_filestr_replace("</urlset>"$node_buffer$sitemap_buffer));

        }


    alla prossima!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.