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