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

WordPress保存图片到数据库

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

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

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

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

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

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

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

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

给我留言

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

×
#