PHP の薬箱 エラー・トラブル回避のテクニックとセキュリティ対策

comments(0) | trackback(0)

はてなブックマークに追加 はてなブックマーク数 del.icio.us に追加 livedoor クリップに追加 livedoor クリップ数 Yahoo!ブックマークに追加

  486167140X
  amazon.co.jp 詳細ページへ
  佐久嶋 ひろみ (著)
  九天社
  ISBN: 486167140X
  2006/11
  2,940 円

  Amazon には目次がないけど,出版社のサイトにでていました.

- PHP の薬箱
  http://www.9-ten.co.jp/bookdata/140X.php

  これをみると,Symfony や Zend Framework など最近の話題も扱っているようにみえます (どれくらいのボリュームかはまた別ですが).
  対象がいまいち分からなかったりもするのですが,逆引き用として使えるのかも.ちょっと気になる.

タグ: [Books][PHP]

PHP 5.2.0 でデフォルトの拡張モジュールになった JSON 拡張モジュールを試してみる

comments(0) | trackback(0)

はてなブックマークに追加 はてなブックマーク数 del.icio.us に追加 livedoor クリップに追加 livedoor クリップ数 Yahoo!ブックマークに追加

- JSON 関数
  http://php.net/json

$data = array(
    'a' => '',
    'b' => '',
    'c'=> array(
        'd' => ''
    )
);

mb_convert_variables('UTF-8', 'EUC-JP', $data);
$json = json_encode($data);
echo $json, "\n";

$array = json_decode($json, true);
mb_convert_variables('EUC-JP', 'UTF-8', $array);
print_r($array);


  文字コードは EUC-JP で.文字コードが UTF-8 の場合は,mb_convert_variables() での文字コードの変換は必要ありません.

{"a":"\u3042","b":"\u3044","c":{"d":"\u3046"}}
Array
(
    [a] => あ
    [b] => い
    [c] => Array
        (
            [d] => う
        )

)

  PHP 5.1.6 以前や PHP 4.4.4 以前の場合は Jsphon を使えば同等のことができます.
  もちろん,JSON 拡張モジュールをインストールすれば古いバージョンの PHP でも JSON 関数が使えます.

- Jsphon
  http://www.hawklab.jp/jsonencoder/

- PECL :: Package :: json
  http://pecl.php.net/package/json

タグ: [PHP]

mb_convert_variables() は連想配列のキーを文字コードを変換しない

comments(0) | trackback(0)

はてなブックマークに追加 はてなブックマーク数 del.icio.us に追加 livedoor クリップに追加 livedoor クリップ数 Yahoo!ブックマークに追加

- mb_convert_variables
  http://php.net/mb_convert_variables

$array = array(
    'あいうえお' => 'アイウエオ'
);

mb_convert_variables('UTF-8', 'EUC-JP', $array);
var_dump($array);


  文字コードは EUC-JP で.「アイウエオ」は UTF-8 に変換されるけど,「あいうえお」は EUC-JP のまま.

  まあ,文字コードが変換されるとキーが変わってしまうわけなので,そういう仕様なんでしょう.

タグ: [PHP]

XAMPP に含まれる Apache,MySQL,PHP のバージョンの遷移

comments(4) | trackback(1)

はてなブックマークに追加 はてなブックマーク数 del.icio.us に追加 livedoor クリップに追加 livedoor クリップ数 Yahoo!ブックマークに追加

  以下の情報は古いものです。最新の情報は、[2007-11-04-1] XAMPP に含まれる Apache,MySQL,PHP のバージョンの遷移にあります。




  約一年ぶりに調査.

