旧バージョンのMTでPerl5.26(Perl5.24以降)に対応する方法

June 30,2022 11:55 PM
Category:[トラブルシューティング]
Tag:[MovableType, TroubleShooting]
Permalink

旧バージョンのMTでPerl5.26(Perl5.24以降)に対応する方法を紹介します。

一部MTQで私が回答したものですが、こちらにまとめておきます。

1.問題点

旧バージョンのMT(ここではMT5.2)をPerl5.26の環境で実行すると、

Unescaped left brace in regex is illegal here in regex; marked by <-- HERE in m/%s/

それから、

Got an error: \C no longer supported in regex; marked by <-- HERE in m/(\ <-- HERE C)/

というエラーが発生するようです。

2.原因

Perl公式マニュアルに下記の説明がありましたので引用します。

まず5.26.1の記載です。先頭の(F)は「致命的なエラー」を示します。

Unescaped left brace in regex is illegal here in regex; marked by <-- HERE in m/%s/
 
(F) 正規表現中で リテラルな "{" 文字 (U+007B LEFT CURLY BRACKET) にマッチングしたいときに 覚えておくべき単純な規則は、何らかの方法で それぞれのリテラルな実体をエスケープすることです。 一般的に一番簡単なのは、"\{" のように逆スラッシュを前置するか、 かっこでかこむ ("[{]") ことです。. パターン区切り文字も中かっこの場合、マッチングする右中かっこ ("}") も、パーサーの混乱を避けるためにエスケープするべきです; 例えば:
 
     qr{abc\{def\}ghi}
 
リテラルな "{" 文字にエスケープを強制することにより、 将来のリリースで様々な方法で Perl 言語を拡張できるようになります。 既存のコードを不必要に壊すことを避けるために、 拡張が "{" をリテラルとして使うことと競合しそうにない文脈では 制限は強制されません。
 
このリリースの Perl では、"{" のリテラルな使用法の一部は致命的エラーで、 一部は単に廃止予定です。 これは見落としによるものです: v5.20 から廃止予定警告をだすべきだった リテラルな "{" の使用法の一部は v5.26 まで警告されていませんでした。 すでに警告されていた使用法を今致命的エラーにすることで、 言語に計画されていた拡張の一部をより早く実行できます。
 
