jetpack

WordPress更新時に出る Allowed memory size エラーの解消法

WordPressへの更新時

Fatal error: Allowed memory size of  ~

のエラーが発生した場合、各サーバーで設定しているphpのメモリ上限(memory_limit )を超えてメモリを使おうとしている為にエラーが発生します。
場合によってはサイト全体がエラーとなり管理画面にも入れないようになってしまいます。

この症状解決方法は2つ

memory_limitを上げる

各サーバーによってPHPの設定を変更するにはphp.iniや.htaccessまたwp-config.phpなどを編集することによってmemory_limitの設定を行うことができます。

Fatal error: Allowed memory size of  許可されているメモリリミット bytes exhausted (tried to allocate 上限以上に使おうとしたメモリの量)

の様にエラーが出ますので上記の「上限以上に使おうとしたメモリの量」以上にmemory_limitを設定できれば解決します。

WordPressのブラグインを止めてみる。

ただmemory_limit既にサーバーの上限に達している場合は使用しているメモリを減らすしか方法がありません。
WordPressのプラグインにはプラグインごとの負荷を表示できるものがありますので、負荷が大きいもの(≒メモリ消費の大きいもの)を止めると改善できます。(Advanced Metricsタブを使用すればWordPressが使用しているメモリの使用量<Memory Usage>等も確認できます)

P3 - Plugin Performance Profiler の画面
プラグインの負荷が確認できる「P3」( Plugin Performance Profiler)プラグイン。 jetpackの負荷が高いことが確認できる

メジャーなプラグインではjetpackがダントツの負荷率なのでもしエラーで管理画面に入れない場合は試しにFTPで「/wp-content/plugins」の中の「jetpack」ディレクトリをリネームまたは削除するとエラーが解消されるかと思います。

今回はkagoyaの共用サーバ(memory_limit 80M )でWordpress 4.8–jaの更新時でこのエラーに遭遇。

使わなくなったWindows XP や Vistaを再生する。

既にサポートが終わってしまったWindows XPや今年(2017年)春でサポートが終わってしまうWindows Vistaなど、今もネットにつないだ状態で使っている場合はいくらセキュリティソフトを導入してもOSのアップデートが行われませんのでハッカーに侵入される可能性が極めて高く、大変危険です。

ただ使わなくなったと言え、PC自体値段の張るものですし、予備のパソコンとして、お子さんやお孫さんにお下がりとして有効活用していただくことで新たな出費を抑えることが可能です。

linuxパソコンを使うためには「OS(オペレーティングシステム)」と呼ばれるパソコンを動かすために最低限必要な基本ソフトをパソコンにインストールする必要があり、一般的な「Windows」もこのOSの1つになります。

そのほかにも「Macintosh(通称Mac)」や「Uinx(ユニックス)」やUinxから派生した「Linux(リナックス)」と呼ばれるOSが存在します。

 

 

Unix と Linux って大丈夫?

このうちUnixとLinuxは基本的に無料(有料技術サポートや有料ソフトのついたバージョン<ディストリビューション>もあります)で使えるOSで、セキュリティ対応のためのアップデートも行われており、サポートの切れたXPなどから乗り換えることで、より安心してパソコンを使うことができます。

UnixとLinuxは無料なので本当に安全なのか?というご心配もあるかと思いますが、先にお話に出た「Mac」やIponeのOSである「iOS」はUinxが、AndroidスマホのOSである「Android」も実は中心部分にLinuxが使用されており、皆さんが日ごろご覧になっている「ホームページ」のデータを運用している「Webサーバ」と呼ばれるマシンも、大半はUnixかLinuxとなっており、日々ハッカーの攻撃にさらされても適切な設定・運用が行われていればこれに耐えうるようになっています。

また、ただ無料とうことでサーバに使われているだけではなく、Windowsの様に大した作業をしていなくても、知らないところで多くの処理が行われ、パソコンが重たくなる事はなく、必要な機能を最小限動かしてパソコン本体の処理能力を低下させにくい為、いわゆる「重たい」「固まる」などが起こりにくい事も使用される理由となっています。

マウスも使えるLinux 「Ubuntu(ウブントゥ)」

UnixとLinuxは基本的にはCUI(キャラクタユーザインタフェース)といいマウスなどは使えず、ただ画面にプログラムをするような命令(コマンド)を打ち込む難易度が高いものですがwindowsやMacの様にマウスが使えるGUIのものも存在します。

その中で一般的なものがUbuntuです。

Ubuntu

 

