现在的位置: 首页 > IT运维 > 软件开发 > 正文

WordPress保存图片到数据库

2013年03月28日 IT运维, 软件开发 ⁄ 共 1435字 暂无评论 ⁄ 被围观 226+

经历了这次网站空间到期,图片数据完全没法取回的灾难之后,我自己也在总结,以往我总是定期备份数据库内容吗,却忽视了图片文件的备份,有没有好的办法能只备份其中一样就好呢?当然有办法,那就是在上传图片的同时将图片保存到数据库。

首先在数据库中创建新表:

[php]CREATE TABLE `wp_picdatas` (
`pid` bigint(12) unsigned NOT NULL AUTO_INCREMENT,
`filepath` varchar(200) NOT NULL DEFAULT '',
`mimetype` varchar(20) NOT NULL DEFAULT '',
`picdata` mediumblob,
PRIMARY KEY (`pid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8[/php]

然后改动wordpress,我采用的方法是改动wordpress的插件 watermark-reloaded 来实现图片自动插入数据库,因为wordpress系统本身更新的时候我们不得不重新修改代码,而插件只要没有重大安全问题,我完全可以选择不更新这个插件,这样就不用经常重新修改代码了。

修改watermark-reloaded/watermark-reloaded文件,将saveImageFile添加必要的代码,修改后的saveImageFile函数如下:

[php]private function saveImageFile($image, $mime_type, $filepath) {
/**图片插入数据库代码开始**/
global $wpdb,$table_prefix;
ob_start();
switch ($mime_type)
{
case 'image/gif': imagegif($image); break;
case 'image/jpeg': imagejpeg($image, NULL, 100); break; // best quality
case 'image/png': imagepng($image, NULL, 0); break; // no compression
default: echo ''; break;
}
$image2 = ob_get_contents();
ob_end_clean();
$image2=addslashes($image2);
$wpdb->query("INSERT INTO ".$table_prefix."picdatas(`filepath`,`mimetype`,`picdata`) values('$filepath','$mime_type','$image2')");
/**图片插入数据库代码结束**/
switch ( $mime_type ) {
case 'image/jpeg':
return imagejpeg($image, $filepath, apply_filters( 'jpeg_quality', 90 ));
case 'image/png':
return imagepng($image, $filepath);
case 'image/gif':
return imagegif($image, $filepath);
default:
return false;
}
}[/php]

OK,将wordpress上传图片存入数据库的代码完成,以后只需要备份数据库就好,当然备份数据库的时间也会大大增加。至于恢复数据库时要用的php代码大家可以自己写。回头有空时我也会追加上。

给我留言

您必须 [ 登录 ] 才能发表留言!

×
#