XAMPP      リリース日 Apache 2.x MySQL 4.x MySQL 5.x PHP 4.x    PHP 5.x
0.9        2003-07-22 2.0.47      4.0.14                4.3.3 rc2
1.0        2003-09-03 2.0.47      4.0.14                4.3.3     
1.1        2003-10-13 2.0.47      4.0.16                4.3.3     
1.2        2003-11-04 2.0.48      4.0.16                4.3.4     
1.3        2004-02-10 2.0.49      4.0.18                4.3.6     
1.4        2004-03-25 2.0.49      4.0.18                4.3.4     
1.4.2      2004-04-06 2.0.49      4.0.18                4.3.6     
1.4.3      2004-06-12 2.0.49      4.0.20a               4.3.7     
1.4.4      2004-07-03 2.0.50      4.0.20                4.3.7     
1.4.5      2004-07-14 2.0.50      4.0.20                4.3.8      5.0.0
1.4.6      2004-08-16 2.0.50      4.0.20                4.3.8      5.0.1
1.4.7      2004-09-18 2.0.51      4.0.21                4.3.8      5.0.1
1.4.8      2004-09-25 2.0.51      4.0.21                4.3.9      5.0.2
1.4.9      2004-10-02 2.0.52      4.0.21                4.3.9      5.0.2
1.4.10     2004-12-05 2.0.52      4.1.7                 4.3.9      5.0.2
1.4.11     2004-12-25 2.0.52      4.1.8                 4.3.10     5.0.3
1.4.12     2005-02-20 2.0.53      4.1.9                 4.3.10     5.0.3
1.4.13     2005-04-10 2.0.54      4.1.11                4.3.11     5.0.4
1.4.14     2005-06-19 2.0.54      4.1.12                4.3.11     5.0.4
1.4.15     2005-08-14 2.0.54      4.1.13                4.4.0      5.0.4
1.4.16     2005-10-03 2.0.54      4.1.14                4.4.0      5.0.5
1.5.0      2005-11-06 2.0.55                 5.0.15     4.4.1      5.0.5
1.5.0-pl1 2006-01-08 2.0.55                 5.0.15     4.4.1-pl1 5.0.5
1.5.1      2006-01-08 2.2.0                  5.0.18     4.4.1-pl1 5.1.1
1.5.2      2006-04-26 2.2.0                  5.0.20     4.4.2-pl1 5.1.2
1.5.3      2006-05-28 2.2.2                  5.0.21     4.4.2-pl1 5.1.4
1.5.4      2006-09-10 2.2.3                  5.0.24a    4.4.4      5.1.6
1.5.4a     2006-10-04 2.2.3                  5.0.24a    4.4.4      5.1.6
                                                                    
最新版                 2.2.3       4.1.21     5.0.26     4.4.4      5.1.6


  最新版は,2006-10-22 での各プロダクトの最新バージョン.
  調査対象は XAMPP for Windows.

- XAMPP
  http://sourceforge.net/projects/xampp/
  http://www.apachefriends.org/en/xampp.html

タグ: [MySQL][PHP]

都道府県を扱う Perl モジュール Geography::JapanesePrefectures を PHP に移植してみた

comments(37) | trackback(0)

はてなブックマークに追加 はてなブックマーク数 del.icio.us に追加 livedoor クリップに追加 livedoor クリップ数 Yahoo!ブックマークに追加

