CakePHP2.xとPHP5.4でStrict Errorが出た場合の対処法

PHPでは、error_reportingの設定により出力するメッセージを変更可能ですが、PHP5.4からE_ALLにE_STRICTが含まれるようになりました。
通常、E_ALLからE_STRICTを除いてエラーを出力したい場合、php.iniで

error_reporting = E_ALL & ~E_STRICT

とすることで制御可能になります。
エラーレベルについては、マニュアル参照
http://www.php.net/manual/ja/errorfunc.constants.php

但し、CakePHPでは、フレームワーク中でerror_reportingを定義している為、php.iniの設定が反映されません。

その設定が、
cakephp/lib/Cake/bootstrap.php

error_reporting(E_ALL & ~E_DEPRECATED);

で設定されています。

但し、これはフレームワーク本体のプログラムですので、ここを修正すべきではありません。

Cake 2.x では Error コンフィギュレーションが設定ファイルで定義出来るようになりましたので、これを利用します。
cakephp/app/Config/core.php

Configure::write('Error', array(
   'handler' => 'ErrorHandler::handleError',
   'level' => E_ALL & ~E_DEPRECATED,
   'trace' => true
 ));

のlevel部分に~E_STRICTを追加します。

Configure::write('Error', array(
   'handler' => 'ErrorHandler::handleError',
   'level' => E_ALL & ~E_DEPRECATED & ~E_STRICT,
   'trace' => true
 ));

これで、E_Strictのエラーが表示されなくなります。

尚、error_reportingは、PHP5以降で下記の様に変わっています。

バージョン 説明
5.4.0 E_STRICT が E_ALL に含まれるようになりました。
5.3.0 E_DEPRECATED と E_USER_DEPRECATED が追加されました。
5.2.0 E_RECOVERABLE_ERROR が追加されました。
5.0.0 E_STRICT が追加されました (これは E_ALL には含まれません)。

エラー処理なんて、そんなに変わる所でもないと思うのですが。。。メジャーバージョンアップ毎に変わっていくのがPHPらしいですね。

phpMyadminにファイルが大きすぎてインポートできないよ、って言われた時には

毎回、旦那さんに聞いてしまうのでメモ。

ターミナルにて

$ mysql5 -u ユーザー名 -p データベース名 < インポートするファイル名

で、パスワード聞かれるから入力、ENTER。
しばらくしたら読み込まれてるのでphpMyadminとかで確認する。
インポートするファイルがあるフォルダまで移動して実行したら楽。

wordpressのis_front_page() と is_home()の出番って…

wordpressのトップページの判別に is_front_page() と is_home()という条件分岐タグがありますが、動きが変なのでちょっと困った件。

基本的な動きのテストはこちらのページなどを参照。

is_front_page() と is_home() – swhrykの日記

ということでもともと取り扱い注意なややこしさをお持ちのタグなのですが、この上に、間にquery_postsを使うとfalseを返してくれちゃうので、あんまり使えるケースが無い気がします。。。
私の使い方が良くないのかしら。。。

トップページをindex.phpで作成していて、sidebar.phpで判別させたかったのですがquery_posts満載で当然使えなかったというケースでは、index.phpで変数にtrueを渡して、sidebar.phpでglobalにして判別させる、という手を使ってみました。

ただし、バージョン2.9.1でのお話なので、最新版だと解消されてるかも?と期待をしています(が、上記のケースではカスタムし過ぎて迂闊にバージョンアップ出来ないので未確認です)。

参照:
Conditional Tags « WordPress Codex

CentOS5で動かしてるWordPressをsFTP経由で自動アップデート

peclのssh2ライブラリを導入すると、WordpressでsFTP経由の自動アップデートが出来が利用可能になります。

まずlibssh2のインストール。

# wget http://surfnet.dl.sourceforge.net/sourceforge/libssh2/libssh2-1.0.tar.gz
# tar -zxvf libssh2-1.0.tar.gz
# cd libssh2-1.0/
# ./configure
# make
# make install

libssh2のインストールが出来たらpecl-ssh2のインストール

pecl install -f ssh2

/etc/php.iniで、

extension=ssh2.so

を有効化し、Apacheの再起動

/etc/init.d/httpd restart

で完了。

これで、プラグイン、テーマ、wordpress本体のsFTP経由自動アップデートが利用出来ます。