Ubuntuをパソコンにインストールするには

  1. 一旦別のパソコンでUbuntuインストール用のデータをダウンロード
    Ubuntu日本語remix https://www.ubuntulinux.jp/download/ja-remix
    Lubuntu(軽量版Ubuntu) http://lubuntu.me/downloads/
    WindowsパソコンにはCPUの違いにより32bitと64bitの2つの分類があります。
    お使いのPCにより任意のファイルをダウンロードしてください。
  2. 上記のファイルをダウンロードすると拡張子が「.iso」のものがダウンロードされますので、それをCDもしくはDVDに焼きます。
    (Windows7以降のパソコンであれば、空のCDやDVDをドライブに入れ、ダウンロードしたisoファイルを右クリックして「ディスクイメージの書き込み」等のメニューを選択すると簡単にCDやDVDに焼き付けることができます)
  3. 上記で焼いたCDもしくはDVDをインストールしたいパソコンに読み込ませインストール。

することが一般的です。
インストール作業などは基本日本語で行えますので、日常的にソフトのインストールされているような方であれば簡単にインストールができるかと思います。

lubuntuインストール後あぷでーとが実行されている
lubuntuインストール後アップデートが実行されている状態

注意点

上記で紹介したUbuntuをインストールする際にはハードディスクが初期化されて以前保存されていたデータが使えなくなります。
インストール作業前に必要なデータはバックアップしてください。

またWindows用のWordやExcelなどは使えなくなりますが、代わりになるソフトが用意されていますのでUbuntuでも書類作成される方はそちらをお使いいただく形になります。
一応WordやExcelと互換性もありますがまったく別のソフトになりますので操作方法が違っていたり、作ったファイルをWordやExcelで読み込むとレイアウトが崩れるなどの恐れがあります。

