zonble’s promptbook

2006 年 7 月 2 日

我的電腦 再談 WordPress 2.0 的照片管理

WordPress 2.0 的照片上傳功能有一個地方實在頂鳥的。

如果您用了 WordPress 2.0 所提供的照片上傳功能、上傳照片,那麼,系統除了將你的照片放在遠端主機上之外,同時也會在資料庫中建立這張照片的相關詮釋資料(metadata),其中包括照片的長寬尺寸、以及這張照片在遠端磁碟中的絕對路徑位置;例如,如果您將上傳目錄放在 /home/zonble/www/wp-contents/upload,而您在 2006 年七月間上傳了一張 mypic.jpg 的圖片,那麼資料庫中,就會紀錄上一筆/home/zonble/www/wp-contents/upload/2006/07/mypic.jpg,而這就是麻煩的地方了—如果說改了 WP 的安裝目錄(例如搬到別的機器上、換了帳號…),WP 並不會同時修改過去已經記錄下來的圖片絕對路徑資料。

WP 2.0 會使用圖片絕對路徑資料的地方,包括編輯區的圖片列表等—對,就是那個你可以直接將圖片拖拉到編輯區 WYSIWYG 編輯文章的圖片列表。WP 會先檢查圖片是否放在原來的地方,檢查是不是也有製作縮圖,如果沒有,圖片在列表中就出不來;所以,如果改過了安裝路徑,那也就有必要自己動手改一下資料庫裡頭的東西,把路徑給改掉,於是,又遇到一個麻煩的地方—因為 WP 2.0 是先將資料 serialize 過,才塞進資料庫裡,所以,如果要改這個絕對路徑資料,也就需要先將原本的資料 unserialize,改過,再 serialize 一次,塞回資料庫。

所以大概是這樣,如果原本的安裝路徑位在 /path/to/original/folder,後來班到了 /path/to/new/folder,那麼,請寫一個小 php 檔案,放在 WP 安裝根目錄下,內容如下。寫得亂七八糟,不過能用就是了:

<?
require('./wp-blog-header.php');
$request = "SELECT * FROM $wpdb->postmeta";
$posts = $wpdb->get_results($request);
foreach ($posts as $post) {
$meta_value = $post->meta_value;
$meta_id = $post->meta_id;
if(strstr($meta_value, "/path/to/original/folder")) {
$z = unserialize($meta_value);
if($z) {
print_r($z);
$z['file'] = str_replace("/path/to/original/folder", "/path/to/new/folder", $z['file']);
$a = "";
$a = serialize($z);
$a = str_replace('\", '\\\", $a);
echo $a . "\n";
$cmd = "UPDATE $wpdb->postmeta SET meta_value = '$a' WHERE meta_id= '$meta_id'";
echo $cmd."\n\n";
$wpdb->query($cmd);
} else {
$str = "";
$str = str_replace("/path/to/original/folder", "/path/to/new/folder", $meta_value);
$str = str_replace('\", '\\\", $str);
echo $meta_id .".". $meta_value."->".$str."\n";
$cmd = "UPDATE $wpdb->postmeta SET meta_value = '$str' WHERE meta_id= '$meta_id'";
echo $cmd."\n\n";
$wpdb->query($cmd);
}
}
}
?>

然後,跑一下這個小程式。

文章分類: — zonble @ 11:35 pm #

6 項留言回應 »

  1. 改用Gallery2 & WPG2 plug-in?? (^^”不過這樣就要架整個Gallery2環境…&設公開權限之類的) m~ 目前自己是這樣設定的~ 改網址之類的也相當方便~

    來自 JellyCatz果凍喵 的 迴響留言 — 2006 年 7 月 3 日 @ 2:08 am

  2. [...]   再談 WordPress 2.0 的照片管理,zonble的新作,不容错过。 相关阅读:WordPress 2.0 的照片管理 [...]

    來自 BloggingPro China » Blog Archive » 再談 WordPress 2.0 的照片管理 的 Pingback — 2006 年 7 月 3 日 @ 11:26 am

  3. 我的空间比较小,照片都是放在flickr上面的,所以也就不用担忧这个了,:)

    來自 天方 的 迴響留言 — 2006 年 7 月 17 日 @ 1:16 pm

  4. 對不起 不知道發在這邊對不對….
    我是blog新手.想把gallery2和wordpress結合在一起,在安裝WPG2時
    他要求要安裝像netPBM類的模組
    我到gallery2的siteamdin網頁上安裝時模組
    需要填入NetPBM 目錄,還說要先把NetPBM安裝在伺服器內
    於是我下載他的binary檔案再上傳到wordpress/gallery2/netpbm這裡
    可以填入路徑時不斷出現問題,”你輸入的路徑不正確”
    啊˙啊 到底該怎麼辦呢?
    請問您這樣有把Netpbm安裝在伺服器上嘛?
    我該怎麼輸入路徑呢?
    懇請您幫忙 我快瘋了
    ……

    來自 nimmh 的 迴響留言 — 2006 年 8 月 10 日 @ 6:29 pm

  5. 我都直接裝 php4 的 GD Library …。

    來自 zonble 的 迴響留言 — 2006 年 8 月 10 日 @ 11:09 pm

  6. 請問這支小程式的檔案名稱是隨便取嗎?

    謝謝

    來自 evenx25 的 迴響留言 — 2006 年 11 月 7 日 @ 6:44 pm

留言回應

XHTML: 您可以使用的 HTML 語法如下: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


Powered by WordPress 2.6.2, Yichi.org,
ideas and cares
.

Weizhong Yang(a.k.a zonble)
Email:zonble@gmail.com
AIM: zonble@man.com