<?php
class Geography_JapanesePrefectures
{
    var $_prefectures = array(
        array('id' => 1,  'name' => '北海道',   'region' => '北海道'),
        array('id' => 2,  'name' => '青森県',   'region' =>   '東北'),
        array('id' => 3,  'name' => '岩手県',   'region' =>   '東北'),
        array('id' => 4,  'name' => '宮城県',   'region' =>   '東北'),
        array('id' => 5,  'name' => '秋田県',   'region' =>   '東北'),
        array('id' => 6,  'name' => '山形県',   'region' =>   '東北'),
        array('id' => 7,  'name' => '福島県',   'region' =>   '東北'),
        array('id' => 8,  'name' => '茨城県',   'region' =>   '関東'),
        array('id' => 9,  'name' => '栃木県',   'region' =>   '関東'),
        array('id' => 10, 'name' => '群馬県',   'region' =>   '関東'),
        array('id' => 11, 'name' => '埼玉県',   'region' =>   '関東'),
        array('id' => 12, 'name' => '千葉県',   'region' =>   '関東'),
        array('id' => 13, 'name' => '東京都',   'region' =>   '関東'),
        array('id' => 14, 'name' => '神奈川県', 'region' =>   '関東'),
        array('id' => 15, 'name' => '新潟県',   'region' =>   '信越'),
        array('id' => 16, 'name' => '富山県',   'region' =>   '北陸'),
        array('id' => 17, 'name' => '石川県',   'region' =>   '北陸'),
        array('id' => 18, 'name' => '福井県',   'region' =>   '北陸'),
        array('id' => 19, 'name' => '山梨県',   'region' =>   '関東'), // 信越の場合も
        array('id' => 20, 'name' => '長野県',   'region' =>   '信越'),
        array('id' => 21, 'name' => '岐阜県',   'region' =>   '東海'),
        array('id' => 22, 'name' => '静岡県',   'region' =>   '東海'),
        array('id' => 23, 'name' => '愛知県',   'region' =>   '東海'),
        array('id' => 24, 'name' => '三重県',   'region' =>   '東海'), // 近畿の場合も
        array('id' => 25, 'name' => '滋賀県',   'region' =>   '近畿'),
        array('id' => 26, 'name' => '京都府',   'region' =>   '近畿'),
        array('id' => 27, 'name' => '大阪府',   'region' =>   '近畿'),
        array('id' => 28, 'name' => '兵庫県',   'region' =>   '近畿'),
        array('id' => 29, 'name' => '奈良県',   'region' =>   '近畿'),
        array('id' => 30, 'name' => '和歌山県', 'region' =>   '近畿'),
        array('id' => 31, 'name' => '鳥取県',   'region' =>   '中国'),
        array('id' => 32, 'name' => '島根県',   'region' =>   '中国'),
        array('id' => 33, 'name' => '岡山県',   'region' =>   '中国'),
        array('id' => 34, 'name' => '広島県',   'region' =>   '中国'),
        array('id' => 35, 'name' => '山口県',   'region' =>   '中国'),
        array('id' => 36, 'name' => '徳島県',   'region' =>   '四国'),
        array('id' => 37, 'name' => '香川県',   'region' =>   '四国'),
        array('id' => 38, 'name' => '愛媛県',   'region' =>   '四国'),
        array('id' => 39, 'name' => '高知県',   'region' =>   '四国'),
        array('id' => 40, 'name' => '福岡県',   'region' =>   '九州'),
        array('id' => 41, 'name' => '佐賀県',   'region' =>   '九州'),
        array('id' => 42, 'name' => '長崎県',   'region' =>   '九州'),
        array('id' => 43, 'name' => '熊本県',   'region' =>   '九州'),
        array('id' => 44, 'name' => '大分県',   'region' =>   '九州'),
        array('id' => 45, 'name' => '宮崎県',   'region' =>   '九州'),
        array('id' => 46, 'name' => '鹿児島県', 'region' =>   '九州'),
        array('id' => 47, 'name' => '沖縄県',   'region' =>   '沖縄'),
    );

    function prefectures()
    {
        return array_map(create_function('$p', 'return $p["name"];'), $this->_prefectures);
    }

    function regions()
    {
        return array_merge(array_unique(array_map(create_function('$p', 'return $p["region"];'), $this->_prefectures)));
    }

    function prefectures_in($region)
    {
        $pref = array_filter($this->_prefectures, create_function('$p', "return (\$p['region'] == '$region');"));
        return array_merge(array_map(create_function('$p', 'return $p["name"];'), $pref));
    }

    function prefectures_id($prefecture)
    {
        foreach ($this->_prefectures as $pref) {
            if ($pref['name'] == $prefecture) {
                return $pref['id'];
            }
        }
    }
}
?>


