Archive for 9月, 2011

Windows XPなどにインストールされているOutlook Expressは、
起動100回毎にメールボックスの自動最適化が行われます。

この動作が原因でメールボックスが壊れることがあるため、
無効にします。

1.  レジストリエディタを起動する。
「ファイル名を指定して実行」に「regedit」と入力し、実行する。

2. レジストリエディタより、以下のキーまで移動する。
HKEY_CURRENT_USER\Identities\【ユーザID】\Software\Microsoft\Outlook Express\5.0

3.  キーを編集する。
右ペインで「Compact Check Count」というキーがあるので、
削除するか、0にすることでリセットすることができます。
このカウントが100になると最適化を実行するメッセージが表示されるのです。

また、普通に使用している以外にも、デスクトップサーチを有効にしていると、
デスクトップサーチが自動的にメールに対してインデックスを作成するので、
自分では100回も開いていないのに、最適化が要求されることがあります。

参考:マイクロソフトのサポート情報
http://support.microsoft.com/kb/971708/ja

PEARのMDB2パッケージ使用例です。プレースホルダを用いています。
ちなみにDBパッケージはメンテナンスが終了しているため、使用が推奨されていません。


error_reporting(E_ALL);
if (error_reporting() > 6143) {

error_reporting(E_ALL & ~E_DEPRECATED);
}

require_once 'MDB2.php';

$dsn = array(
'phptype' => 'mysqli',
'username' => 'db_user',
'password' => 'db_password',
'hostspec' => 'localhost',
'database' => 'testDB',
);

$mdb2 =& MDB2::connect($dsn);

if (PEAR::isError($mdb2)) {

die($mdb2->getMessage());

}

///検索する名前を仮設定
$name = 'aaa';

$sql = "SELECT * FROM sampleTable WHERE name = ? ORDER BY id";

$stmt = $mdb2->prepare($sql, array('text'));
$res = $stmt->execute(array($name));

PHP5.3から新しいエラーレベルが追加されています。

・E_DEPRECATED
・E_USER_DEPRECATED

これらのエラーは推奨されていない関数を使用すると発生します。
詳細は http://php.net/manual/ja/migration53.deprecated.php

PEARなどのライブラリで推奨されない関数が利用されている場合があり、
require_onceなどで読み込んだだけでエラーが表示されてしまいます。

対処方法は、使用している関数を推奨されていないものから変更する。
ライブラリなどの利用していてどうしても関数が変更できない場合はエラーを
表示しないように変更する。

変更方法は大きく二つ。

・php.iniでエラー表示レベルの変更を行う

error_reporting  =  E_ALL
↓
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED

 

・非表示にするコードを書く。

if (error_reporting() > 6143) {
    error_reporting(E_ALL & ~E_DEPRECATED);
}

新しいXAMPPを使いたかったので、最新版(1.77)をダウンロード。
PEARのパッケージが足りなかったので「pear install xxxx」を実行したところ、
ダウンロードは正常にいくが、解凍時に「failed to mkdir」と表示される。

原因は、Windows Vista以降のUAC(User Account Control)が原因と思われる。
UACを無効にしていても、コマンドプロンプトでコマンドを実行する際は、
管理者権限が必要となる模様。

対応方法は、管理者権限でコマンドプロンプトを起動し、コマンドを実行する。

■文字エンコーディングのチェック例

<?php

$temp = isset($_GET['id']) ? $_GET['id'] : '';

    if (! mb_check_encoding($id, 'SHIFT_JIS')) {

        die('文字エンコーディングが正しくありません');

}

?>

 

■文字エンコーディングの変換例

<?php

$id = mb_convert_encoding($id, 'UTF-8', 'SHIFT_JIS');

?>