またプリンターを使用する場合はドライバと呼ばれるソフトをパソコンにインストールする必要がありますが、各メーカーではLinux用のドライバを用意していない場合があり、Ubuntuをインストールしたパソコンからプリンタが使えなくなる恐れもあります。
(比較的新しいプリンタであればCUPS というシステムを使用してLinuxと接続できるものも増えてきています。https://wiki.ubuntulinux.jp/UbuntuTips/Hardware/UsingPrinter

またインターネットの回線が遅い環境でデータ量の大きいインストールディスク用のデータダウンロードや、アップデートしながらのインストールは結構時間がかかるりますので、こちらも注意してください。

以上が注意点となりますが、とりあえずインターネットとメール、ちょこっとした書類作成ができればいいという事であれば問題なく使用できると思います。
またインストール作業が難しい場合は当社でもパソコン1台当たり持ち込みの場合5,000円程度(ご訪問の場合はプリンタの接続確認まで行いますが前述の通り対応していないプリンタもございますのでご了承ください。)でインストール代行を行っております。
インストール作業のご依頼に関してお気軽にお問い合わせください。

 

ECCUBE2.x(2.12.0~2.13.1)で「のし対応」プラグインが他のプラグインに干渉してしまうのラグインに干渉してしまう

ECCUBE2.x(2.12.0~2.13.1)で「のし対応」プラグインが他のプラグインに干渉してしまう

ECCUBE2での人気プラグインに「のし対応」プラグインhttp://www.ec-cube.net/products/detail.php?product_id=278)がありますが、商品購入の際のテンプレートを結構な感じで書き換えてしまうため他のプラグインが動かなくなったりします。
あとスマホ用のテンプレートもうまく動かなり、結局以下のような感じで対応しました。

  1. インストール済みの「のし対応プラグイン」のファイルをバックアップ:同プラグインを入れると以下のようにディレクトリ出来ます。
    dataフォルダ/downloads/plugin/GiftPaper

    ECCUBEの「data」フォルダ(※インストールのやり方でディレクトリ名やサーバー上のパスが変わります)以下にある「downloads」ディレクトリの中にプラグイン用のサブディレクトリが出来ており、今回は「のし対応プラグイン」の「GiftPaper」ディレクトリをFTPなどでローカルに落とします。

  2. GiftPaper.phpを書き換える:同プラグインの本体は「GiftPaper」ディレクトリ内の「GiftPaper.php」になります。
    こちらの414行あたりから

    function prefilterTransform(&$source, LC_Page_Ex $objPage, $filename) {
      $objTransform = new SC_Helper_Transform($source);
                                   以後省略

    の様にECCUBEデフォルトのテンプレートを書き換える処理が入ります。
    今回はスマホの表示がおかしい(のしの選択肢が出ない、選んでも確認画面に進めないなど)がありましたので、スマホのテンプレを書き換えている部分を修正しました。
    (ECCUBEでプラグインからデフォルトのテンプレを書き換える際には「SC_Helper_Transform(トランスフォーム)」)という機能を使って処理を行います。
    基本的にはJQueryで要素を書き換えたり追加する処理と同じです。詳細に関してはプラグイン作成のリファレンス(http://downloads.ec-cube.net/src/manual/12.0_plugin/plugin.pdf)の11ページあたりを参照してください。)
    以下のソースでは「//リプレイスでの対応」とあるようにテンプレートのある部分を「replaceElement」を使ってごっそり置き換える処理を行っています。(461行目)

     // 458行目辺り。お支払方法・お届け時間等の指定画面
     if(strpos($filename, "shopping/payment.tpl") !== false) {
     //リプレイスでの対応
     $objTransform->select('section#undercolumn')->replaceElement(file_get_contents($template_dir . 'shopping/plg_GiftPaper_payment_section_replace.tpl'));
     //$objTransform->select("section#undercolumn section.point_area", 0)->insertAfter(file_get_contents($template_dir . "shopping/plg_GiftPaper_payment_section.tpl"));
     }

    この「replaceElement」で置き換えているのが「GiftPaper」ディレクトリ内の「shopping/plg_GiftPaper_payment_section_replace.tpl」ファイルになりますが、他のプラグインが書き換えようとする際に必要な要素やセレクタ(idやclass)が含まれておらずテンプレートが書き換えられない為干渉が起こってしまう模様。
    なのでその下にコメントアウトしてある用意してある462行目

    $objTransform->select("section#undercolumn section.point_area", 0)->insertAfter(file_get_contents($template_dir . "shopping/plg_GiftPaper_payment_section.tpl"));

    のほうをコメントを取ってアクティブにします。(逆に461行目の部分はコメントアウトするか消します。)
    この部分ではデフォルトのテンプレートの「section#undercolumnのsection.point_area」の後に「GiftPaper」ディレクトリ内の「shopping/plg_GiftPaper_payment_section.tpl」を挿入するという処理ですので他のプラグインで干渉する心配がなくなります。

    うまく動かない場合はsection#undercolumn section.point_area のセレクタの部分が適切かどうか見直し、「GiftPaper」ディレクトリ内の「shopping/plg_GiftPaper_payment_section.tpl」も見直してもらうと大丈夫かと思います。

MODX Revolution (MODX 2.x) のアップデート手順

MODX Revolution (MODX 2.x) のアップデート手順は至ってシンプルです。

  1. バックアップ:phpmyadmin等を使ってDBのバックアップとFTPなどを使ってサーバ上のファイル類丸ごとバックアップします。
  2. 新しいバージョンのファイルで上書き:FTPなどを使って予めダウンロードしていた新しいバージョンのmodx 2.x のファイルを展開しFTPで上書きします。
    そののちブラウザでsetupページ

    http://ドメイン/setup

    にアクセスし、アップグレード作業を進めます。(この時すでにmodxがインストール済みの場合は自動的にアップデート関連のチェックが入って「次へ」のボタンを押すだけでアップデートが完了します。)
    その際注意が必要なのは2.2.x のバージョンから2.3.x、2.4.x、2.5.xなどそれ以上のバージョンにアップデートする際、2.2.0以降ででDBのフィールドが6つほど追加になっており、2.3.0、2.4.0、2.5.0のように各バージョンの最後が「.0」で終わるものでDBのフィールドが変更になっていることがほとんどの為

    2.2.x2.3.02.4.02.5.0

    のように段階的にバージョンアップする様にします。

  3. 念のため「キャッシュをクリア」のメニューでキャッシュをクリアし、各所動作確認を行います。
    この際Modx自体がフロントにAjaxを多用しているためブラウザ側のキャッシュもクリアしないとpackagemanager(パッケージマネージャー)が動かなくなったりします。

    もしキャッシュをクリアしてもうまく動かない場合は「エラーログ」メニューからエラーログを確認し、エラーがある場合は適時修正を行います。

以上バックアップ以外は基本的にFTPでファイルを上書きするだけなので問題が起こらなければ3~5分程度で完了する工程です。

 

grocerycrud.でデートピッカーがエラー

Grocery CRUDのDatepickerでエラーが出る

Codeigniter のCRUDを簡単に生成する「Grocery CRUD」を使ってましたら、いつも間にか datetime型を扱う際に自動で設定されるDatepickerがjqueryのエラーで動かない。
でもよくよく見てみると直接Datepickerがエラーを起こしてるんじゃなくて、同じフォーム内にbooleanを扱うようなラジオボタンがあると連鎖的にエラーを起こすみたい。

grocerycrud.でデートピッカーがエラー

jquery.uniform.min.js:1 Uncaught TypeError: Cannot read property ‘msie’ of undefined(anonymous function)
jquery.uniform.config.js:2 Uncaught TypeError: $(…).uniform is not a function

と言ったもので、Codeigniter のassets以下のgrocery_crudのファイル群の中

grocery_crud\js\jquery_plugins\jquery.uniform.min.js

grocery_crud\js\jquery_plugins\config\jquery.uniform.config.js

がその原因みたい。
Cannot read property ‘msie’  とあるのでユーザエージェントの取得がかなり古いバージョンのjqueryの書き方なのでこれで躓いているみたい
なのでjquery.uniform.min.jsの最新バージョンと差し替える為以下のページからアーカイブ(Uniform v2.1.2)を落とすなりしてgrocery_crudディレクトリ内のjquery.uniform.min.js(Uniform v2.0.0)と差し替える
https://github.com/pixelmatrix/uniform

これにて動作するようになりました。