Pages

2009年9月11日金曜日

PHP Windows環境にPECL FileInfoをインストール

http://pecl.php.net/package/Fileinfo

でダウンロードしても中にDLLファイルが無い。。。

続いて

http://pecl4win.php.net/ext.php/php_fileinfo.dll

で取得しようにもサイトが改装中。。。

で、行きついたのがここ。
モジュールは発見したけど入れてみると。

http://dllcentral.com/php_fileinfo.dll/5.2.5.5/

だめだ。。。。なぜ。。。
PHP5.3.0からだと標準でモジュールが入っているみたいなんでコメントアウトを外すだけで良いんだけどな。。。

PHP5.3.0から持って来てみようかな。。。
ってやっぱり駄目だった。。。

PHP JPEG(JPG)のRGBとCMYK等のカラーモードを判別する方法

$FileInfo = getimagesize($ImagePath);

if ($FileInfo['channels'] == 1) {
    echo 'これはグレースケールです。';

} else if ($FileInfo['channels'] == 2) {
    echo 'これは?です。';

} else if ($FileInfo['channels'] == 3) {
    echo 'これはRGBです。';

} else if ($FileInfo['channels'] == 4) {
    echo 'これはCMYKです。';
}

2009年9月8日火曜日

PostgreSQL UNIQUE制約の削除

これらは全部ダメ

× ALTER TABLE [table_name] ALTER COLUMN [column_name] DROP INDEX [index_name];
× ALTER TABLE [table_name] ALTER COLUMN [column_name] DROP UNIQUE;
× ALTER TABLE [table_name] DROP INDEX [index_name];
× DROP INDEX [index_name];

これが正解

○ ALTER TABLE [table_name] DROP CONSTRAINT [column_name];

Windows CSEを利用してPostgreSQLに接続する

まずPostgreSQLのドライバをインストールする。 

検索 > ダウンロード


pgAdminⅢを起動してパスワードを入力してログインする。

データベースを選択して接続する。

 接続するとツールサーバー構成が選べるようになるので、そこにある pg_hba.conf を選択する。

127.0.0.1 の設定されているレコードをダブルクリックする。

方法という項目がmd5になっているので、password に変更する。

そして上書き保存してCSEで接続可能かを確認する。
※CSEでユーザー名、パスワードを入力するようになっているがODBCの設定で入力していれば必要なし。

今回参考にしたサイトはこちら

2009年9月4日金曜日

Smarty バイトで文字数指定する場合にエスケープもする。UTF8対応

前回紹介したものはエスケープはしていなかったので、XMLを出力する際には使えなかった。

理由
・エスケープしてからだとエスケープ後のエンティティが壊れてしまう可能性がある。
・丸めた後だと、バイト数がオーバーしてしまう。

以上の理由から、エスケープもしてくれるタイプを作った。


function smarty_modifier_org_escape_truncate_byte ($string, $length='', $end="…", $enc='UTF-8') {

    $length = (int)$length;
    $end = (string)$end;

    $MbLength = @mb_strlen($string, $enc);

    $ByteCount = 0;
    $ResStrings = $OverStr = '';

    for ($i=0; $i<$MbLength; $i++) {

        $str = htmlspecialchars(mb_substr($string, $i, 1, $enc));
        $len = strlen($str);

        if (($ByteCount + $len + strlen($end)) > $length && $OverStr == '')
            $OverStr = $ResStrings . $end;

        if (($ByteCount + $len) > $length) {
            return $OverStr;

        } else {
            $ResStrings .= $str;
            $ByteCount = $ByteCount + $len;
        }
    }
    return $ResStrings;
}

Followers