2010-10-25 18 views
17

Mi chiedevo come posso creare una sitemap utilizzando PHP & MySQL e ci sono esempi di progettazione di sitemap che conosci?Come creare una sitemap utilizzando PHP e MySQL

+2

Cosa intendi per "sitemap" esattamente –

+0

'sitemap.xml' per i motori di ricerca? O uno per l'utente da visualizzare? Se quest'ultimo, queste cose (soprattutto) è andato fuori moda nel corso dell'ultimo millennio. – ceejayoz

+0

uno per i motori di ricerca. grazie. – HELP

risposta

0

Non penso che tu abbia bisogno di MySQL, è importante per te usarlo? Avete pagine dinamiche o statiche? La tua domanda è un po 'vaga. Vuoi creare un servizio che crei sitemap o semplicemente cerchi di indicizzare il tuo?

Here's a little something to get you started.

+0

Ho pagine dinamiche. Sto solo cercando di creare il mio. – HELP

+0

Allora perché preoccuparsi quando ci sono dozzine di servizi gratuiti online che possono creare una sitemap in pochi minuti? Controlla questo: http: //www.xml-sitemaps.it/ – Alex

0

Questo è importante su come è strutturato il tuo sito. Le tue pagine web sono contenute nel database mysql insieme a una struttura del sito e vengono recuperate da uno script PHP che le fornisce all'utente o il tuo sito Web consiste solo di file .html statici? Se il primo, devi solo rendere la struttura del sito contenuta nel db in una bella lista di link leggibile. Se il secondo, si potrebbe, um, unire uno strumento che passa attraverso tutti i file e le directory nella cartella Web e ne crea una linklist, possibilmente analizzando i titoli dei siti dai file html: P

2

La domanda è molto vago - avremmo bisogno di sapere molto di più sul resto del tuo sito prima di ottenere una buona risposta.

Dipende dalla struttura della pagina e da ciò che si desidera includere nella mappa.

Se il sito è relativamente statico, è necessario salvare la Sitemap come pagina statica, pertanto non causa un'ulteriore elaborazione ogni volta che viene caricata. Tuttavia, se il tuo sito viene aggiornato frequentemente, potrebbe essere necessario aggiornare la mappa spesso, quindi una dinamica che si aggiorna ogni volta che viene caricata potrebbe essere migliore.

Se il tuo sito PHP ha una struttura CMS e tutte le tue pagine sono incluse nel CMS, allora dovrebbe essere relativamente semplice da eseguire attraverso il database e tirare i link a tutte le tue pagine (a seconda, ovviamente, sulla struttura del tuo CMS).

D'altra parte, se il tuo sito non è strutturato in un modo che ti permetta di farlo, o se vuoi limitare le pagine mostrate sulla mappa, allora potresti trovare più facile eseguire uno spider attraverso il sito e memorizzare i risultati.

Esistono già molti programmi di mappe di siti esistenti. Ho cercato su google php sitemap generator e ho ottenuto una serie completa di risultati, alcuni dei quali potrebbero sembrare utili per te, anche se solo così puoi scaricarli per studiarne il codice sorgente.

+0

Posso chiederti di dare un'occhiata alla domanda relativa alla sitemap in xml qui: tinyurl.com/pgqjdeo? –

20

Lo uso sul mio sito, funziona bene e puoi puntare gli strumenti per webmaster di Google su "this_file.php" e fa miracoli!

 
<?php 
header("Content-type: text/xml"); 
echo'<?xml version=\'1.0\' encoding=\'UTF-8\'?>'; 
echo' <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">'; 

include '../include.php'; 
$sql = mysql_query("select blah from bleh"); 

while ($string = mysql_fetch_array($sql)){?> 
      <url> 
       <loc>http://www.domain.com/dir/<?echo $string['value'];?>/index.php</loc> 
       <changefreq>weekly</changefreq> 
      </url> 
<?php } ?> 
</urlset> 
+2

Funzionerà per siti di piccole dimensioni. Ma per i siti con enormi dati generati dagli utenti, piangerà. –

+0

Ho perso molto tempo a provare questo e poi vedo che il tag php non contiene

+0

