PowerCMS XでBLOB型カラムの内容をファイルに書き出すよう設定するとどんな動作になるか
PowerCMS Xのdb-config.php(DB周り)の設定で次のようなものがある。
define( 'PADO_DB_BLOB2FILE', true ); define( 'PADO_DB_BLOBPATH', '/path/to/blob' );
詳しくは次の公式のドキュメントに記載があるが、
コマンドラインツール (toolsディレクトリ配下のスクリプト) | PowerCMS X
内容としては、CMSのDBのにあるBLOB型カラムの値について、DB側で値を持たず外部ファイルに書き出す、というもの。
では、実際設定するとどういう動作になるかを、後述の手順を行いつつ見てみる。
前提
- Rocky Linux 9.5
- PowerCMS X 3.62
- mysql 8.0.40
- Apache 2.4.62
手順と結果
1.
db-config.phpに次の値を設定。
define( 'PADO_DB_BLOB2FILE', true ); define( 'PADO_DB_BLOBPATH', '[CMS本体ディレクトリ]/pado_db_blob2file' );
※PADO_DB_BLOBPATHの値は任意。
2.
CMSの管理画面より、「アセット」に新規画像を登録。
※登録したアセットオブジェクトは以降「アセットA」と呼ぶ。
3.
OSのシェルより、mysqlにログインし、次のコマンドを実行し、アセットAの中身を見てみる。
mysql> use [CMSのDBの識別子];
mysql> select asset_id, cast(asset_file as char) from mt_asset where asset_id = [CMS管理画面側で登録したアセットオブジェクトのID];
すると、次のような結果が出た。
+----------+-------------------------------------------------------------------+ | asset_id | cast(asset_file as char) | +----------+-------------------------------------------------------------------+ | [指定したID] | a:1:{s:8:"basename";s:36:"f9e13838-4e03-4d32-9c64-20b90a74b48a";} | +----------+-------------------------------------------------------------------+ 1 row in set (0.00 sec)
4.
FTP or シェルより、先の手順の [PADO_DB_BLOBPATHで指定したパス]/asset の中身を見る。
結果、1件ファイルが存在した。ファイル名が長いので以降「ファイルB」と呼ぶ。
ls -la 合計 8 drwxr-xr-x 2 apache apache 50 12月 16 16:23 . drwxrwxr-x 5 apache apache 46 12月 16 16:23 .. -rw-r--r-- 1 apache apache 5237 12月 16 16:23 f9e13838-4e03-4d32-9c64-20b90a74b48a
更にfileコマンドでファイルBの種類を確認すると、画像である事が分かる。
file f9e13838-4e03-4d32-9c64-20b90a74b48a f9e13838-4e03-4d32-9c64-20b90a74b48a: JPEG image data, JFIF standard 1.02, aspect ratio, density 1x1, segment length 16, progressive, precision 8, 160x160, components 3
更に先の手順のmysqlのコマンドの結果と、ファイルBのファイル名に「f9e13838-4e03-4d32-9c64-20b90a74b48a」が見られる事から、先のアセットAのカラムasset_fileの内容と、ファイルBのファイル名が関連しているようだ、という事が分かる。
PADO_DB_BLOB2FILE=trueに設定する前に登録したアセットを外部ファイル化する
前述手順の通りdb-config.phpのPADO_DB_BLOB2FILE=trueとした場合において、当該設定をする前に登録したアセットオブジェクトがどうなるかというと、そのまま(BLOB型カラムの値に実体がある)。
これを外部ファイル化するには、先述の公式ドキュメントに記載のあるPADO/convertBlob2File.phpを実行する。
具体的なシェル上での実行例としては、次の通り。
cd [CMS本体ディレクトリ]
sudo -u apache php ./tools/PADO/convertBlob2File.php
これで登録された!