WordPressの記事をChromeのキャッシュデータから復元する方法

せっかく書いた記事が失われた事ってありませんか??
WordPressでリビジョン機能を有効にしていると復元しやすいのですが、
その反面データベースが肥大化して重くなるというネックがあります。

なので私のサイトではWordPressのリビジョン機能は無効にしているのですが、
とうとうやっちまいました…

Sponsored Link

折角書いた記事がパーになってしまいました。

育児の合間中、記事を書き足し書き足しで書いているので、
前のページに戻ったのを気付かずに書き足して保存してしまったんですね。。

そうなると、保存した時点に戻ってしまって、
書き足した部分丸ごとパーになってしまいました…orz

もう一回書く気力がない…

そう言えばGoogle Chromeのキャッシュ機能を利用すれば、
もしかしたらもしかするかも…と色々調べて、
見事復活させることができました…

もう一回書き足した方が早かったかもしれないと思ったのは秘密だ。

キャッシュデータのチェック

まずはGoogle Chromeに保存されているキャッシュデータのチェックをします。

Google Chromeのアドレスバーにchrome://cache/を入力して、キャッシュの一覧を表示させます。

この時目的のキャッシュデータを如何に探すかがコツです。
欲しいキャッシュされているデータを探す為に、
下記の方法で試してみてください。

いずれもサイトURLと記事IDが鍵となってきます。

私の場合は、
下書きした記事をプレビューして確認していたので、
それが一番確実だろうと思い、
公開前の下書きしてプレビュー記事のURLで探しました。

公開前の下書きしてプレビュー記事のURLを探す方法

http://ドメイン.com/?p=【記事ID】&preview=true

公開後に公開した記事URLを探す方法

http://ドメイン.com/記事URL

管理画面で編集した記事URLを探す方法

http://ドメイン.com/wp-admin/post.php?post=【記事ID】&action=edit

目的のキャッシュデータのURLをクリックすると下記の画像になります。

Chromeのキャッシュデータ例

HTTPレスポンスヘッダー

上部分のHTTPレスポンスヘッダーで下記をチェックする。
コンテンツタイプがtext/htmlになっていることと、
エンコーディングがgzipになっていることを確認します。

Content-Type: text/html; charset=UTF-8
Content-Encoding: gzip

HTTPレスポンスヘッダの例

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 10 Dec 2015 00:29:02 GMT
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
Content-Encoding: gzip

HTTPレスポンスヘッダのバイナリ例

00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  H.......q.......
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  pX..........HTTP
00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  /1.1 200 OK.Serv
00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  er: nginx.Date: 
00000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  Thu, 10 Dec 2015
00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   00:29:02 GMT.Co
00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ntent-Type: text
00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  /html; charset=U
00000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  TF-8.Vary: Accep
00000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  t-Encoding.Expir
000000a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  es: Wed, 11 Jan 
000000b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  1984 05:00:00 GM
000000c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  T.Cache-Control:
000000d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   no-cache, must-
000000e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  revalidate, max-
000000f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  age=0.Pragma: no
00000100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  -cache.Content-E
00000110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ncoding: gzip...
00000120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  .4...J....l...t.
00000130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ....00.00.000.00
00000140: 00 00 00 00 00 00 00 00 00 00 00 00              1...P.......

HTTPレスポンスボディのバイナリ例

00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ...........}kw.G
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ..g.V.CGYAvb.e[.
00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ...03.7..$.3..$.
00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  .%...I.t.0.a-[..
00000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  3@.....@.@0$$...
00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  .....l../..wU.K-
00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  [6..Y........k.~
00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  VW....[.......M.
00000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  3......G*...p`..
00000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  .....?E........9
000000a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ...G.....qY...nN
000000b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ....&S5.J@.h%S)A

目的のデータを抽出する

httpのレスポンスボディの部分のみ全選択してSublime Textにコピペします。

Sublime Textにデータをコピペしてデータを抽出。

ペーストしたデータのうち、00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00の部分のみ矩形選択して、0xEDに貼り付ける。
※Sublime Textで矩形選択する場合はoption + マウスかトラックパットで選択範囲を指定します。

長い場合はいくつかに分けた方が無難です(^_^;)

0xEDのダウンロードページ

0xEDにデータをペースト

行番号のチェック

chromeのキャッシュページのコピペ元の左側の数値を、
一番上と一番下くらいはチェックする。
※これが合わないと正しく復元できないようです。

元データと抽出データのチェック

0xEDに貼り付けたデータを、
拡張子を.gzにして名前をつけて保存します。

更に保存した拡張子.gzのファイルを解凍し、
解凍したファイルを.htmlに名前を変更して表示してみます。

ページが見事復活ヽ(=´▽`=)ノ
HTMLソースを抽出してWordPressの投稿画面に貼り付けて復活です。

WordPressのリビジョン機能を活用する

参考までにWordPressのリビジョン機能を活用する方法も記載しておきます。

WordPressをインストールした直下にある、
wp-config.phpで設定します。

リビジョン機能を有効にする方法

define('WP_POST_REVISIONS', true);

リビジョン機能を無効にする方法

define('WP_POST_REVISIONS', false);

リビジョン機能に回数制限を設定する方法

define('WP_POST_REVISIONS', 5);

リビジョンをコントロールするプラグイン
Revision Control

リビジョンを削除するプラグイン
Better Delete Revision

参考サイト

MacのChromeでキャッシュからファイルを復元するには
削除してしまったはてなブログの記事をMac OS XのChromeのキャッシュからhtmlとして復元する方法

Sponsored Link