SQLiteとEWWW Image Optimizerのエラー対策

この記事は約4分で読めます。

EWWW Image Optimizerは有名なWordPress用の画像圧縮プラグインである。

画像データをPCで加工する場合にはGIMPあたりを使えば良いのは知っているのだが、どうにも高性能すぎて自分には合わない。
もうWindows3.1の頃からペイント(たしか当時はペイントブラシだったが)をメインに使用している。そろそろ30年になるだろうか。。。
高速に起動するし、ペイント以上の機能を使いこなせない。自分に取っては十分な機能だ。

基本的に自分が画像データを扱う場合には、写真はJPEG、色数が少ない物はPNGで保存するのだがペイントは両方とも対応している。
ただWEB上の最新のデータフォーマットとなるとwebpだ。基本的にこの両者より圧縮率は高いためデータ容量は小さい。その代わり古いブラウザでは表示できないし、ペイントもこの形式では保存できない。ただ、ここ10年のPCやスマホならばwebpに対応していない端末は無いだろう。
使用端末に最適な画像サイズのデータを提供して、さらに自動的にwebpに画像変換も行ってくれる便利なプラグインがEWWW Image Optimizerである。その分高速に配信してくれるのだ。しかも古いブラウザには自動的に元のJPEGとPNGで表示してくれる優れものである。

Apacheのエラーログを修正するためにプラグインを独自に修正してみているが、EWWW Image Optimizerについては特段問題も感じておらず、SQLiteでも問題なく動作している物と思い込んでいた。残念ながら他よりエラーが少ないだけで、しっかり毎日エラーを吐き続けていたようである。

結論から書くと、こいつもデータベースのテーブル追加が必要だ。SQLite用の互換テーブル作成用の「CREATE TABLE」を紹介する。

CREATE TABLE wp_ewwwio_images (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  attachment_id INTEGER,
  gallery varchar(10),
  resize varchar(75),
  path text NOT NULL,
  converted text NOT NULL,
  image_size INTEGER,
  orig_size INTEGER,
  backup varchar(100),
  retrieve varchar(100),
  level INTEGER,
  resized_width INTEGER,
  resized_height INTEGER,
  resize_error INTEGER,
  webp_size INTEGER,
  webp_error INTEGER,
  pending INTEGER NOT NULL DEFAULT 0,
  updates INTEGER,
  updated timestamp DEFAULT (datetime(CURRENT_TIMESTAMP,'localtime')),
  trace blob
);

CREATE INDEX path on wp_ewwwio_images (
  path
);

CREATE INDEX attachment_info on wp_ewwwio_images (
  gallery,
  attachment_id
);

エラーの内容は非常に簡単だ。もの凄く簡単なSQLの実行に失敗している。

SELECT * FROM wp_ewwwio_images WHERE path = ‘ABSPATHwp-content/uploads/hogehoge.jpg’

EWWW Image Optimizerは2つのテーブルを必要としていた
wp_ewwwio_images
wp_ewwwio_queue

このうち、「wp_ewwwio_images」が全く作成されていなかった。そりゃ簡単なSQLも失敗する訳である。

common.phpにある「CREATE TABLE」を参考に作ったのが上記である。
はっきり言って、このテーブルが無いのに正しく動いている?のが不思議で仕方が無かった。webpに変換されなかったり、ブラウザの画像がwebpでなければ気がついたであろう。
テーブルを作った後、テーブルwp_ewwwio_imagesにデータを正しく取り込むため、一括最適化で取り込もうとしたがうまく働かなかった。最適化するものが無いとのことで、もしかしたらwebpに変換された画像データを手動で削除する必要があるかもしれない。
こちらについては原因を調べるのが面倒だったので、一つずつ画像を選択して「今すぐ最適化」をすると全データについて正しく互換テーブルに取り込まれた。ついでに「wp_ewwwio_images」の機能を調べて色々動かしてみたが、特に不具合はでなかった。

こちらのプラグインについても、一度テーブルを作成してしまえばデータベースの変更が無い限り更新の必要は無いだろう。

これで「EWWW Image Optimizer」に関するエラーログは無くなった。
毎日3MBあったエラーログは200KB程度まで少なくなった。うーん、まだまだ調査が必要かもしれない。

コメント