WebbingStudio

予約投稿時にPerlの文法エラーが表示される

0

こんにちは。
Movable Typeの「公開キュー」を利用して記事の公開予約をすると、以下のようなエラー文が表示されます。
公開処理は正しく行われているようです。

----

Use of uninitialized value in numeric gt (>) at /home/path/to/mt/tools/../lib/MT/Template/Tags/Asset.pm line 1179.
(以下同じエラーが延々と続き、たまに以下のエラーが混ざる)
libpng warning: Interlace handling should be turned on when using png_read_image

----

「Use of uninitialized value...」については、「この変数は数値を行っているのに、初期値が数値で指定されていない」という、Perlの厳格な文法エラーであることまではわかりました。

また「libpng warning: Interlace...」ですが、エックスサーバーではImage::Magickを使用できないため、画像ライブラリをGDにしていることに関係するエラーかもしれません。

https://qiita.com/webbingstudio@github/items/c374a4856411f48d7a2c

サーバー番号が2000番台以降の、比較的新しいサーバーで発生するようです。

PHP7バージョン: 7.1.4
MySQLバージョン: 5.7.x
Perlバージョン: 5.16

コアの修正で可能であればこのエラーを回避したいのですが、どのようにすれば良いのでしょうか。

返信(9)

| 返信する
  • 最新バージョンを全くキャッチアップできていないのでFYI

    自分の場合、エラー処理が超適当なプラグインを導入した環境で公開予約をすると、MT::Util において Use of uninitialized value... の warning が Apache ログに記録されたことがあります。そして問題のプラグインを外すと MT:Util 内で発生していた warning が消えました。プラグインの問題にも関わらず、です。

    可能性として、何か行儀の悪いプラグインが warning の引き金になっていることも考えられそうですね。

  • ありがとうございます!
    プラグインの可能性を失念しておりました。

    パブリッシングに関係しているプラグインを停止して試すことになりますね。
    ちょっと時間がかかりそうですが、ひとつずつ見てみます…!

  • >WebbingStudioさん
    こんにちは。

    Movable Typeのバージョンはいくつでしょうか?

  • @藤本さん

    MTバージョンは、6.3.6です。

  • インストールしているプラグインは以下の通りです。
    SimilarEntriesは以前使用していましたが、再構築の対象にはなっていません。
    compress modifierは不具合が出た時点ではインストールしていなかったため関係なさそうです、

    Asset2Relative 0.1
    Belong to Parent Categories 0.1
    Copy This Entry 1.11
    Get Query Param 1.13
    MTAppjQuery 1.9.0
    Mail Form 2.30b1
    ObjectTree 1.01
    PageBute 3.5.6
    QuickRebuild 0.6.2
    SimilarEntries 1.0.0
    compress modifier 1.0.1

  • >WebbingStudioさん
    こんにちは。

    「Use of uninitialized value...」の警告は、/lib/MT/Template/Tags/Asset.pmの街灯の行の前後を以下のように修正すれば出なくなると思います。

    ・修正前

    if ( !$args->l{force} ) {
        delete $arg{Width}  if $arg{Width} > $a->limage_width;
        delete $arg{Height} if $arg{Height} > $a->limage_height;
    }
    

    ・修正後

    if ( !$args->{force} ) {
        delete $arg{Width}  if (defined($arg{Width}) && $arg{Width} > $a->image_width);
        delete $arg{Height} if (defined($arg{Height}) && $arg{Height} > $a->image_height);
    }
    

    libpngの方は原因は分かりせんが、XServerでImageMagickが動作しないという点は、以下の記事で対処できる可能性があります(XServerでの実績あり)。

    https://www.h-fj.com/blog/archives/2017/08/15-103037.php

  • 藤本さん、ありがとうございました!

    詳しく検証した結果、けっこう複雑になりましたのでQiitaの方で共有しました。
    https://qiita.com/webbingstudio@github/items/aac5f6792c8c7f646564

    1)「Use of uninitialized value...」への対処

    教えていただいたコードに修正するとエラーがなくなりました。
    (元のコードが一部違っていたので、Qiitaの方では修正しています)

    2)「libpng warning: Interlace handling...」への対処

    ImgeMagickを有効にしたところ、PageButeとGetQueryParamで大量の文法エラーが出るようになってしまいました。

    これらの結果から、1のみの対応を行って、「libpng warning: Interlace handling...」には眼をつぶることにしました。

    エックスサーバーはパフォーマンスが良くて気に入っているので、MT7ではエックスサーバー関連のエラーがなくなってくれるのを祈るばかりです…!

  • XServerで試してみました。

    「libpng warning: Interlace...」の警告は、インターレスPNGをアイテムにアップロードしている環境でGDが使用されるシーンで常に出ているようです。
    インターレスでないPNGであれば警告は出ないようです。

    よって、インターレスでないPNGを使うことにより回避すれば良いのかなと思います。
    ※警告が出るかどうかはlibpngのバージョンによるのでしょうか…。詳細はまだ分かりません。とりあえずFogBugzに書いておくか…。

    sv5082.xserver.jp
    libpng 1.5.13

    参考: https://qiita.com/usagi/items/c607fb833fdd63929d33

  • Hideki Abeさん、詳しい情報ありがとうございます。

    気になって、IllustratorとPhotoShopの挙動を調べてみました。

    IllustratorとPhotoShopの最新バージョンは「PNGでのクイック書き出し」ができるようになっています。
    これらの自動書き出しを使ったときに、インターレースが有効になってしまっているのでは、と思いましたが、自分で詳細設定にチェックを入れない限り、制作者側がインターレースを有効にしてしまうことはなさそうです。

    ですが、外部のライターさんやデザイナーさんがインタレースPNGを使ってしまう可能性、Movable Typeのシステムファイル内のPNGそのものがインタレースだった場合まで想定すると、この方向での完全回避はなかなか難しそうです。

返信する


OpenID対応しています OpenIDについて