2013-08-25

MySQLiクラスをラップする

<?php
/**
 *  MySQLiクラスの拡張
 */
class MySQLiDB extends mysqli {

    private $_host;
    private $_user;
    private $_pass;
    private $_db;
    private $_char;
    private $_timeout;

    public function __construct($host, $user, $pass, $db, $char, $timeout) {

        parent::init();

        //  AUTOCOMMIT オフ
        if (!parent::options(MYSQLI_INIT_COMMAND, "SET AUTOCOMMIT = 0")) {
            die("Setting MYSQLI_INIT_COMMAND failed");
        }

        //  接続のタイムアウト 設定
        if (!parent::options(MYSQLI_OPT_CONNECT_TIMEOUT, $timeout)) {
            die("Setting MYSQLI_OPT_CONNECT_TIMEOUT failed");
        }

        //  接続
        if (!parent::real_connect($host, $user, $pass, $db)) {
            die("Connect Error (" . mysqli_connect_errno() . ") " . mysqli_connect_error());
        }

        //  デフォルトのクライアント文字エンコーディング 設定
        if (!parent::set_charset($char)) {
            die("Error loading character set {$char}: %s\n" . $mysqli->error);
        }

        //  ローカル変数に保存
        $this->_host = $host;
        $this->_user = $user;
        $this->_pass = $pass;
        $this->_db   = $db;
        $this->_char = $char;
        $this->_timeout = $timeout;

    }
}

2013-08-23

ファイル名やディレクトリ名にスペースを含むときに使える!chmodで再帰的にアクセス権を設定する

現在のディレクトリ以下のファイルとディレクトリに対して、再帰的にアクセス権を設定するには

find . -type f -print0 | xargs -0 chmod 644
find . -type d -print0 | xargs -0 chmod 755

とする。

-print0 | xargs -0

とすることで、名前にスペースを含むファイルやディレクトリが存在しても、処理してくれる。

2013-08-21

mb_send_mail() するなら mb_convert_encoding() は不要

おれも勘違いしていたが、mb_send_mail()を使ってメールを送るとき、mb_convert_encoding()使って、ISO-2022-JPへ変換しなくていい。

具体的には、たったこれだけ。

<?php
//  日本語だよって宣言して
mb_language('ja');

//  UTF-8で組んでるなら、文字エンコードをUTF-8に合わせて
mb_internal_encoding("UTF-8");

//  mb_send_mail()するだけ
mb_send_mail("dare@doko.koko", "メールの送信テスト", "これは、メールの送信テストです。");

これだけで、
件名は、mb_encode_mimeheader(mb_convert_encoding("件名", "ISO-2022-JP", "UTF-8"), "ISO-2022-JP") してくれるし
本文は、mb_convert_encoding("本文", "ISO-2022-JP", "UTF-8") してくれる。

ただ、Fromに日本語使いたいときだけは、自前で

$from = mb_encode_mimeheader(mb_convert_encoding("おれから", "ISO-2022-JP", "UTF-8"), "ISO-2022-JP")."<ore@doko.soko>";

ってやってから

mb_send_mail("dare@doko.koko", "メールの送信テスト", "これは、メールの送信テストです。", "From:".$from);

って送ってあげる。

.htaccessで403を404で返す

久しぶりにリライトルールを書いたよ。 ドキュメントルートに.htaccessを置く場合の記述↓ # 403.html は実体がなくてよい。この設定をすることで、あっても使われなくなる。 ErrorDocument 403 /403.html # 独自の404ページをドキュメ...