こんにちは。今回はちょっと多いです・・・。皆さんからの貴重なフィードバックに対するバグ退治が中心です。他には、これはこれで大事なのですが、このppBlogでのバックアップ形式として、MHTファイルG形式を採用していますが、これを止めました。もともとIEでしか見れなかったし(Firefoxでも大丈夫かな)、そもそもこの形式が個人的にあまり好きでないです。じゃ、なぜこの方式にしたのかというと、数年前の時点で、画像も含めた単一ファイルの生成方法として、小生自身がMHT形式しか知らなかったというのが一番の理由です。画像を含むログは別フォルダを作成してサーバー上でZIP圧縮なりしてダウンロードというのが簡単かなと考えましたが、これだとサーバー依存の部分が大きく汎用性に欠けるかなと。まぁMHT形式も思いっきり汎用性に欠けますが。
というわけで、新しいバックアップ形式ですが、単なるHTMLファイルです。でも、この単一ファイルの中にアップした写真などの画像も含めることが出来ます。仕掛けは、画像に対するソースをbase64形式Gで圧縮してIMGタグ内で呼び出すという方法です。
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABA…" />
スタイルシートなんかの背景画像も同様に呼び出すことが可能です。
foo.style.background = "url('data:image/gif;base64,R0lGODlhCgA…')";
数年前は、このテクニックを知りませんででもマイクロソフトのIEはこれに対応していないと言われています。実際に試したところ、うまく行ったり行かなかったり。その辺りの違いがイマイチつかめませんが、まぁ、それ以外のモダンなブラウザではすべて問題なく表示できるのでバックアップとしては何ら問題ないと思います。で、具体的な実装ですが、HTMLソースの途中に、このエンコードされたデータが入り込むのは(base64データは概して大きい)、著しくソースの可読性を低下させるので、HTMLソースの一番下でJavaScriptで処理するようにしました。なので生成されたHTMLソースを見れば分かりますが、ソースの下に、エンコードされた画像データがずらっと並んでいます。途中に入り込むよりずっと良いです。画像ファイルに対するドロップシャドウも再現していますが、これはブログでの表示とはちょっと変えてGIFファイルでの影にしています。ファイルサイズが小さくて済むからというのが理由です。まぁ、それなりにきれいに見えます あ、ちなみにバックアップファイルとしてのアーカイブは、月毎のログ単位で生成されますが、記事に画像ファイルが含まれていなければ、このエンコードされた画像データが含まれることはありません。
技術的な話ですが、用意した影のためのGIFファイルは、base64エンコードしたデータをPHPのソースに埋め込みましたが、そのまま埋め込むとPHPファイルサイズが大きくなるため、以下のような工夫をしてサイズを抑えています。
var bg = "url(¥'data:image/gif;base64,R0lGODlhCgAKAPcAAO3t7f///z'.str_pad('', 253*4, '09PT').'09PSH5BAEAAAEALAAAAAAKAAoAAAgfAAEEEEhwYACDBQkmRHhwoUKGBSEidGhQ4kOKFgcGBAA7¥')";
つまり、エンコードされた文字列に'09PT'という4文字が繰り返しで253回連続して現れていたので、この部分を
str_pad() 関数で短く纏(まと)めてます。
もっと読む»全く関係ないですが、ヒトのゲノム(DNAの束)を構成している塩基配列には、このような繰り返し配列が山ほどあって、この長さには個人差・人種差があり、これが病気の発症に関係していることもあります。
そろそろ本題に。主な修正点は以下の通り。
- 「続きを読む」が機能していない → lib.jsを修正。
- ページ作成時の画面でJavaScriptエラーが出る → editor.jsを修正。ついでにページ作成画面でもローカルプレビュー出来るようにしました。
- 検索で、記事タイトル語の一部がヒットしたときに、結果リンクが変になるときがある → search.inc.phpを修正。
- トップページ以外からのログインが出来ない場合があるようで、admin.phpでのリンクもフルパスにしました。
- 画像管理画面でページリンクが効かないことへの対処。
- カテゴリー名の修正が効かないことへの対処。
- 静的モードで、画像ギャラリーとタグエントリーの静的化が手つかずでしたが、これも対応させました。
- 上述のように、記事のバックアップ機能の見直し。archives.inc.phpというモジュールが追加になり、従来のmht.inc.phpは不要となります。
- 静的モードに関して、.htaccessの記述の中にApache1.3x系のサーバーが解釈できない正規表現を含んでいたので、その修正。
- あと、使い勝手向上のために、細かいところを修正しています。
例によって差分ファイルと、あと、アーカイブ化したログがどんなHTMLファイルになるのかの具体例として、今月のアーカイブ(4月16日時点)へのリンク を張っておきます。HTMLファイルだと、このようにウェブ上でも公開できるので使い勝手が良いです。ダウンロードして、ローカルで見ても画像がちゃんと再現されると思います(あ、冒頭の記事リンクはウェブ上に行きますね…。後で修正しときます)。
Comments