PowerCMS™

12月12日東京、12月19日大阪にて PowerCMS X 製品発表会を開催いたします。大阪会場はお席に余裕がございます。

PowerCMS ブログ

ホーム > PowerCMS ブログ

たいへんありがたいことに「PowerCMS をお客様に提案したいので、機能要件を満たしているか一覧表を確認してほしい」というご連絡をよくいただきます。

お客様が自社のウェブサイトや、導入する CMS の管理画面にほしい機能が「標準」であるかどうか、カスタマイズすれば実現可能かどうかといった項目がズラリと並び、○や×をつけていく一覧表のことです。自治体・公的機関のウェブサイトリニューアルのプロポーザルや、民間企業のコンペ等で CMS 導入が含まれているものに関わったことのある方なら、見たことがあると思います。

お問い合わせをいただくタイミングや要件表のボリュームによっては、回答までに数日〜1週間程度お時間をちょうだいすることもありますので、早めにご連絡いただけると非常にありがたいのですが、もうひとつ、分かる範囲で構いませんので先にある程度埋めていただくことをお願いしております。ぜひともご協力をよろしくお願いいたします。

そこで、「CMS機能要件表」をある程度埋めておくために必要な情報が記載されているページや、ヒントになるような「よくあるご質問」のページをピックアップいたします。

これらをご一読いただき、我々と一緒に 「CMS機能要件表」を埋めていきましょう。

基本的な情報

PowerCMS の機能

PowerCMS が持つ、標準機能について記載しています。
たとえば要件に「ワープロソフトのような WYSIWYG インターフェース」とあれば、「リッチテキストエディタ」のページが該当します。

動作環境

CMS サーバーの動作環境、管理画面を利用するエンドユーザーの動作環境について書かれています。

よくあるご質問(FAQ)から抜粋

要件に含まれていることが多いものをピックアップしました。ぜひご一読ください。

要件が満たせない、そんなときは?

案件固有のご事情やご要望があり、PowerCMS の標準機能では○がつけられない場合があります。その場合は、カスタマイズによる実現可否を検討し、ご要望に応じて概算見積りをいたします。概算見積りをご希望の場合も、なるべくお早めにお知らせいただけると助かります。

ただし、この時点でのお見積りについては要件が不明瞭なことが多いため、精度の高い数字をお出しすることは困難であることをご了承ください。

デモへの同行、提案の支援も行なっています

クライアント先でのデモへの同行、プレゼンテーションを代わりに行うなど、提案支援を積極的に行なっています。早めにご連絡いただければ全国どこへでもお伺いしますので、ぜひ、お問い合わせください。

参考:ウェブ制作会社様、システム開発会社様のコンペ、提案、公共機関へのプロポーザル案件における CMS のデモンストレーションサポートを行ないます
https://www.powercms.jp/blog/2018/07/accompany.html

カテゴリー
PowerCMS 5その他サポート

『エスケープ処理を行うモディファイアが変換対象としている文字の一覧はありますか?』という趣旨のお問い合わせを弊社製品サポート宛てにいただきましたので、PowerCMS で利用可能なエスケープ処理を施すモディファイアの置換対象となる文字をご紹介いたします。

※ 各モディファイアの使い方につきましては、それぞれのリファレンスを参照してください。

encode_html
1 を設定すると、テンプレートタグの値が HTML エンコードされます。
encode_json
テンプレートタグの出力結果を JSON として扱えるようにエスケープします。
encode_js
1 に設定すると、テンプレートタグの値が javascript の文字列の値として使えるようにエンコードします。
encode_php
PHP コード内でデータを使えるようにテンプレートタグの出力をエンコードします。
encode_url
1 を設定すると、URL での利用に合わせたフォーマットに、テンプレートタグの値をエンコードします。アルファベット以外の文字を 16 進数ベースのものに変換します。
encode_xml
1 に設定すると、XMLフォーマットに適した形式にエンコードします。データがHTML要素やタグを含んでいる場合、CDATAブロックで囲んで出力します。

encode_html モディファイアによる変換

環境変数 NoHTMLEntities の値によって動作がかわります。

NoHTMLEntities が 0 の場合 (初期値)

encode_html によるエスケープ対象の一部
対象文字 変換後
< &lt;
> &gt;
& &amp;
" &quot;
' &#039;

& は実体参照の場合には変換対象外となります。

NoHTMLEntities が 1 の場合

HTML::Entities モジュールの encode_entities メソッドを利用して変換を行います。encode_entities メソッドの詳細についてはリファレンスを参照してください。

encode_json モディファイアによる変換

JSON モジュールの to_json メソッドを利用して変換を行います。to_json メソッドの詳細についてはリファレンスを参照してください。

encode_js モディファイア モディファイアによる変換

encode_js によるエスケープ対象
対象文字 変換後
" \"
\ \\
> \>
< \<
script s\cript
</ <\/
' \'
改行 \n
キャリッジリターン \r
タブ \t
Null文字 \0
改ページ \f

