tips

アップグレード時にフックするupgrader_process_complete

プラグインの機能拡張に伴い自動的にoptionの値を更新したい、ということがあります。wordpressにはプラグインをアクティベートしたときにフックする [register activation hook] がありますが、アップデート時には起動しません。(昔は動いていたらしい。)しばらく前にinit関数に引っ掛けて云々というのを読んだ記憶もあって、面倒だと思いoptionの値を更新しなくてもすむようにやりくりしてきました。

しかしどうしても避けきれなくなり、今回あらためて調べ直したところ、[upgrader process complete] なるすばらしいフックを発見した次第です。プラグインやテーマ、ワードプレスなどのアップグレードにあわせて作動させることができます。どうやら設置されてすでに3年以上経つらしい。今日まで知らんかった・・・。ということで、日本語の記事も見当たらなかったのでメモしておきます。すでに常識なのかもしれませんが。

add_action( 'upgrader_process_complete', 'my_upgrader_process_complete', 10, 2 );

function my_upgrader_process_complete( $upgrader_object, $options ) {
    $current_plugin_path_name = plugin_basename( __FILE__ );
    if ($options['action'] == 'update' && $options['type'] == 'plugin' ){
        foreach($options['plugins'] as $each_plugin){
            if ($each_plugin == $current_plugin_path_name ){

            // YOUR CODES

            }
        }
    }
}

たとえばマルチバイトパッチと自作プラグインの二つを更新したとします。すると$optionsの返り値は、以下のような感じになります。codexではなぜか[packages]になってましたが代わりに[plugins]というkeyが返って来ました。おそらくこの[plugins]は必ず取得できるわけではなく、themeやwpの更新時にはそれぞれのkeyが適宜追加される仕様になっているような気がしますので、必ず[action]と[type]を取得して条件分岐をする必要がありそうです。

Array
(
    [action] => update
    [type] => plugin
    [bulk] => 1
    [plugins] => Array
        (
            [0] => wp-multibyte-patch/wp-multibyte-patch.php
            [1] => my-plugin/my-plugin.php
        )
)

