CakePHP Strict Standardsエラーの消し方

サーバー移転時に起きたエラー
PHP5.3→5.6になったのが原因なのかな。

Strict Standards: Redefining already defined constructor for class Object in /home/***/cake/libs/object.php on line 63

Strict Standards: Non-static method Configure::getInstance() should not be called statically in /home/***/cake/bootstrap.php on line 47

CakePHPのバージョンが1.2.5

PHP5.4からエラーレベルE_ALLにE_STRICTが含まれたのが原因です。

CakePHPはプログラム上でerror_reportingを行っているので、php.iniやhtaccessで変更しても×なのです。
修正するにはCakePHPのプログラムを直すということになります。

修正するのに若干手間がかかるので、私は下記の対応をしました。

CakePHPのバージョンアップ

1.2.5 → 1.2.18

バージョンアップの方法はcakeフォルダをまるごとごっそり入れ替えるだけです。

これでエラーがなくなりましたとさ。

Deprecated警告の消し方

Deprecated: Function ereg_replace() is deprecated in ~~~~

PHP5.3から上記警告が表示されるようになっています。
将来的にサポートされなくなる関数を使用した場合に表示される警告です。

その関数を修正するのが良いのですが、状況によっては修正に時間がかかる場合もありますね。

php.iniや.htaccess、ソースで表示をOFFの設定が可能です。

php.iniの場合(要Apacheのリロードor再起動)

error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED

.htaccessの場合

php_value error_reporting "E_ALL & ~E_NOTICE & ~E_DEPRECATED"

ソースの場合

error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED);

Ktai Library for CakePHP1.2の絵文字変換時の文字化け修正

CakePHP 1.2.18

携帯の絵文字変換のコンポーネント、ヘルパーで「Ktai Library for CakePHP1.2」を使っていました。
サーバー移転をしたときに動作しなくなったので、その修正記録

Ktai Libraryのバージョンは0.2.0
(2017/11時点の最新版は0.4.2です。)

auでの絵文字変換がうまくいかない。
バージョンアップも考えたが、色々変更点があって修正対応に時間がかかりそうだったため
0.2.0を修正することにした。

処理の流れとしては下記のような感じ

1.docomoの絵文字を退避
2.文字コード変換
3.docomoの絵文字をauのバイナリ絵文字へ変換

文字コードの変換はうまくいっているが絵文字でNGで文字化け

PHPの文字コード設定は下記
ソースはUTF-8
表示はSJIS

vendors/ecw/lib3gk.php
ソースを追ってみる。

755行目あたり

		if($output_encoding == KTAI_ENCODING_UTF8){
			if($carrier == KTAI_CARRIER_KDDI && $binary){
				$oekey = 2;
			}else{
				$oekey = 1;
			}
		}else{
			$oekey = 0;
		}

出力がUTF-8、KDDIなら処理になっている。
こちら側の出力はSJIS
フィーチャーフォンはUTF-8表示は一部端末のみ

ということでこちらを修正(2箇所)

#		if($output_encoding == KTAI_ENCODING_UTF8){
		if($output_encoding == KTAI_ENCODING_SJIS){
			if($carrier == KTAI_CARRIER_KDDI && $binary){
				$oekey = 2;
			}else{
#				$oekey = 1;
				$oekey = 0;
			}
		}else{
			$oekey = 0;
		}

これで絵文字も表示されるようになった。

プロセスの停止方法

PostgreSQLは使い慣れていません。

DB管理ツールからSQLを投げたらずっとウェイト状態になってしまいました・・・

SQLでプロセスの停止ができるようなので試してみました。

プロセスIDの確認

SELECT * from pg_stat_activity;

プロセスを停止させる。

SELECT pg_cancel_backend(プロセスID);

上で駄目なら

SELECT pg_terminate_backend(プロセスID);

上で駄目なら直接Kill

# kill -9 プロセスID

この場合はroot権限が必要だったりするので使えないことがあります。

最初の投稿

さて、最初の投稿です。

うーちゃんです。よろしくね!

WordPressのカスタマイズをしながらの~ とりあえず投稿!

どのぐらい続くのか分かりませんが・・・

頑張ります!