encode_php モディファイアによる変換

encode_php の仕様につきましてはリファレンスを参照してください。

encode_php におけるエスケープ対象の一部
対象文字 変換後
' \'
\ \\
$ \$
改行 \n
キャリッジリターン \r
タブ \t

encode_url モディファイアによる変換

文字コードを16進数に変換した値にゼロパディングを施して先頭に % を付与します。

encode_url におけるエスケープ対象の一部
対象文字 変換後
< %3C
> %3E
' %27
" %22
& %26
/ %2F
\ %5C
$ %24
? %3F

encode_xml モディファイアによる変換

環境変数 NoCDATA の値によって動作がかわります。

encode_xml によるエスケープ対象の一部
対象文字 変換後
※HTML・テンプレートタグ※ <![CDATA[※HTML・テンプレートタグ※]]>
カテゴリー
テンプレート作成Tips

MySQL サーバーの root パスワードがわからない! もうパスワードを再設定するしかない。

パスワードを再設定するには MySQL サーバーを再起動する必要があります。 でも、PowerCMS でサイト内検索機能や会員サイト機能、DynamicMTML などの動的な機能を利用している場合は、MySQL サーバーを停止したり再起動したりすれば、同時にそれらの動的機能が機能しなくなり、障害となります。 今回は、一時的にメンテナンス表示に切り替えてから、MySQL サーバーを再起動して、できるだけ短時間でメンテナンス表示を解除する手順を考えます。 前提は次の通りで、これらの前提から外れる部分は手直しや工夫が必要です。

  1. RHEL 7 や CentOS 7、Amazon Linux 2 などの Systemd で管理する Red Hat 系の Linux OS。
  2. root ユーザーによるシェル操作。
  3. MySQL 5.7.6 以降。
  4. MySQL サーバー (mysqld) が同居している。
  5. Web サーバーとして rewrite モジュールが有効な Apache HTTP サーバー 2.4 (httpd)。
  6. PowerCMS で管理しているすべてのサイトのバーチャルホストは /var/www/example.jp/html のように、/var/www 配下にまとまっている。
  7. DynamicMTML を使用している。
  8. PSGI や CGI (mt-*.cgi) は非公開。
  9. CMS 管理画面 (mt.cgi) は関係者にメンテナンスを周知して利用を控えてもらうか、httpd 設定でアクセスを拒否しておく。

メンテナンス設定の準備

まず、メンテナンス表示用の HTML を用意します。 既存サイトのデザインを継承し、リッチで違和感のないメンテナンスページを用意してもよいですが、CMS の管理下にあるバーチャルホストの数が多いと、それぞれの HTML ファイルを作成して配置したり、事前確認などもなかなか大変です。 今回の再起動の所要時間は数秒から長くても数十秒ほどの想定なので、扱いやすい簡易な1行 HTML の、簡素なメンテナンス表示で済ませます。 httpd の ErrorDocument ディレクティブを、次のような感じで用意します。

ErrorDocument ディレクティブの下書き
ErrorDocument 503 "<!DOCTYPE html><meta charset=UTF-8><title>一時メンテナンス中</title><p>メンテナンスのため12時34分までの予定でご利用いただけません。ご迷惑をおかけいたしますが、ご理解の程よろしくお願い申し上げます。"

しかし、httpd 2.4 では ErrorDocument ディレクティブに HTML を記述した場合、文字エンコーディングが ISO-8859-1 に強制されますので、このように ISO-8859-1 の範囲外の日本語などを記述するとメンテナンスページが文字化けしてしまいます。 httpd の環境変数「suppress-error-charsetを設定するとこれを回避できますが、デメリットがあったり、httpd の再起動が必要だったりして面倒で、目標とする短時間メンテナンスを阻害するので、次のように ISO-8859-1 のまま文字参照でマルチバイト文字を記述します。 そして、rewrite モジュールで HTTP ステータス503のエラーページに書き換え、機械向けに Retry-After ヘッダーを追加します。

メンテナンス表示用に追加する httpd 設定
ErrorDocument 503 "<!DOCTYPE html><meta charset=ISO-8859-1><title>&#x4E00;&#x6642;&#x30E1;&#x30F3;&#x30C6;&#x30CA;&#x30F3;&#x30B9;&#x4E2D;</title><p>&#x30E1;&#x30F3;&#x30C6;&#x30CA;&#x30F3;&#x30B9;&#x306E;&#x305F;&#x3081;12&#x6642;34&#x5206;&#x307E;&#x3067;&#x306E;&#x4E88;&#x5B9A;&#x3067;&#x3054;&#x5229;&#x7528;&#x3044;&#x305F;&#x3060;&#x3051;&#x307E;&#x305B;&#x3093;&#x3002;&#x3054;&#x8FF7;&#x60D1;&#x3092;&#x304A;&#x304B;&#x3051;&#x3044;&#x305F;&#x3057;&#x307E;&#x3059;&#x304C;&#x3001;&#x3054;&#x7406;&#x89E3;&#x306E;&#x7A0B;&#x3088;&#x308D;&#x3057;&#x304F;&#x304A;&#x9858;&#x3044;&#x7533;&#x3057;&#x4E0A;&#x3052;&#x307E;&#x3059;&#x3002;"
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !\.(png|jpe?g|gif|css|js(on)?|xml|atom)$ [NC]
RewriteRule ^ - [R=503,L]
Header always set Retry-After "Thu, 15 Nov 2018 03:34:00 GMT"