警告やエラーが出ない文脈は:
 
  パターンの最初の文字、あるいは行頭にマッチングすることを示す "^" に引き続いている場合。
  代替を示す "|" に引き続く最初の文字の場合。
  次のようなかっこ付きグループの最初の文字の場合:
     /foo({bar)/
     /foo(?:{bar)/
  量指定子に引き続く最初の文字の場合
     /\s*{/

要するに、正規表現で左カーリーブラケットを文字列として利用する場合は、一部の場合を除いてエスケープが必要になるようです。

次に5.24.1の記載です。

\C no longer supported in regex; marked by <-- HERE in m/%s/
 
(F) \C 文字クラスは、複数バイトの UTF8 文字の単一のバイトに マッチングできるようにしていましたが、 カプセル化を壊し、その実装が極めてバグっぽいので、v5.24 で削除されました。 本当に個々のバイトを処理する必要があるなら、 おそらくその文字列を、utf8::encode() を使って、 元となっているバイトそれぞれを文字として保持する文字列に変換した方が 良いでしょう。

要するに、Perl5.26(厳密には5.24)では正規表現で"\C"が使えなくなったようです。5.22までは\Cは使えるようです。

3.対処

1つめのエラーについて、lib/MT/App/CMS.pmの下記の部分を書き換えます。MTバージョンによって行番号が異なるかもしれません。

4828行目

変更前

$css =~ s#{{support}}/?#$app->support_directory_url#ie;

変更後

$css =~ s#\{\{support}}/?#$app->support_directory_url#ie;

4830行目

変更前

$css =~ s#{{theme_static}}/?#$theme->static_file_url#ie;

変更後

$css =~ s#\{\{theme_static}}/?#$theme->static_file_url#ie;

1つめのエラーについて、extlib/URI/Escape.pmの下記の部分を書き換えます。

変更前

sub escape_char {
    return join '', @URI::Escape::escapes{$_[0] =~ /(\C)/g};
}

変更後

sub escape_char {
    # Old versions of utf8::is_utf8() didn't properly handle magical vars (e.g. $1).
    # The following forces a fetch to occur beforehand.
    my $dummy = substr($_[0], 0, 0);
 
    if (utf8::is_utf8($_[0])) {
        my $s = shift;
        utf8::encode($s);
        unshift(@_, $s);
    }
 
    return join '', @URI::Escape::escapes{split //, $_[0]};
}

なお、動作を保証するものではありませんので、個人の責任で行ってください。

4,参考サイト

Comments [0] | Trackbacks [0]

LinuxでOSキャッシュをクリアする方法

June 14,2022 11:55 PM
Category:[Linux]
Tag:[Linux]
Permalink

LinuxでOSキャッシュをクリアする方法を紹介します。

1.問題点

仕事で「OSキャッシュをクリアしてください」と依頼がありましたが、方法がわかりません。

ということで、LinuxでOSキャッシュをクリアする方法を紹介します。

2.OSキャッシュをクリアする

OSキャッシュをクリアするには、下記のコマンドを実行します。

# echo 3 > /proc/sys/vm/drop_caches

要するに、/proc/sys/vm/drop_cachesというファイルに数値を設定するだけです。

設定する数値は1~3で、各数値の意味は次の通りです。

  • 1:ページキャッシュ
  • 2:slab領域(kernelがdentry等をキャッシュするために使うメモリ領域)
  • 3:両方

3.クリアされたキャッシュを確認する

キャッシュはfreeコマンドで確認できます。

$ free
             total       used       free     shared    buffers     cached
Mem:       1019780     860036     159744        104     261412     241728
-/+ buffers/cache:     356896     662884
Swap:      2097148     152052    1945096
Comments [0] | Trackbacks [0]

サイトの不具合について(2022/6/9解決済)

June 10,2022 11:55 PM
Category:[blog]
Tag:[blog]
Permalink

サイト「小粋空間」で発生した不具合について報告します。2022/6/9解決済です。

1.発見の経緯

グーグルで自分のサイトが表示されるテキストで検索してみたところ、検索結果に表示されなくなりました。

直接そのページのURLで表示させたところ、トップページが表示されました(リダイレクトされていることに気が付いたのは少しあとで、発見当時は違うページが表示されていると勘違いしていました)。

サーバびログインして調べてみたところ、該当ファイルが消えていることが分かりました、

念のため、他のファイルも調べたところ、全体の2/3以上のファイル、約数千ページが消えていることが分かりました、

後述しますが、アクセスできなかった期間は約1ヶ月と思われます。

ということで、今回の事象でご不便おかけしましたこと、この場をお借りして深くお詫び申し上げます。

2.原因

原因は不明です。

なお、4月末期限のSSLを更新忘れ、GWW明けに気が付くまでにページのアクセスが一旦なくなり、SSL更新でアクセスが復活したと思ったのですが、アナリティクスでチェックしたところ、その後もアクセスが復活していませんでした。

おそらくGW中にファイルが削除されたものと推測されます。

3.対処

関連のパスワードを変更しました。

また、すべてのアーカイブを再構築し、ファイルをすべて復旧致しました。

さらに、トップページのリダイレクトが行われたことで、ファイルが消えていることに気がつくのが遅れたため、.htaccessの設定を下記のように変更しました(抜粋)。

変更前

RewriteRule . index.php [L]

変更後

RewriteRule ^.*$ - [NC,R=404,L]

4.表示が崩れている場合

初期の調査中にページが二重に重なって表示される事象が発生しました。

もし同様の事象になっている場合は、ブラウザの強制リロードを行ってください。

Comments [0] | Trackbacks [0]
 1  |  2  |  3  |  4  |  5  | All pages