X

PHP: Pixnet 舊版到新版的網址轉換程式修補

PIXNET 最近一次的改版, 有個最大的改變是網址做了修改, 剛開始並沒有想太多, 但是今天開始有網友寫信來說網址要修改的問題, 才發現影響範圍比想像還大.

基本上影響範圍應該是所有做 Widget, 而且是 By Url 計分/投票等等的都會有問題, 所以 SiteTag, funp, 黑米 等都會被影響到.

於是究所有 Pixnet Bloger 的連結, 幸好修改的部份很少.

  • 主要修改是舊網址: http://blog.pixnet.net/USERNAME/
  • 改成新網址: http://USERNAME.pixnet.net/blog/
  • 其它連結除了 trackback 外, 都沒什麼大變動.

所以要處理的簡單列如下, 除了 trackback 外, 基本處理法都可以用同一個 regex 解決:

  • http://blog.pixnet.net/USERNAME/ => http://USERNAME.pixnet.net/blog/
  • http://blog.pixnet.net/USERNAME/post/1234 => http://USERNAME.pixnet.net/blog/post/1234
  • http://blog.pixnet.net/USERNAME/post/1234#article-area => http://USERNAME.pixnet.net/blog/post/1234#article-area
  • http://blog.pixnet.net/USERNAME/category/1234/1 => http://USERNAME.pixnet.net/blog/category/1234/1
  • http://blog.pixnet.net/USERNAME/trackback/1234 => 砍掉(不知道這個為何會進來. XD)

程式(pixnet_conver_url.php)大致如下: (假設有一個 Table url 是記錄 URL 的資訊, 欄位內容是 url_id, url_url)

<?php
$dbh = mysql_connect('localhost', 'root', 'password');

$sql = 'SELECT * FROM url WHERE url_url LIKE "http://blog.pixnet.net/%"'; // 只抓 Pixnet Url
$r = mysql_query($sql, $dbh);
while ($t = mysql_fetch_assoc($r)) {
   preg_match('#http://blog.pixnet.net/(.[^/]+)(.*)?#', $t['url_url'], $match);
   if (preg_match('/\/trackback\//', $match[2])) {
        echo "DELETE FROM url WHERE url_id = {$t['url_id']};\n";
   } else {
        $match[1] = rtrim($match[1], '/');
        $new_url = "http://{$match[1]}.pixnet.net/blog{$match[2]}";
        echo "UPDATE url SET url_url = '$new_url' WHERE url_id = {$t['url_id']};\n";
    }
}
?>

轉換 Database 資料的步驟

  1. 將上述檔案存檔, 修改帳號/密碼, 和 Table 該注意的欄位.
  2. 執行 php pixnet_conver_url.php > new-url.sql
  3. 再次檢查 new-url.sql, 檢查 SQL 語法有沒有異常的東西.
  4. mysql -u root -p DBNAME < new-url.sql
  5. 執行後就完成轉換囉~ 🙂

其它相關網頁

Tsung: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post