実行

これを /var/www 配下にある分散設定ファイル (いわゆる .htaccess) に対して一斉に追記してメンテナンス表示に切り替えます。 事前に分散設定ファイルをコピーしてバックアップしておき、設定を追記、MySQL サーバーを再起動して root パスワードを再設定、分散設定ファイルをバックアップから復旧して完了です。 この例では「New-Password-0123」というパスワードを再設定しているので、このあと落ち着いたら root ユーザーで接続して、必ずパスワードを更新し直してください。

Systemd の場合 (RHEL 7、Oracle Linux 7、CentOS 7、Amazon Linux 2)
[root]# _YMDHMS=$(date +%Y%m%d) &&
find /var/www -name .htaccess -type f -exec /bin/cp -av {}{,~$_YMDHMS} \; &&
find /var/www -name .htaccess -type f -exec sed -i '1s/^/ErrorDocument 503 "<!DOCTYPE html><meta charset=ISO-8859-1><title>\&#x4E00;\&#x6642;\&#x30E1;\&#x30F3;\&#x30C6;\&#x30CA;\&#x30F3;\&#x30B9;\&#x4E2D;<\/title><p>\&#x30E1;\&#x30F3;\&#x30C6;\&#x30CA;\&#x30F3;\&#x30B9;\&#x306E;\&#x305F;\&#x3081;12\&#x6642;34\&#x5206;\&#x307E;\&#x3067;\&#x306E;\&#x4E88;\&#x5B9A;\&#x3067;\&#x3054;\&#x5229;\&#x7528;\&#x3044;\&#x305F;\&#x3060;\&#x3051;\&#x307E;\&#x305B;\&#x3093;\&#x3002;\&#x3054;\&#x8FF7;\&#x60D1;\&#x3092;\&#x304A;\&#x304B;\&#x3051;\&#x3044;\&#x305F;\&#x3057;\&#x307E;\&#x3059;\&#x304C;\&#x3001;\&#x3054;\&#x7406;\&#x89E3;\&#x306E;\&#x7A0B;\&#x3088;\&#x308D;\&#x3057;\&#x304F;\&#x304A;\&#x9858;\&#x3044;\&#x7533;\&#x3057;\&#x4E0A;\&#x3052;\&#x307E;\&#x3059;\&#x3002;"\nRewriteEngine On\nRewriteCond %{REQUEST_FILENAME} !\\.(gif|png|jpe?g|css|js|xml)$ [NC]\nRewriteRule ^ - [R=503,L]\nHeader always set Retry-After "Thu, 15 Nov 2018 03:34:00 GMT"\n/' {} \; &&
_MYSQLD_INIT_FILE=/var/tmp/mysqld-init.sql &&
echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'New-Password-0123';" > $_MYSQLD_INIT_FILE &&
systemctl set-environment MYSQLD_OPTS="--init-file=$_MYSQLD_INIT_FILE" &&
systemctl restart mysqld.service &&
find /var/www -name .htaccess~$_YMDHMS -exec bash -c '/bin/mv -v "$1" "${1%\~'$_YMDHMS'}"' _ {} \; &&
systemctl unset-environment MYSQLD_OPTS &&
/bin/rm $_MYSQLD_INIT_FILE

起動管理が Upstart の場合 (RHEL 6、CentOS 6、Amazon Linux) は一時的に /etc/rc.d/init.d/mysqld を書き換えてから systemctl ではなく service を使うなど、違いがあります。 また、MySQL サーバーのバージョン (5.1や5.5、5.6、5.7.5 未満) によっても、user テーブルのカラム構造や利用可能な関数など、再設定の方法にいくつかパターンがあります。

メンテナンススクリプト作成器

文字の変換や日時の RFC 1123 変換など、それなりに面倒なので簡易な作成器を用意しました。手直しして十分に予行と検証をしてご利用ください。

<title>
メンテナンス文章
終了予定日時
MySQL root パスワード
シェルスクリプト
[root]# _

さいごに

MySQL サーバーで管理しているデータベースの規模や my.cnf の設定、サーバーの性能などによりますが、おそらく再起動は数秒で終わるはずなので、一瞬のダウンがあっても許容できる場合は、メンテナンス表示せず再起動という判断もあるかと思います。 本当に瞬断も許されない場合は「$datadir/mysql/user.* を差し替えて SIGHUP を送る」という荒業でも root を復旧できますが、いずれにしても失敗しないよう複製環境を用意して、十分に予行することをお勧めします。

さあ帰ろう。

カテゴリー
技術情報