「PDF Image Generator : PDFのサムネイル画像を自動生成するプラグイン。」への18件の返信

  1. ロリポップを使ってます。

    Ghostscriptの脆弱性の悪用を防ぐための対応でImageMagickを使った以下の形式の画像ファイル変換ができないようになったそうです。そのためプラグインが動作せずエラーになります。
    どうしたら良いでしょうか。
    ・PostScript(PS)
    ・Encapsulated PostScript(EPS)
    ・PDF
    ・XML Paper Specification File(XPS)

  2. 画像が生成されないPDFがあります。

    設定画面から生成し直しても
    The image was not GENERATED!!
    と出てきてしまいます

  3. 大変使い勝手のよいプラグインで重宝しております。

    さて、WP4.7.9、PDFジェネ 1.5.5で使用しているのですが、
    パスワード付きのPDFをアップロードしようとすると添付ようにHTTPエラーが発生してしまいます。
    実際にはアップロードされているので画面を戻して作業を行えばよいのですが、
    エラー表示が気になってしまいます。

    例えば、エラー表示を
    「パスワード付きのPDFのため、サムネイルが生成できませんでした。」等に変えることはできないでしょうか?

    ご検討の程、よろしくお願いいたします。

  4. お世話になります。

    PDFからimgを作成した際、どうしても画質の悪いimgになってしまいます。
    設定で、幅を1400pxなどにしたり、逆にチェックをはずしたり、
    jpgではなくpngにしても同様でした。
    幅1000pxくらいでも綺麗に見ることができる画像の作成は難しいでしょうか。

  5. はじめまして。

    自分のWordPressサイト(商用)にこちらのプラグインの導入を検討しております。
    1点確認ですが、「ImageMagick」下回りで使用している「GhostScript」のライセンスは「AGPL」ですが、本プラグインを導入するにあたり、ライセンス違反にならないようにするための注意点などはないでしょうか?
    AGPLですと、ネットワーク経由でアクセスしたユーザーにソースコードを公開する必要があると思いますが、そういった手段があるのか確認です。

    こちらの「PDF Image Generator プラグインを使用しています。詳細はこちら」といったリンクや説明を貼っておくことで、ライセンスの懸念点が解消されるなら、そのようにしたいと考えています。
    よろしくお願いします。

    1. このプラグインもghostscriptも直接のユーザーはwordpressの「編集者」です。

      そもそも「編集者」であれば、プラグインやghostscriptのコードにも当たることができます。(A)GPLだからと言って、ウェブサイトを見るフロントエンドのユーザーにまで明示する必要はないと思います。このプラグインを以ってテーマのコードを開示請求できるとは思いません。
      ただし、フロントエンドユーザーが投稿できるCMSのようなものを制作されている場合は、この事情も変わってくると思います。やはり明示されておいた方が良いでしょうね。

      以上は個人の見解です。日本ではGPLの判例なども聞いたことがないですし、法的にどうなのかはわかりませんが、そもそもWordpressが・・・・。

  6. 残念ですがお名前.comの共用サーバーSDプラン(PHP 5.6.25)では動かないようですね。

    本当にこのサーバーは大手だけどロクなことにならない・・・

    新旧いくつかのWORDPRESSのバージョンで試しましたが、
    いずれの場合でもPDFアップロード時にサムネイルが生成されずテキストリンクでしかエディタ内に配置できません。
    設定画面上ではImageMagickのバージョンは 7.0.1と表示されているので、何か別の要因が絡んでいるのでしょう。

    PDFイメージジェネレーターのバージョンは 1.5.6の最新を使用しました。

    1. 今多忙につき、更新が滞っており申し訳ありません。

      確かお名前.comではうまくいかなかった例が過去にもあったように思います。原因調査できるとしても、何時頃になるか、そもそも解決できるかどうか・・・(汗)
      申し訳ありませんが、他の解決法を探していただくよう助言いたします。

  7. お世話になります。

    2月に問合せをさせていただいて、一端直っていたと思ったのですが、また同様のエラーが出るようになっていました。
    WPバージョンは4.7.4、プラグインバージョンは1.5.5を使っています。
    エラー画面も添付致しますので、よろしくお願いします。

    1. 4.7.4で警告を確認しました。

      wordpressの公式のほうでPDFサムネイルを扱う仕様が変更になっていることが原因のように思います。再度仕様を調べ直して対応したいと思っていますので、しばらくお待ちください。気になるようでしたら、お使いのテーマでしばらく警告をオフにしておいてもらえますか。

    2. 公式imagickの仕様に対応したアップデート(2.0)はもうしばらく時間がかかりそうなので、とりあえず警告メッセージだけ回避するバージョン1.5.6をあげました。

      こちらでお試しください。

    3. ありがとうございました。

      原因がわかりよかったです。
      1.5.6を確認しましたが、Noticeは出ていませんでした。

  8. 昨年末に問い合わせさせていただいたものです。

    問い合わせ後にすぐに更新していただきありがとうございました。

    先日と同じ環境で起こったのですが、通常のPDFファイルを1枚アップロードした際には、メディアライブラリなどでサムネイルは表示されるのですが、設定画面から「すべてのPDFの画像を再作成して置き換える」を実行しても、サムネイルの画像が表示されない状況です。

    これは正常に機能するようにできますでしょうか。
    よろしくお願いします。

    1. 「すべてのPDFの画像を再作成して置き換える」機能自体は、いくつかの環境で試しましたが、エラーも警告も見当たりませんでした。

      そちらでdebugして調べることは出来ますか?また、特定のPDFで起きるのか、など条件はありませんか。

    2. すみません、他の環境で動かした場合に正常に動作したようなので、おそらくこちらの環境のせいだと思います。

      お騒がせしたうえに、お返事が遅くなり申し訳ありませんでした。

  9. 先日コメント欄に横入りしまして失礼致しました。

    無事便利に使用できております。

    自動でアイキャッチ画像を設定したくない場合は、記載の関数を削除するしか方法はないでしょうか?
    何分素人のため、ご教授ください。
    よろしくお願いします。

    1. 多忙のため、あちこちで返信が遅れており申し訳ないです。

      自動でアイキャッチ設定ということですが、それは記事を保存した時に、添付ファイルを探して自動的にアイキャッチ画像に設定するような動作のことでしょうか。
      PDF image generatorはそのような仕様にはなっていません。お使いのテーマのfunctions.phpか、その他のpluginにそのような機能が付いているのではないでしょうか。

    2. お忙しい所ご返信いただき恐縮しております。

      私の文章力が乏しく失礼致しました。再度ご説明いたしますと、固定ページに添付したPDFファイルの一枚目のサムネイルがアイキャッチ画像として設定されるのですが、それをしたくないのです。
      テーマの機能としても同様のものが存在しますが、テーマの方はOFF設定ができます。(PDFを添付したページのみそのような現象になります。)
      こちらの説明を読みました所、上記に「アイキャッチ画像を自動で設定する」という説明文があり、まさにその通り動作しておりましたので、それをしたくない場合は、掲載されている関数を削除するしかないのかなと思った次第です。
      お忙しい所恐縮ではございますが、ご回答をよろしくお願いいたします。

    3. 上記の「アイキャッチ画像を自動で設定する」という設定は、プラグイン内の機能ではなく、テーマ作成者が気が向けばテーマに書き込んでください、という意味合いのものです。

      ですから、mapleさんが上記の関数をテーマに書き込んでなければ、そもそも削除する対象も存在せす、そのような動作もしないはずです。

      >テーマの機能としても同様のものが存在・・・
      とのことですが、なにかバッティングして意図せぬ動作が起きている可能性はないでしょうか。

    4. うわぁ!

      こんな早くにご回答頂けてすごくありがたいです。
      なるほど、追加用の関数を紹介しているという事だったんですね・・・
      プラグインをもう一度見てみたら、テーマの推奨で「Auto Post Thumbnail」というプラグインが勝手に入ってました・・・停止します。。ご面倒をおかけしました。

  10. はじめまして。

    PDF Image Generaterをよく利用させてもらっています。
    このたび、WordPress4.7にアップグレードしたところ、管理画面のACFで作ったアップロードフィールドで下記のようなエラーが表示されました。

    Notice: Undefined index: full in /usr/home/ae110cn7br/html/pg/wp-includes/media.php on line 215

    Notice: Undefined index: full in /usr/home/ae110cn7br/html/pg/wp-includes/media.php on line 216

    Notice: Undefined index: full in /usr/home/ae110cn7br/html/pg/wp-includes/media.php on line 217

    Notice: Undefined index: full in /usr/home/ae110cn7br/html/pg/wp-includes/media.php on line 218

    フロント側でも同じようなエラーが出ましたが、PDFファイルの表示をファイルID取得にして表示方法を変えると直りました。
    何か解決方法はありますでしょうか。

    1. ご報告ありがとうございます。

      これはプラグインを修正しないといけませんね。
      次のアップデートは大きなものになるので、準備に時間がかかっています。大変申し訳有りませんが、しばらくお待ち下さい。

      プラグインのpdf-image-generator.php内の294行目と776行目の’full’となっているところを’fullsize’に書きかえればエラーは消えると思います。お急ぎの場合お試しください。

    2. とりあえずバグ報告が溜まっていたので、1.5.1としてマイナーアップデートしました。

    3. お世話になります。

      nanamaruです。
      PDF Image Generatorを下記のバージョンで利用しております。
      WordPress 4.7.2
      PDF Image Generator 1.5.2

      ROさんと似たエラーが出たのでご報告いたします。

      管理画面の投稿でアイキャッチ画像にPDFを設定して「公開」または「更新」すると以下のエラーが出ます。
      Notice: Undefined index: full in /home/hogehoge/wp-includes/media.php on line 215

      Notice: Undefined index: full in /home/hogehoge/wp-includes/media.php on line 216

      Notice: Undefined index: full in /home/hogehoge/wp-includes/media.php on line 217

      Notice: Undefined index: full in /home/hogehoge/wp-includes/media.php on line 218

      Warning: Cannot modify header information – headers already sent by (output started at /home/hogehoge/wp-includes/media.php:215) in /home/hogehoge/wp-admin/post.php on line 197

      Warning: Cannot modify header information – headers already sent by (output started at /home/hogehoge/wp-includes/media.php:215) in /home/hogehoge/wp-includes/pluggable.php on line 1179

      >2016/12/22:Oginoさんの回答
      >プラグインのpdf-image-generator.php内の294行目と776行目の’full’となっているところを’fullsize’に書きかえればエラーは消えると思います。お急ぎの場合お試しください。

      ちなみにOginoさんの回答と反対の’fullsize’になっているところを’full’に書き換えるとエラーが出ませんでした。
      お忙しいとは思いますが調査をお願いしたします。

    4. たびたびすみません。

      nanamaruです。
      前コメントの訂正です。
      >ちなみにOginoさんの回答と反対の’fullsize’になっているところを’full’に書き換えるとエラーが出ませんでした。

      ‘full’に直してもエラーが出ます。私の勘違いでした。

    5. ご報告ありがとうございます。

      どうやら4.7からカスタムフィールドの配列の受け渡しが厳格になって引っかかっていたようです。
      警告が解除されるように修正しました。1.5.3にアップデートしてください。

    6. 早速のご対応ありがとうございます。

      最新バージョンの1.5.3にアップデートして試してみました。

      アイキャッチ画像設定でPDFファイルをアップロードしたところ
      下記のエラーが発生しました。

      アップロード中
      history.pdf
      HTTP エラー。

      また、管理画面のメディアライブラリを表示すると下記のエラーが出ます。
      Fatal error: Cannot use string offset as an array in /home/hogehoge/wp-includes/media.php on line 215

      お忙しいところ申し訳ないのですがご対応お願いいたします。

    7. 管理画面でエラーちょっと確認を取れませんでした。

      そちらでどういったケースでそういう症状が出るのかご確認できますか?

      そのほかに現バージョンで把握してるnoticeはサムネイルを削除するときに出るものだけです。これは解決策を探すのに苦労しています。いずれにせよ、Undefined indexはただの警告なので、非表示にして貰えば、動作に問題はありません。

      HTTPエラーについてですが、サーバーの容量が不十分か、お使いのimagickのバージョンか、あるいはファイルに問題があるかのいずれかだと思います。ファイルを送ってもらえれば、こちらで検証することも可能です。

      なお、その前にご報告いただいていた、 modify header informationについてはPDF IMAGE GENERATORにヘッダやロケーションを変更する動作はないので、直接に関係はなさそうです。もしあるとしたら他のプラグインとのコンフリクトですので、それぞれの組み合わせを試していた抱く必要があるかと思います。

    8. 警告メッセージを非表示にする件は了解しました。

      こちらでも以下の確認をしました。
      ・サーバーの容量は確認しましたが空き容量は十分にありました。
      ・また問題シンプルにするため、WordPress 4.7.2 (Twenty Seventeen テーマ)環境にPDF IMAGE GENERATORのみを有効にした環境を新たに作り、同じくアイキャッチ画像にPDFファイルをアップロードしてみましたがHTTPエラーが出ます。
      管理画面のメディアライブラリを見るとwaitマークがクルクル回る状態のままです。
      プラグインを無効にして管理画面のメディアライブラリを見るとファイルとサムネイルはアップロードされています。
      ・XSEVERですがimagickのバージョンの確認方法がわかりませんのでご教授お願いできませんでしょうか?

    9. エラーを起こしている原因はwp_attachment_metadataにあるようでした。

      最新版で修正しましたのでお試しください。
      これでhttpエラーも治ると良いのですが、改善されない場合は、一度ファイルを送っていただけますか?

      imagickのバージョンは設定画面の下部に表示されるようになっています。

    10. 早速のご対応ありがとうございます。

      最新版に更新しテストした結果正常に動作するようになりました。
      ありがとうございました。

  11. はじめまして、kと申します。

    とても便利なプラグインの提供をありがとうございます。

    この度、本プラグインをインストールしましたところロリポップサーバー(ライトプラン)にて普通にPDFはアップされるのですが、サムネイル画像が生成されません。ちなみにテスト環境として構築したエックスサーバーでは動作致しました。

    過去の履歴を拝見したところロリポップサーバーでも動作しているようですので原因が不明な状態です。何か解決策ございますでしょうか?
    よろしくお願いいたします。

    サーバー:ロリポップサーバー(ライトプラン)
    wordpress:4.5.3
    PHP:5.5(CGI版)
    サーバー管理画面のphp.ini設定にてアップロード容量を20Mまでアップ済み

    1. スペックの低いサーバーではまれに失敗するときがあります。

      時間をおいての再アップロードをお試しください。また、一部のPDFはimagemagickが読み込めない事象が確認されています。違うPDFファイルでもお試しください。

      プラグインの設定画面の下の方に、変換方法(exec関数 / PHP拡張)とimagemagickのバージョンが表示されていると思うのですが、ご報告いただけますか?

    2. ご返信ありがとうございます!

      再アップロードしてみましたが、同じ結果でした。一部のPDFが読み込めない現象については、エックスサーバー上では問題ないので今回の原因とは考えづらいです。

      プラグイン設定画面ですが、変換方法はPHP拡張にチェックが入っており、imagemagickのバージョンは6.7.2 と表示されております。

    3. 管理サイトの中にロリポップがありましたので試してみました。

      結論から言いますと、同じ症状を確認できたものの、原因はわかりませんでした。

      imagemagickのバージョンも同じですし、phpinfoを確認したらimagick拡張もインストールされていました。おそらくlolipop固有か、当該imagickバージョン固有の問題だと思われます。

      取り急ぎ、lolipopではexecコマンドが使えますので、プラグイン管理画面の変換方法を「exec関数でimageMagickを実行する」にして試してください。私の管理しているlolipopサーバーでは動作確認できました。
      imagickエクステンションの方は近日中に調査したいと思います。Kさんが事情があってそちらしかお使いになれないのであれば、すみませんが暫くお待ちください。

    4. 迅速なご対応ありがとうございます!

      助言頂いた通り「exec関数でimageMagickを実行する」で動作致しました。なぜか1つだけ動作しないPDFがありましたが取り急ぎは問題なさそうです。
      本当に助かりました!ありがとうございました!

    5. 調べてみたところ、アルファチャンネルの処理をおこなうメソッドがエラーを起こしているらしいところまではわかりました。

      これまではimagick 6.3.6以降使用可能とみなしていました(このメソッド周りの関数であるsetImageAlphaChannelが追加されたのが6.3.6だからです)が、実際のところどのバージョンまで遡るとこのメソッドが使用できないのか、文献にいき当たらないためはっきりと分かりませんでした。私が実際に観測できる範囲では6.8.0からは問題なく動作しているようなので、次のアップデートでは以上の判定基準を反映させるようにします。

      ちなみに、execが使えるなら機能的に差はありませんので、そのままご利用ください。
      ご報告ありがとうございました。

    6. 横からすみません。

      私も同様でロリポップ(スタンダードプラン)なのですが、ファイルのアップロードはできるのですが、サムネイルが表示されません。
      また「exec関数でimageMagickを実行する」というボタンも選択できず、困ってしまいました。
      lolipopサイトでImageMagicの軟弱性により一部機能制限というのは見かけたのですがこれでしょうか?php.iniのsafe modeをoffにすると良いらしいのですが・・・ご教授ください。
      WordPress4.7
      ImageMagic6.7.2

    7. 追記です。

      PHPのバージョンを上げたら「exec関数でimageMagickを実行する」というボタンを押せるまでにはなったのですが、やはりサムネイルや画像が表示されず、単なるテキストリンクになってしまいます。
      こんな初心者でも分かりやすく教えてくだされば幸いです。
      宜しくお願いします。

    8. なんどもすみません。

      PHPのver5.6→5.5にしたら動作しました。
      おさわがせしました。

    9. 返信が遅くなり申し訳ありません。

      動作したようで何よりです。

      このプラグインはphpのバージョンと関わりなく動作するはずです。ちょっと確認できていませんが、php.iniの設定が関わってるのかもしれませんね。

  12. こんにちは。

    便利に使わせていただいております。
    さてこの度、新しいWPサイトを開設し、新たに本プラグインをインストールしようとしましたら、「重大なエラーを引き起こしたため、プラグインを有効化できませんでした。プラグインをアクティベートする前にImageMagickとGhostScriptをインストールしてください!」となって有効化できません。
    物理的に同じサーバーで異なるドメインで使用しようとしているので、原因が分かりません。
    ただ、以前から使用していたサイト上では、最新版へのアップデートも行われ動作も正常に行われます。(1.4.4.1 を新規に有効化する場合に発現)
    解決方法への糸口でも見つかればありがたいのですが、よろしくお願いいたします。

    1. 同じサーバーであれば、原則として、ひとつのドメインで動作していれば、別のドメインでも動作するはずです。

      可能性としては以下の3つを考えています。

      ひとつは新ドメインに使用しているプラグイン、またはfunctions.php内の関数とのコンフリクトの可能性です。他のプラグインを非有効化するなど、どこかでコンフリクトが生じていないかを、まずはチェックしてみてください。原因となるプラグインがわかれば、それを教えていただければ、こちらの調査も可能です。

      もうひとつは、PDF Image Generatorの現行バージョンが、beniyaさんがお使いのimagemagickのバージョンが古いなどの理由により、インストールできなくなっている可能性です。現行バージョンはimagemagickのバージョン番号を取得する仕様になっています。imagemagickの新旧で、PDFからの画像生成の過程がだいぶ違ってきており、従来のプラグインの設計では、運用が難しくなってきたためです。更新ではなく、有効化の時にのみimagemagickの有無をチェックしますので、試しに、v1.3.9をインストールできるかどうか試してみて下さい。1.3.9がインストールできた場合、現行バージョンの識別方法に改善の余地があるということになるでしょう。お使いのサーバー、phpのバージョン、imagemagickのバージョンなどを教えていただければ、対応版をリリースするための手がかりになると思います。

      最後のひとつはかなり低い可能性ですが…、サーバーのimagemagickがメンテナンス中である(であった)可能性です。現在imagemagickに脆弱性が見つかったため、世界的にレンタルサーバーでメンテナンスをしており、たまたまそのタイミングでインストール→imagemagickが見つからない、ということになっているのかもしれません。

    2. ご返事ありがとうございます。

      まず有効化できていないPDF Image Generatorをアンインストールした後、v1.3.9をインストールしましたが、同様のエラーでしたが、メッセージに(E3)というコードが表示されました。プラグインを全部無効にしてから、実行しても同様でした。
      次にimagemagickのバージョンは?ということで、$identify -version とコマンドを打ってみたところ、GraphicsMagick 1.3.23 2015-11-07 Q8 http://www.GraphicsMagick.org/ と帰ってきました。他にimagemagickのバージョンを調べる方法はありますでしょうか?(imagemagickの代わりにGraphicsMagickが入っているのだとおもいます)が、同じサーバーなので、環境は他のドメインと同じです。
      この環境で3か月前くらいにPDF Image Generatorをインストールしていて、このときは正常に有効化され、今月に入ってからのPDF Image Generator のバージョンアップも正常に行われました。試にPDFをアップしましたが、画像化も行われました。
      imagemagickが見つからないというのは、そのとおりなのかもしれませんが、GraphicsMagickではインストールできなくなくなったと考えた方がよいのでしょうか?

    3. すみません追記します。

      GraphicsMagickは 1.3.23 を5月3日か4日にインストールしなおしています。失念しておりました。
      ですから、GraphicsMagick 1.3.23 より前の段階ではインストールできたが、1.3.23をインストールした後に、新規に有効化できなくなっているという事になります。
      すでに一旦、有効化されていたPDF image Generatorはアップデートできて、正常に動作ししている、と訂正させていただきます。

    4. GraphicsMagickですか。

      派生系だからimageMagickと同じコマンドでも動作するんですかね。
      デベロップメントバージョン1.4.5aをあげました。仮のimageMagickバージョン( im6.8.0)をあてがったので、アクティベートできるのではないでしょうか。
      https://downloads.wordpress.org/plugin/pdf-image-generator.zip

      p.s. 以下は無事にアクティベートできた前提での話ですが…。
      現在のプラグインはiamgeMagickのバージョンごとに内部的に挙動を変えているため、GraphicsMagickへの対応は正式には保証しかねます。(GraphicsMagickのバージョンまで追いきれない;;)比較的新しいIMのバージョン(6.8.0以降)を基本としたコマンドが適用されるようにしましたが、挙動に問題がでるかもしれません。設定画面の「作成画像の各種設定カスタマイズ」をオフにすれば、古いGraphicsMagickでも動くかもしれません。また、可能であれば対応しますので、ご報告ください。

    5. 追伸、ご報告のように1.3.23 以降、GraphicsMagickのバージョン表記が違うなどの理由による、うまくアクティベートできなくなっているのかもしれませんね…。

      であれば今回のデベロップメントバージョンでもアクティベートはできない可能性が有ります。
      いちど convert -versionでバージョン情報を取得してもらえますか? identifyを使わないとダメとか…?

    6. ご丁寧にありがとうございます。

      デベロップメントバージョンでも有効化できませんでした。
      $convert -version
      Version: ImageMagick 7.0.1-3 Q16 x86_64 2016-05-17 http://www.imagemagick.org
      Copyright: Copyright (C) 1999-2016 ImageMagick Studio LLC
      License: http://www.imagemagick.org/script/license.php
      Features: Cipher DPC HDRI OpenMP
      Delegates (built-in): bzlib djvu fftw fontconfig freetype gvc jng jpeg lcms lzma openexr pangocairo png tiff webp wmf x xml zlib

      という結果なので一応ImageMagickは存在するという事ですね。

    7. うーむ。

      どこで引っかかっているのかわからなくなりました。
      お手数ですが、functions.phpに下記のコードを入れて、admin権限でログインして走らせてみてください。phpがちゃんと情報を取得できているかを確認したいです。

      if ( current_user_can( 'administrator' ) && is_admin()  ) {
        exec( 'convert -version', $arr, $res );
        echo '<!-- $res: '.$res.' -->'."\n";
        echo '<!-- $arr: '.print_r($arr, true).' -->'."\n";
        $version = 'version';
        if ( $res === 0 && count($arr) > 2 ) {
          preg_match('/ImageMagick ([0-9]+\.[0-9]+\.[0-9]+)/', $arr[0], $v);
          if ( isset( $v ) ) $version = $v[1];
        }
        echo '<!--imagick version: '.$version . '-->'."\n";
      }

      処理が終わった後は削除してください。編集中のエラーの原因になります。

    8. 申し訳ありません。

      やり方が間違っているのかもしれませんが、
      /wp-contents/themes/child/functions.php
      にコードを加えてログインすれば良いという事でしょうか?
      ログインしても以前と変わらぬ動作で imagick version は表示されません。

    9. おっしゃる通りfunctions.phpにペーストするだけで動作すると思います。

      ログインして、管理画面でページソースを表示してください。ソースの一番上に出力されているはずです。

    10. あっそうなんですね。

      ありがとうございます。
      ソースの頭部分はこうなっています。

      <!-- $res: 1 -->
      <!-- $arr: Array
      (
          [0] => Version: ImageMagick 7.0.1-3 Q16 x86_64 2016-05-17 http://www.imagemagick.org
          [1] => Copyright: Copyright (C) 1999-2016 ImageMagick Studio LLC
          [2] => License: http://www.imagemagick.org/script/license.php
          [3] => Features: Cipher DPC HDRI OpenMP
          [4] => Delegates (built-in): bzlib djvu fftw fontconfig freetype gvc jng jpeg lcms lzma openexr pangocairo png tiff webp wmf x xml zlib
      )
       -->
      <!--imagick version: version-->
    11. なるほど。

      exec( 'convert -version', $arr, $res );

      の$resには本来0が入っているはずですが、1が返ってきています。つまりエラーが発生しているということです。
      これを通してしまっても通常通り画像生成するのかどうか、ちょっと確信が持てないのですが、一旦$resの判定を外したデベロップメントバージョンを上げます。これでインストールが可能になるはずですので、動作をテストしてみてください。
      https://downloads.wordpress.org/plugin/pdf-image-generator.zip

    12. 遅い時間まで対応くださり、ありがとうございます。

      インストールは成功しました。
      画像への変換も結果的にはできましたが、アップロードの途中でエラーが発生するようです。メディアライブラリを見ると画像ファイルが見えないのに、サーバーの中をのぞくと画像ファイルが存在します。またサムネイル形式では一覧も見えなくなるのに、一覧形式だとPDFファイルだけ表示されます。
      もう少しテストを重ねて、ご報告させていただきますので、よろしくお願いいたします。

    13. やはりエラーが発生しているんですかね。

      画像は作成できるもののURLを取得できずwpに登録できていないのかもしれません。
      デバッグの設定をオンにして、ログをとってみて下さい。
      ftpでwp-contentとpluginsフォルダのパーミッションが755になっているか確認してみて下さい。

    14. ご返事が遅れて申し訳ございません。

      私のミスで functions.php のコードを消さないで実行していた為に発生していたエラーだったことが分かりました。functions.phpからコードを消して試したところ、画像への変換もライブラリーでの表示もできるようになりました。
      ひとつ不思議なのは、作成される画像の中で縮小されない画像のみパーミッションが644 になっている事です。
      例えば test.pdf をアップロードした場合、
      644 test-pdf.jpg
      666 test-pdf-724×1024.jpg
      666 test-pdf-212×300.jpg
      666 test-pdf-200×200.jpg
      666 test-pdf-150×150.pdf
      という具合に作成されています。
      以前から使用させていただいているサイトでは全て 666 なのは確認したので、何か違いが出ているのだと思います。
      大変お手数をおかけして本当にありがとうございました。
      実質的には使用できるようになりましたので、ご報告させていただきます。

  13. 素晴らしいプラグインをありがとうございます。

    WP操作に不慣れな方でもサムネイルの作成からアップロードまで対応できて、非常に助かっております。

    プラグインをさくらインターネットのスタンダードプランで使用しておりますが、ImageMagick脆弱性の件で一部機能を制限している、というアナウンスがありました。

    さくらインターネット・ImageMagick の脆弱性対策について (CVE-2016-3714)
    http://support.sakura.ad.jp/mainte/mainteentry.php?id=19093

    本プラグインではImageMagickを利用しておりますが、何か影響はあるでしょうか?

    1. ご報告ありがとうございます。

      ImageMagickの脆弱性についてのレポートはざっと読んでみました。ほぼすべてのバージョンに共通する脆弱性のようです。
      ImageMagick
      – 6 系列 6.9.3-9 およびそれ以前
      – 7 系列 7.0.1-0 およびそれ以前

      今回の脆弱性はImageTragickと呼ばれ、画像ファイルに偽装したファイルをアップロードした時に任意のコマンドを実行されてしまうというものです。wordpressは、jpg/png/PDFなどのファイルアップロード時にマジックバイトなどの検査をしてくれるので、これでリスクは大幅に低減されます。しかし、サイトの仕様によっては100%安全とはいいきれません。そもそも、このプラグインのあるなしは別として、wordpressは画像処理にimagemagickを使っていることは多く、ユーザーを限定した通常のWORDPRESSの使い方ではリスクは低いですが、テーマが自動的に外部サイトの画像を拾ってきて処理するとか、不特定多数の外部ユーザにフロントエンドからファイルをアップできるようなフォーラムタイプのウェブサイトなどでは、危険性が高いと言えます。一般的な対策としては、現在 policy.xml ファイルをiamgemagickライブラリに加えることが推奨されていますが、自前サーバーでなければ、サーバー運営サイドが対応してくれるまで待つしかありません。

      私もさくらのスタンダードを使っているサーバーが数カ所ありましたが、いずれも該当バージョンではない(上記よりも古い)ため、制限はかかっていないか、かかっているとしても影響はなさそうでした。さくらのスタンダードプランだからといって、必ずしも同じバージョンのimagiMagickを使用しているとも言えませんので、それぞれ様子を見るしかありません。さくらのいう「一部機能」の制限というのがどういったことを意味するか実際に該当してみないと分かりませんが、機能が制限されるなら、一部ファイルのアップロードが出来なくなる・サムネイルが生成されなくなる、というのが最も考えられる結果だと思います。(すでに作成されたファイルの表示などには影響はありません。)

    2. お返事ありがとうございます。

      動作確認してみたところ、無事にサムネイルが生成されました。
      しばらく様子をみたいと思います。

      また、ImageMagick脆弱性の詳細もありがとうございます。
      利用しているバージョンを確認していなかったのでチェックしておきたいと思います。

  14. はじめまして。

    便利なプラグインを制作いただきありがとうございます。
    サムネイルの生成について教えていただきたいのですが、
    例えば、「example.pdf」というPDFをプラグイン有効化後、アップロードすると「example.jpg」という画像が生成されるのですが、(このjpgは中サイズのようです。)その他のサイズのサムネイルが生成されていません。その他のサイズのサムネイルは生成されないのでしょうか?

    希望している事は、投稿の記事一覧で記事タイトルと同様に記事内で使用している画像を表示させております。
    この画像のサイズは決まっている為、PDFをアップロードした際、この一覧にPDFから生成されたjpgが表示されて欲しいと思っております。

    WPのバージョンは、4.3.1です。

    1. おそらく「example-pdf.jpg」だと思いますが、中サイズではなくそちらがフルサイズになります。

      そしてそこから自動的に大・中・サムネイルが生成されています。(呼び出し方は、説明を参照してください。)

      このプラグインは現在のバージョンではPDFをスクリーンサイズ(72dpi)で書き出すようになっています。もともとのファイルがB5だったり、もっと小さいチケットサイズだったりすると、小さいjpgになってしまいます。
      そのためご希望のサイズに達していない可能性があります。

      次のアップデートでデフォルトの読み込みサイズを大きくし、最大サイズをカスタムで設定できるようにします。
      現在のdevelopment versionでも仮に縦横最大1200pxのjpgが取得できる設定になっています。よければお試しください。
      https://wordpress.org/plugins/pdf-image-generator/developers/

      (※バージョン1.3.4以降は画像サイズをある程度ユーザーが自由に設定できるようになっています。)

  15. 始めましてkumake2です。

    すごく便利なプラグインを制作して頂き、大変助かっています。
    今回ACFを利用してカスタムフィールドに登録したPDFを読み込もうと思ったら、既に「TEMPLATE : テンプレート内で出力するサンプル」まであり、頭がさがるばかりです。
    早速こちらを使って実装してみたところ、以下の記述によりPDFをそのまま開くことが出来ませんでしたので、お伝えしておきます。

    <TEMPLATE : テンプレート内で出力するサンプルの抜粋>

    $pdf_id = ‘your pdf post ID’;//サムネイルを表示したいPDFのID
     // 〜略〜
    echo '<a class="pdf-link image-link" href="'.wp_get_attachment_url( $attachment_id ).'" title="'.esc_html( $attach_title ).'" target="_blank"> //〜略〜

    <修正したところ>
    wp_get_attachment_url( $attachment_id )

    wp_get_attachment_url( $pdf_id)

    1. おっしゃる通りですね。

      よくやるんです。困ったもんです。
      だいぶ長い間放置されていたようでしたので、当記事含め、wordpress.orgの公式プラグインの説明文もすべて書き直しておきました。

      貴重なご指摘ありがとうございました!

    2. プラグインの文言など修正お疲れ様でした。

      昨夜から開発を続けて、CPIのサーバーにあげて試してみたところ、
      上手くサムネイルが生成されず悩んでおります。
      CPIのシェアードプランのPHP 5.3.29 を利用しています。
      http://www.cpi.ad.jp/shared/detail/php.html
      ※imagick モジュールもphpinfoで確認できます。
      解決の糸口をご教授願えればと思います。
      よろしくお願いします。

    3. Ghostscriptはインストールされていますでしょうか。

      参考になりそうなサイト

      activate時のチェッカーですが、これでチェックしてみるとどう出ますか。任意のPHPにおいてみてください。

      	if (function_exists('exec')) {
      		echo 'function_exist<br/>';
      		exec("convert -version", $out, $ver); //Try to get ImageMagick "convert" program version number.
      		if ( $ver === 0 ) {
      			exec("convert -list delegate | grep -Ei '(PDF|PS|EPS)'", $out, $lis);
      			if ( $lis === 0 ) {
      				echo 'imagemagick installed.<br/>';
      			} else {
      				echo 'Ghostscript is not installed.<br/>';
      			}
      		}
      	}
      	if( extension_loaded('imagick') ) {
      		echo 'imagick installed.<br/>';
      	} else {
      		echo 'imagick is not installed.<br/>';
      	}
    4. 早速のご返信ありがとうございます。

      activate時のチェッカーのコードを任意のPHPで実行したところ、
      下記が出力されました。

      function_exist
      imagemagick installed.
      imagick installed.
    5. ゴーストスクリプトのバージョンをチェックしてみてください。

      以下を任意のPHPで走らせて見てください。

      echo shell_exec("gs --version");
    6. ssh接続の準備などしており、Ghostscript 確認が遅くなりました。

      上記のコードをPHPに記述して実行したところ、空でした。
      ssh接続して、”which gs”のcommandを実行してみても”Command not found.”になってしまうため、Ghostscriptがインストールされてないようです。

    7. 明日CPIのサポートセンターに電話して確認してみます。

      何か有用な情報があれば、追記させて頂きます。
      お忙しいところお手数おかけしました。
      何度も迅速な回答ありがとうございました。

    8. CPIのサポートセンターにメールしてみたところ、

      Ghostscript(GPL Ghostscript 9.02 (2011-03-30))はインストールされている状態で、パスは /usr/local/bin/gs と回答が来ました。

      ゴーストスクリプトのバージョンをチェックを以下のように変更して実行してみたところ、空のままでした。

      echo shell_exec("/usr/local/bin/gs --version");
    9. うーん。

      私も詳しくないのですが、LINUXサーバーならgsがインストールされていればwhich gsで/usr/local/bin/なり/usr/bin/gsと吐き出してくれるはずなんですよね。
      ちょっと巨大版のwhich GSを見つけました。

      // on Windows system
      if ('WIN' === strtoupper(substr(PHP_OS, 0, 3))) {
      // look for environment variable
      $executable = getenv('GSC');
      if($executable) echo ' WIN:'.$executable;
      
      // hope GS in the path
      $executable = exec('where gswin*c.exe');
      if(!empty($executable)) echo ' WIN:'.$executable;
      
      // 64- or 32-bit binary
      $executable = exec('dir /o:n/s/b "C:\Program Files\gs\*gswin*c.exe"');
      if (!empty($executable)) {
      echo ' WIN:'.$executable;
      }
      // 32-bit binary on 64-bit OS
      $executable = exec('dir /o:n/s/b "C:\Program Files (x86)\gs\*gswin32c.exe"');
      $executable = empty($executable) ? false : $executable;
      echo ' WIN:'.$executable;
      }
      
      // on Linux...
      $executable = exec('which gs');
      $executable = empty($executable) ? false : $executable;
      if ($executable ) echo ' Linux:'.$executable;

      もしウインドウズサーバーで、GSがインストールされていたとしたら、convertコマンドがうまく走らない理由は現状分かりません。GSの仕様が違うのかもしれません。あらゆるバージョンでチェックしたわけではありませんから。プラグイン内のpigen_generate関数内のconvert以下を書き直すことで対応できる可能性も…?

      もしGSノパスが見つからないなら、サポートの方にもっとサポートしていただくくらいしかどうにもなりませんね…。

    10. 何度もコメントしてすいません。

      以下の記述も試しましたが、結果はダメでした

      exec("convert tanbo.pdf tanbo.jpg", $out, $ver);
      var_dump($out);
      echo $ver;
      ↓
      array(0) { } 1

      また

          $im = new imagick();
          $im->readimage("tanbo.pdf"); // ここで Fatal error
          $im->setImageBackgroundColor('white');
          $im = $im->flattenImages();
          $im->setImageFormat('jpg'); 
          $im->writeImage( "tanbo.jpg" ); 
          $im->clear();
          $im->destroy();
      ↓
      Fatal error: Uncaught exception 'ImagickException' with message 'PostscriptDelegateFailed `test.pdf': No such file or directory...

      GSのバージョンかフォントっぽいので、CPIのサポートと連絡して解決に努めます。解決できれば、またまとめて結果をお伝えします。

    11. その後をお伝えしにきました。

      CPIのサポートと連絡を取り合った結果、私がテストしていたサーバーがシェアードプラン ACE01の提供する「SmartRelease」のテスト環境だったため、本番環境のサーバーでしかGhostscriptを提供しておらず、プラグインが動かなかったことが判明しました。本番環境のサーバーならCPIでも「PDF Image Generator」は問題なく動作しました。
      ※CPIでは「SmartRelease」をリプレース機能と位置づけており、テスト環境としては本番サーバーと実は同等の環境を用意しておらず、開発者からの質問があった場合のみ伝えることになっていたようで錯綜しました。
      たくさんコメントして、お騒がせしました。
      親身に応えて頂き、ありがとうございました。

    12. 丁寧な報告ありがとうございます。

      無事動作したようで、本当に何よりです。

      今回のことも反映して、近い内のアップデートでGhostscriptのチェッカーをちゃんと組み込もうと思います。プラグインのアクティベート時に判別できた方が良いですしね。

  16. お世話になります。

    katです。
    PDF Image Generatorを利用しております。

    wordpressに導入して希望通りの動きをして助かっております。
    一点、サムネイルが生成されないタイプのPDFがありました。

    原因は具体的にはわからないのですが、
    テキストタイプのみのPDFがサムネイル画像が出ない。という印象です。

    どうかご教授いただけると助かります。
    よろしくお願いいたします。

    1. uploadsフォルダ内にもファイル自体作成されていない状態でしょうか。

      何かエラーメッセージはでていますか?

      こちらではwordで作った文字だけのPDFでも動作しています。
      ファイルサイズが大きすぎるか、ファイルの保存形式の問題なのか、はたまたサーバー固有の問題なのか、再現してみないと何ともいえないです。再現できても何も言えないかもしれませんが(笑)
      よければ、pdfを添付してサーバ環境を記したメールを送って下さい。→コンタクトフォーム

    2. 早速のご返事ありがとうございます。

      再度試したところ、無事にサムネイルが表示されました。
      先ほどの現象だと、uploadsフォルダの中にもサムネイル画像が生成されていませんでした。

      サーバーはロリポップを使用しております。pdfは外部には見せられないものです。
      また似た現象が発生したらご報告させてください。

    3. 無事作成できたようで何よりです。

      ファイルサイズ×サーバー処理能力、の兼ね合いでどうしても不確実性が増すかと思います。

  17. 素晴らしい。

    プラグインとして読み込んで一発でサムネイルが表示されました。環境はロリポップです。
    仕事で使っている環境はIISで、imagemagickそのものがphpと連携する形でインストールできずあきらめましたが、
    ぜひ、プラグインとして公式に公開してください!

    1. お役に立てたようで私も嬉しいです。

      IISについては私もよく知らないのですが、imageMagickのインストールの有無はもちろん、そのバージョンなど環境によって左右されるのではないかと思っています。
      ヘテムルで動作は確認していたのでロリポップも大丈夫?…とは思ってましたが、貴重な情報ありがとうございます。もう少し様々な環境でのデータが取れて、充分な汎用性があるようであれば、そのうちプラグイン登録したいと思います。

  18. こんにちは!

    はじめまして。
    日頃困っていた点だったので素晴らしいです。
    ソースを公開していただいて大変ありがとうございます。

    私はあまり詳しくないのですが、記事にならって
    functions.phpに早速アップしてみたのですが、
    画像のURL等は表示されるのですが、
    うまくサムネイル画像が作成されませんでした><

    冒頭の

    function pdf_thumb_generate( $metadata, $attachment_id ){ // Generating thumbnails from PDFs
    	if( get_post_mime_type ( $attachment_id ) === 'application/pdf' ){
    		$file = get_attached_file( $attachment_id );
    		// Converting files to "medium" size
    		$width = get_option( 'medium_size_w' );
    		$height = get_option( 'medium_size_h' );
    		exec("convert {$file}[0] -colorspace sRGB -resize {$width}x{$height} -density 72 -quality 90 -background white -flatten -alpha off {$file}.jpg");
    		// Converting files to "thumbnail" size
    		// $width = get_option( 'thumbnail_size_w' ); $width2 = $width*2;
    		// $height = get_option( 'thumbnail_size_h' ); $height2 = $height*2;
    		// exec("convert {$file}[0] -colorspace sRGB -resize {$width2}x{$height2}^ -resize 50% -gravity center -crop {$width}x{$height}+0+0 -density 72 -quality 90 -background white -flatten -alpha off {$file}.jpg");
    		$file_url = wp_get_attachment_url( $attachment_id );
    		$metadata['thumbnail'] = path_join( dirname($file_url), basename($file) . ".jpg" );
    	}
    	return $metadata;
    }
    add_filter( 'wp_generate_attachment_metadata', 'pdf_thumb_generate', 10, 2 );

    の部分の、画像作成のみが効いてないという感じです(URLの表示や、それ以降の置き換えなどはすべて動作している感じです)

    WPのバージョンは4.0.1です。
    何か特別なプラグインが必要でしょうか?><

    1. お使いのサーバーにimagemagickが入っていないか、古いバージョンなのではないでしょうか。

      限られた環境でしか試していないので、諸々確信はないですが、バージョンによっては、コマンドの変更で使えることもあります。

      phpinfoでimagemagickのバージョン(imagickという項目欄にあります。)をチェックできますか? あと、サーバ名とphpのバージョンも。

      追伸でお問い合わせの件ですが、マルチサイトであることはサムネイルが生成されないこととはおそらく関係ないと思います。

    2. XサーバのFAQを見ると、

      *************************************************************
      GDやImageMagickは使えますか?
      はい、既にインストール済みですのでご利用が可能です。
      ImageMagick のインストールパスは /usr/bin 、ImageMagick 付属のプログラム「convert」のコマンドパスは /usr/bin/convert となります。

      ****************************************************************************
      となっているのですが、FTPからそのディレクトリが見つかりませんでした。
      とりあえずちょっとXサーバに聞いてみます^^ありがとうございます

    3. Xサーバであればpdf_thumb_generate関数内のコマンド

      exec("convert {$file}[0] -colorspace sRGB -resize {$width}x{$height} -density 72 -quality 90 -background white -flatten -alpha off {$file}.jpg”);

      を以下に変更してみて下さい。

      exec("convert {$file}[0] -colorspace sRGB -resize {$width}x{$height} -density 72 -quality 90 -background white -flatten {$file}.jpg”);

      どうやらalpha offがない方が汎用性が高そうなので、この期に紹介しているコードの方も-alpha off無しに変更しました。

    4. で、できました~!

      頂いた変更をかけたらすぐでした。
      すごい!感動です><★
      ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です