2010-10-25 68 views
17

我想知道如何使用PHP創建站點地圖& MySQL,並且是否有任何您知道的站點地圖設計示例?如何使用PHP和MySQL創建站點地圖

+2

什麼意思是「網站地圖」究竟是 – 2010-10-25 21:15:56

+0

「sitemap.xml」的搜索引擎?還是一個供用戶查看?如果是後者,那麼這些東西(大部分)在上個千年就失去了風格。 – ceejayoz 2010-10-25 21:16:50

+0

一個用於搜索引擎。謝謝。 – HELP 2010-10-25 21:17:43

回答

0

我不認爲你需要MySQL,使用它很重要嗎? 你有動態或靜態頁面嗎? 你的問題有點含糊。你想創建一個服務,創建站點地圖或只是試圖索引你自己的?

Here's a little something to get you started

+0

我有動態頁面。我只是想創造我自己的。 – HELP 2010-10-25 21:21:29

+0

那麼,爲什麼還有幾十種免費的在線服務可以在幾分鐘內創建一個網站地圖呢? 看看這個:http://www.xml-sitemaps。com/ – Alex 2010-10-25 21:27:12

0

這關乎您的網站的結構。您的網頁是否包含在mysql數據庫中,並附帶一個網站結構,並通過PHP腳本提供給用戶,或者您的網站是否僅包含靜態.html文件?如果第一個,你只需要將包含在數據庫中的網站結構渲染成一個很好的人類可讀鏈接列表。如果第二個,你可以,嗯,粘在一起的工具,通過您的網絡文件夾中的所有文件和目錄,並製作一個鏈接列表,可能通過解析html文件中的網站標題:P

2

問題是非常含糊的 - 我們需要知道更多關於您的網站的其他部分,然後才能得到很好的答案。

這取決於您的頁面結構以及您想要包含在地圖中的內容。

如果您的網站是相對靜態的,那麼您應該將您的網站地圖保存爲一個靜態頁面,因此每次加載時都不會導致額外的處理。但是,如果您的網站經常更新,那麼您可能需要經常刷新地圖,因此每次加載時刷新的動態地圖可能會更好。

如果你的PHP站點有一個CMS結構,並且你的所有頁面都包含在CMS中,那麼它應該相對簡單地運行數據庫並將鏈接拉出到你的所有頁面(當然,取決於結構的CMS)。另一方面,如果您的網站的結構不是可以讓您這樣做,或者您想要限制地圖上顯示的網頁,那麼您可能會發現在整個網頁上運行蜘蛛更容易。網站並存儲結果。

已經有很多已經寫好的現有網站地圖程序。我搜索了php sitemap generator,並得到了一大堆結果,其中很多看起來可能對你有用,即使只有你可以下載它們來研究它們的源代碼。

+0

我可以請你看看我的XML站點地圖相關的問題在這裏 - tinyurl.com/pgqjdeo? – 2015-10-24 13:34:44

20

我在我的網站上使用它,它運行良好,您可以將Google的網站站長工具指向「this_file.php」,它可以創造奇蹟!

 
<?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

將適用於小型網站。但對於擁有大量用戶生成數據的網站,它會哭泣。 – 2012-10-06 06:47:33

+0

失去了很多時間試圖這個,然後我看到PHP標籤不包含<?PHP和我的服務器只接受這樣的。也許對某人有幫助。 – 2014-10-02 14:00:46

+0

@RahulPrasad - 緩存結果適用於中型或大型網站。 – Westy92 2017-11-19 23:45:15

0

下面是我用來從數據庫表中生成大型站點地圖的一些代碼。這有點混亂,它與現有的遺留網站交織在一起。我現在正在研究新版本,但可能會幫助某人。

<?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); 
}