8

记录一次囧客圈灾难的恢复过程

 2 years ago
source link: https://yjyj.net/what/1702.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

记录一次囧客圈灾难的恢复过程

2012-11-18

一切都源自于折腾.哥这就属于自找苦吃的经典类型.
一直想要让囧客圈在pv上增加些流量,哥想尽了各种办法,差点就要无耻的使用wordpress文章分页了,但是苦于技术不到位,没办法简化更新流程,就只好苦逼的还是继续每篇发1张图,自己都快把自己恶心死了...
直到跟老婆发微信玩的时候无意中点中一篇上古时期更新的内容,突然发现当时不小心使用了图片附件的形式,于是每张图片都会被引导至一个单独的附件页面,然后再显示全图.这简直就是哥理想中的需求!无耻淫荡的靠增加点击来增加pv!
二话不说哥立刻开始写附件模板,一切看起来很顺利,哥想象着囧客圈驾着七彩祥云大赚pv,但是没想到哥猜中了开头,缺没猜中结尾,悲剧马上来临!飞快的调试好之后,又飞快的替换了模板文件,哥正高兴的准备多浏览几篇试试看的时候,蛋疼终于降临了,除了个别文章外 大部分内容都拉取不到任何信息,这简直就是要我小命,研究一番发现原来是使用牧风的ajax上传的图片都无法实现,究其原因竟然是图片文件并未与文章关联,于是就无法使用wordpress的相册功能调用出来,真tnnd苦逼啊,自从换了瀑布流以来,哥已经连续更新了2000+内容了,难不成要我放弃,但是哥真的很喜欢pv大增的感觉!
蛋疼中跑去后台找插件看看能否有什么解决办法,老婆保佑还真让哥挖了出来:

0.使用一个叫 Add From Server 的插件,将服务器上已经上传的图片文件拉入媒体库

1.这时文件还都是未附加的状态,这里卡了哥一下,使用另外一个插件(实在垃圾,就不在这里说了省得有类似需求的朋友会走弯路)导入后,我只有3k+的附件翻了一番,无奈放弃,这里要感谢对岸台湾同胞的牛人.翻墙找到了解决办法:


最後一步就是搜尋你Blog Post中含有那個圖片,再把圖片關聯至post id。
PHP的程式如下,大家看我惡劣的英文Comment大概都可了解是做什麼:

<?php
require_once ('wp-config.php');
require_once ('wp-admin/includes/admin.php');
require_once ('wp-includes/functions.php');

$server = DB_HOST;
$username = DB_USER;
$password = DB_PASSWORD;
$dbname = DB_NAME;
$url = get_bloginfo('url');

mysql_connect($server, $username, $password) or die(mysql_error());
mysql_select_db($dbname) or die(mysql_error());

//find out all attachment records which is no parent post.
$sql = "SELECT ID, guid FROM `wp_posts` WHERE `post_type` = 'attachment' AND post_parent=0";
$attachment_post = mysql_query($sql);

while ($rows = mysql_fetch_assoc($attachment_post)) {
 //$guid is the relative or absolute URL of images.
 $guid = str_replace($url, '', $rows['guid']);

 //find the first post , where post content contain the $guid (image url).
 //Due to WordPress's limitation, one media only can recognize to one post/page's ID.
 //If more than one Post/Page has use the media, WordPress will retain the first ID to media.
 $sql = "SELECT ID FROM `wp_posts` 
    WHERE post_content LIKE '%" . mysql_real_escape_string($guid) . "%' 
    AND post_type in ('post','page','template') 
    ORDER BY `post_date` desc,`post_modified` desc 
    LIMIT 1";

 $match_post = mysql_fetch_assoc(mysql_query($sql));

 //Update the attachment's post_parent to related post/page ID.
 $sql = "UPDATE `wp_posts` SET post_parent='" . $match_post['ID'] . "' 
    WHERE ID=" . $rows['ID'] . " LIMIT 1";

 mysql_query($sql);
}
echo 'Done!';
mysql_close();
?>

以上的DB_HOST/DB_USER/DB_PASSWORD/DB_NAME不用刻意更改,因為會自動取自wp-config.php,把程式碼儲存至一個php檔案放在你WordPress的root資料夾,運行就可以,緊記完成後把那個php檔案刪除。

运行之后问题解决了,大部分图片都乖乖的关联到文章附件中,只剩171张以后慢慢搞起
有人问悲剧在哪里?
哥真的就擦了,一切搞完以为可以安心的时候...真正的灾难来了...因为我使用了 Auto_Save_Image 这个插件,又蛋疼的给它加上了自动打水印功能,于是每一张gif图片都被打上了水印变成单帧,整整262张!加起来300+MB的gif啊!!!
悲剧的是哥更新完还顺手把已经更新的图片文件删除掉了!!!
真是苦逼,这感觉比老婆孕吐还要难受.
还好哥一直坚持同步腾讯跟新浪微博,靠着它们拯救回来了60+张.剩下的联系idc看看是否有备份.
如果实在不行,就只能苦逼的用google的查找相似图片功能再下载下来,打水印,该名称,上传了......
哥真想哭...


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK