2016年2月13日 12:26
category: Web
---
文字数:3253
読む目安: 5分以上

MTにログインできない:syntax error at lib/MT.pm line 482, 〜

ども、どもども。
私、ブログ・CMSプラットフォームのMovable Typeが大好きでして。
北海道のユーザーグループを主宰してそのことを公言する機会が多いと、Movable Typeに関する相談をお受けする機会も増えてきたんです。
例えばうちと同じようなウェブサイトの制作会社さんだったり、フリーランスのデザイナーさんだったり。
ウェブで調べてわかることもありますが、時にはそれだけではなかなか情報がつかめないことあります。

今日はそんな例で、あるエラーを解消した際のお話を。
プログラマーさんなどにしたらごく普通のことかもですが、それ以外の方がウェブ上で検索した際にこの記事を見てくれると良いなと思っております。

では早速。

§ 相談の内容とエラーの状況

ある日、これまで通りMTにログインしようとmt.cgiにアクセスしたら、以下のように表示され、ログインできなくなってしまったというもの。
エラーの内容はこちら。

Got an error: syntax error at lib/MT.pm line 482, near "Carp::confess
"You cannot register multiple plugin objects from a single script. $plugin_sig""
Global symbol "$id" requires explicit package name at lib/MT.pm line 486.
Global symbol "$plugin" requires explicit package name at lib/MT.pm line 486.
Global symbol "$id" requires explicit package name at lib/MT.pm line 486.
Global symbol "$plugin" requires explicit package name at lib/MT.pm line 487.
Global symbol "$plugin" requires explicit package name at lib/MT.pm line 488.
Global symbol "$plugin" requires explicit package name at lib/MT.pm line 489.
Global symbol "$plugin" requires explicit package name at lib/MT.pm line 490.
Global symbol "$plugin" requires explicit package name at lib/MT.pm line 491.
Global symbol "$plugin" requires explicit package name at lib/MT.pm line 492.
Global symbol "$plugin" requires explicit package name at lib/MT.pm line 492.
Global symbol "$plugin" requires explicit package name at lib/MT.pm line 493.
Global symbol "$plugin" requires explicit package name at lib/MT.pm line 495.
Global symbol "$plugin" requires explicit package name at lib/MT.pm line 496.
Global symbol "$plugin" requires explicit package name at lib/MT.pm line 497.
Global symbol "$class" requires explicit package name at lib/MT.pm line 499.
Global symbol "$plugin" requires explicit package name at lib/MT.pm line 502.
syntax error at lib/MT.pm line 504, near "}"
lib/MT.pm has too many errors.
Compilation failed in require at lib/MT/Bootstrap.pm line 60.

上記はMT.pmの482行目付近にプログラムの構文エラーがあるよ(書き方が間違っているよ)という内容。
でもそれまで普通にアクセスできていたし、MT.pmなんて編集することないし、突然間違ってると言われても...ということで、私のところに相談が来ました。

§ 対処方法

まずMTのバージョンを確認。今回のご利用バージョンは4.01でした。
(ログインせずに確認できるの?と聞かれますが、mt-check.cgiにアクセスできるとそこに書いてあります)

そこで、MT.pmの該当箇所を確認。
手元にあったversion4.27のMT.pmとソースコードを比較しました。

ver 4.01

Carp::confess
"You cannot register multiple plugin objects from a single script. $plugin_sig"
      if exists( $Plugins{$plugin_sig} )
      && ( exists $Plugins{$plugin_sig}{object} );

ver 4.27

Carp::confess("You cannot register multiple plugin objects from a single script. $plugin_sig")
      if exists( $Plugins{$plugin_sig} )
      && ( exists $Plugins{$plugin_sig}{object} );

上記のとおり、Carp::confessの後が、4.27では()で囲われているのに対して、4.01ではそれがありません。
エラーになっている環境のMT.pmを上記のとおり、4.27に倣って書き換えることで正常に動作することが確認できました。

§ 原因と思われること

この相談者の方にお話を聞くと「2月某日まではこれまでどおりブログを更新できた」ということがわかりました。
そこで、利用されているサーバーのメンテナンス状況を確認すると...
最後にブログを更新した翌日にシステムメンテナンスが入っていることがわかりました。

おそらくですが、そのタイミングでサーバー側の仕様(Perlのなにか)が変わったのだと思います。
その結果、それまで動作していたコードがより厳格な解釈(いわゆるstrict)の影響でエラーになってしまった、と。
ver 4.27でその部分が改修されていることからも、間違いないと思います。

§ 最後に

今回はver 4.01が正常に動作するまで復旧することができましたが、古いMovable Typeを利用している場合、今後もこのような事態になることは大いに考えられます。
このことからも、細かいメンテナンスをご自身で出来ない場合は、こまめにバージョンアップを行うのが望ましいですね。
MT4及びMT5は既にEOL(End of Life)となっているので、ご利用は計画的に。

Movable Typeでお困りのことがあった際は弊社までご相談ください!