- 使い方

<?php
require_once 'Geography_JapanesePrefectures.php';

$geo = new Geography_JapanesePrefectures;
print_r($geo->prefectures());
// -> array(北海道, 青森県, 岩手県, ..., 鹿児島県, 沖縄県)

print_r($geo->regions());
// -> array(北海道, 東北, 関東, ..., 九州, 沖縄)

print_r($geo->prefectures_in('関東'));
// -> array(茨城県, 栃木県, 群馬県, 埼玉県, 千葉県, 東京都, 神奈川県, 山梨県)

print_r($geo->prefectures_id('東京都'));
// -> 13
?>


  山梨県は関東なのかとか,三重県は東海なのかだとかこの辺りはいろいろあるらしいけど,オリジナルに合わせてあります.
  全体的に create_function() 使いすぎてキモイことになっていまが,あまり気にしないでください.
  特に,prefectures_in() のキモさはどうにかしたいところであります.

- Geography::JapanesePrefectures
  http://search.cpan.org/~tokuhirom/Geography-JapanesePrefectures/lib/Geogra ...

- via: オレンジニュース
  http://secure.ddo.jp/~kaku/tdiary/20060915.html#p09

タグ: [PHP][Perl]

最新 LL フレームワークエクスプローラ 5 大フレームワーク徹底攻略

comments(0) | trackback(0)

はてなブックマークに追加 はてなブックマーク数 del.icio.us に追加 livedoor クリップに追加 livedoor クリップ数 Yahoo!ブックマークに追加

  477412818X
  amazon.co.jp 詳細ページへ
  Software Design 編集部
  技術評論社
  ISBN: 477412818X
  2006/7/7
  1,974 円

Lightweight Language の初学者を対象に、Ruby On Rails、Maple、Ethna、TurboGears、Catalyst の 5 大フレームワークを徹底解説する。

  ということで,以下の 5 つのフレームワークの特集らしい.

- via: www.textfile.org
  http://d.hatena.ne.jp/textfile/20060707/fw

タグ: [Books][Ruby][PHP][Perl]

続・MySQL 4.1.x な環境で phpMyAdmin を EUC-JP で使う方法

comments(0) | trackback(0)

はてなブックマークに追加 はてなブックマーク数 del.icio.us に追加 livedoor クリップに追加 livedoor クリップ数 Yahoo!ブックマークに追加

  [2006-06-17-1] MySQL 4.1.x な環境で phpMyAdmin を EUC-JP で使う方法 の続き.
  よく考えたら,PHP の設定を変えてあげれば何も問題なくできた.なんてこった.

- phpMyAdmin/.htaccess

php_value mbstring.internal_encoding "UTF-8"
php_value mbstring.http_output       "UTF-8"
php_value mbstring.script_encoding   "UTF-8"
php_value mbstring.http_input        "UTF-8"

タグ: [MySQL][PHP]

PHP Hacks - プロが教えるWebプログラミングテクニック

comments(0) | trackback(0)

はてなブックマークに追加 はてなブックマーク数 del.icio.us に追加 livedoor クリップに追加 livedoor クリップ数 Yahoo!ブックマークに追加

  4873112915
  amazon.co.jp 詳細ページへ
  Jack D. Herrington (著), 牧野 聡 (訳)
  オライリー・ジャパン
  ISBN: 4873112915
  2006/06/23
  3,780 円

- 目次
  http://www.oreilly.co.jp/books/4873112915/toc.html

  『PHP デスクトップリファレンス』『入門 PHP セキュリティ』 に続く,O'REILLY から久しぶりの PHP 本は,Hacks シリーズの『PHP Hacks』.

DHTML や Ajax に関する Hack から、コードや Flash ムービーの自動生成、さらにはデータベースと連携したメッセージキューの実現までさまざまな Hack を紹介