@RahulPrasad - la memorizzazione nella cache del risultato funziona bene per siti di medie o grandi dimensioni. – Westy92

0

Ecco un codice che sto usando per generare una sitemap grande da una tabella di database. È un po 'un casino, ed è intrecciato con il sito esistente e esistente. Sto lavorando a una nuova versione, molto presto, ma forse aiuterà qualcuno.

<?php // vim:ai:et:sw=4:ts=4 

/* 
* Generates a sitemap from the database. 
*/ 

include('shared/global.cfg'); 
define('DB_DSN', 'mysql:dbname='.DB_DATABASE.';host='.DB_HOSTNAME); 

/* 
* The page paramter picks out which sitemap to return, or, 
* if no page is specified, returns an index of pages. 
*/ 
$page = filter_input(INPUT_GET, 'page', FILTER_SANITIZE_NUMBER_INT); 
if ($page == '') { 
    $page = 'index'; 
} 

define('URLROOT', 'http://la.indymedia.org/'); 
define('SM_PATH', SF_CACHE_PATH.'/sitemap/'); 
$path = sitemap_page_path($page); 
$index = sitemap_index_path(); 

/* 
* If the index file is missing, or is old, regenerate the entire 
* sitemap over. This takes several seconds. 
*/ 
if (file_exists($index)) { 
    $stat = stat($index); 
    $mtime = $stat['mtime']; 
    $diff = time() - $mtime; 
    if ($diff > 24*60*60) { 
     regenerate_sitemap(); 
    } 
} else { 
    regenerate_sitemap(); 
} 

/* 
* Read the cached file, and spit it out. 
*/ 
$text = file_get_contents($path); 
header("Content-type: application/xml"); 
echo $text; 
exit(); 

/* 
* The main function to call to regen the sitemaps. 
* It reads from the database. 
* Paginates the results. 
*/ 
function regenerate_sitemap() { 
    global $index; 
    $pdo = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
    $stmt = $pdo->prepare('SELECT id,created FROM webcast WHERE display<>"f" and parent_id=0'); 
    $stmt->execute(); 
    $count = 0; 
    $page = 1; 
    $urls = []; 
    $pageurls = []; 
    while($row = $stmt->fetch()) { 
     $created = $row['created']; 
     $y = substr($created,0,4); 
     $m = substr($created,5,2); 
     $id = $row['id']; 
     $urls[] = URLROOT."news/$y/$m/$id.php"; 
     $count++; 
     if ($count==50000) { 
      write_sitemap_page($page, $urls); 
      $pageurls[] = URLROOT.'sitemap.php?page='.$page; 
      $page++; 
      $urls = []; 
      $count = 0; 
     } 
    } 
    // fixme - we need to make a sitemaps of events, right here. 
    if (count($urls) > 0) { 
     write_sitemap_page($page, $urls); 
     $pageurls[] = URLROOT.'sitemap.php?page='.$page; 
    } 
    write_sitemap_index($pageurls); 
} 

function sitemap_page_path($page) { 
    return SM_PATH.'sitemap_'.$page.'.xml'; 
} 
function sitemap_index_path() { 
    return SM_PATH.'sitemap_index.xml'; 
} 

/* 
* Writes a single sitemap from an array of URLs. 
*/ 
function write_sitemap_page($page, $urlarray) { 
    $path = sitemap_page_path($page); 
    $xml = '<?xml version="1.0" encoding="UTF-8"?>'."\n"; 
    $xml .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; 
    foreach($urlarray as $url) { 
     $xml .= '<url><loc>'.$url.'</loc></url>'; 
    } 
    $xml .= '</urlset>'; 
    file_put_contents($path, $xml); 
} 

/* 
* Writes the index of sitemaps. 
*/ 
function write_sitemap_index($urlarray) { 
    $xml = '<?xml version="1.0" encoding="UTF-8"?>'."\n"; 
    $xml .= '<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; 
    foreach($urlarray as $url) { 
     $xml .= '<sitemap><loc>'.$url.'</loc></sitemap>'; 
    } 
    $xml .= '</sitemapindex>'; 
    file_put_contents(sitemap_index_path(), $xml); 
} 
Problemi correlati