(http://www.oreilly.co.jp/books/4873112915/)

  ちょっと期待できそう.ちなみに原著は以下のもの.

- PHP Hacks (Hacks)
  0596101392
  amazon.co.jp 詳細ページへ
  Jack D. Herrington (著)
  Oreilly & Associates Inc
  ISBN: 0596101392
  2005/12
  3,054 円

タグ: [Books][PHP]

MySQL 4.1.x な環境で phpMyAdmin を EUC-JP で使う方法

comments(4) | trackback(0)

はてなブックマークに追加 はてなブックマーク数 del.icio.us に追加 livedoor クリップに追加 livedoor クリップ数 Yahoo!ブックマークに追加

  MySQL 4.1.x から文字コード関係のトラブルが多いみたい.
  phpMyAdmin を使ってみたら,EUC-JP に設定して,phpMyAdmin の言語を「日本語 - Japanese (euc)」にしても,
  画面は文字化けするし,「MySQL の文字セット」も UTF-8 Unicode (utf8) のままで,データの挿入などが行えない.

  そこで,ちょっと強引に,phpMyAdmin のファイルを書き換えることにする.

- phpMyAdmin/libraries/database_interface.lib.php

function PMA_DBI_postConnect($link, $is_controluser = false)
        :
    /*
    if (PMA_MYSQL_INT_VERSION >= 40100) {
        :
    } else {
        require_once('./libraries/charset_conversion.lib.php');
    }
    */
    require_once('./libraries/charset_conversion.lib.php');
}


  MySQL 4.1 の if 文をごっそりコメントアウトして,./libraries/charset_conversion.lib.php を強制的に読み込ませるようにする.

  phpMyAdmin の言語を「日本語 - Japanese (euc)」にすると「MySQL の文字セット」が「 EUC-JP Japanese (ujis)」になって,
  データの挿入も問題なく行えるようになった.

  ちなみに,config.inc.php の言語関係の設定は以下のようにした.

$cfg['DefaultLang'] = 'ja-euc';
$cfg['DefaultConnectionCollation'] = 'ujis_japanese_ci';
$cfg['DefaultCharset'] = 'ja-euc';


  なお,phpMyAdmin 2.8.0 から設定ファイルの雛形の場所が変更された.
  phpMyAdmin/libraries/config.default.php にあるので,これを phpMyAdmin/config.inc.php にコピーして使うことになる.
  こうすることで,phpMyAdmin 2.8.0 から新しく導入された (分かりにくい) setup.php を使わないで設定ができる.

- 追記

$cfg['Lang'] = 'ja';


  を指定すれば,行けるらしいという情報を頂いたが,Notice が発生してだめですね.

Notice: Undefined index: ja-euc

  ja-euc にしても同じ結果に.

  スマートな方法はないものでしょうか.

- 解決
  [2006-06-26-2] 続・MySQL 4.1.x な環境で phpMyAdmin を EUC-JP で使う方法

タグ: [MySQL][PHP]

PHP で UTF-8 に付いている BOM を削除する方法

comments(0) | trackback(0)

はてなブックマークに追加 はてなブックマーク数 del.icio.us に追加 livedoor クリップに追加 livedoor クリップ数 Yahoo!ブックマークに追加

  UTF-8 に BOM (Byte Order Mark) が付くのが良いのか,悪いのかは分からないけど,問題が多そうな気がする.
  Windows に付いているメモ帳はご丁寧に BOM をつけてくる.

- When a BOM is used, is it only in 16-bit Unicode text?
  http://www.unicode.org/unicode/faq/utf_bom.html#25

  上記の記事によると,ファイルの先頭 3 バイトに EF BB BF があれば,UTF-8 に付く BOM らしいので,これを判別して削除する方法.

function delete_bom($str)
{
    if (ord($str{0}) == 0xef && ord($str{1}) == 0xbb && ord($str{2}) == 0xbf) {
        $str = substr($str, 3);
    }
    return $str;
}


  とりあえずこれで OK.

タグ: [PHP]