2007年6月22日金曜日

HTML_QuickForm+Smartyで複数のテキストフィールド値を配列で受け取る

たとえば

<input type="text" name="hoge[]" value="111">
<input type="text" name="hoge[]" value="222">

こういうHTMLフォームがあり、送信されたデータをphpで受け取ると、php側ではこれを配列として値を扱うことができます。

print $_REQUEST["hoge"][0]; //←111
print $_REQUEST["hoge"][1]; //←222

これをHTML_QuickForm+Smartyの環境で実現する方法を見つけたのでメモしておきます。
http://ml.php.gr.jp/pipermail/php-users/2005-December/028406.html

2007年6月21日木曜日

phpMyAdminのデフォルトテーマを指定する

config.inc.phpにて、以下の行を追加するだけです。
$cfg['ThemeDefault'] = 'darkblue_orange';

見ての通りです。『$cfg['ThemeDefault'] = 'テーマ名';』とするだけ。簡単です。
もちろん、指定するテーマがインストールされている必要があります。テーマはデフォルトで入っているものの他にも、sourceforgeでリリースされているものから選んで使うこともできます。
phpMyAdminはさまざまな案件で使っているため、複数を同時に開くなんてこともよくあります。案件によってテーマを分けることで単純ミスを防ぐ有効な手段になるんじゃないかと思っています。

2007年6月19日火曜日

ウェブキャンペーン用にシリアルキーを生成する

仕事で「キャンペーン対象ユーザーに対してシリアルキーを配布し、ユーザーがそのシリアルキーを使ってキャンペーンに応募することができる」というLAMPのウェブアプリケーションを作ることになりました。
最近よく見かける、缶コーヒーとかお菓子のキャンペーンみたいなのとほぼ同じ内容です。(規模はぜんぜん違いますが)
シリアルキーというのはWindowsやOfficeなどのPCソフトのシリアルキーのようなもの。たとえば「7RI15XRME8DHRI2F」という感じで、悪用できないようランダムで予測できないものが必要になります。
最初はMySQLの関数やphpの関数(md5とか)を使ってシリアルキーを作ろうと試みていたのですが、どうしても桁数が長くなってしまい(今回の要件では、シリアルコードは12文字以内)うまくいきませんでした。
そこでアプローチを変えて、Windows上で動作するアプリでシリアルキーを生成するソフトがないか捜してみたところ、「シリアルメーカー」というソフトを発見。
http://www.vector.co.jp/soft/win95/util/se154808.html
これだっ!!!
。。。と思ったんですが、シリアル作成にものすごい時間がかかることが判明。1万件の生成で20分以上かかりました。
そこでもう少し探してみたところ、同じ機能で高速な「RANer」というソフトを見つけました。
http://www.vector.co.jp/soft/win95/util/se112992.html
シリアルキー作成ではなくパスワード作成のためのソフトのようですが、問題なく使えます。
こちらは100万件のシリアルキー生成も1分程度で済みました。詳しいことはわかりませんが、たぶんアルゴリズムが根本的に違っているんでしょう。
あとは生成したシリアルキーをファイル保存し、MySQLにインポートして使うだけ。
こうしたキャンペーンアプリ構築は初めてだったので、一時はどうなることかと思いましたがなんとか実装できました。ふぅ

2007年6月8日金曜日

MS Accessのアプリを別PCに移したらMidが見つからないと言われた

仕事で使っているMS Accessのアプリケーションを別PCに移し、処理を実行したところ「Mid関数が見つかりません」というエラーが出た。

ググってみたら、同じようなトラブルの事例を発見。

http://www.accessclub.jp/bbs2/0048/beginter15715.html

どうやら「Eexcelオブジェクト(Microsoft Excel *.* ObjectLibrary)」が足りないようです。

ちなみに、移行元の環境はOffice2003
移行先の環境はOfficeXPで、Accessのみ2003になっています。

ExcelオブジェクトはExcelのバージョンによって内容が違うようなので、Excelを2003にバージョンアップしてみたところ、、、見事問題解決!!

普段Accessはあまり使わないので、解決にかなり時間がかかってしまいました。

2007年5月28日月曜日

PHP at Yahoo!

Yahoo!(米)でphpを採用しているというのは有名な話ですが、このたびPHPのカンファレンスにてYahoo!がどのようにPHPを使っているかのプレゼン資料が公開されたそうです。

以下のサイトにてその邦訳版が読めます。

PHP at Yahoo!を読む

Yahoo!のような世界一のポータルサイトと自分が仕事で関わる小中規模のサイトではまったくスケールが違いますが、高速化や安定運用の考え方からphp.iniの設定内容といった細かいところまで、いろいろな点で参考になりました。

アジェンダのみなのでさっと読むことができます。PHP使いの方は目を通しておくと良さそうです。

2007年5月16日水曜日

PHPでIPアドレスを扱うライブラリ(Pear::Net_IPv4)

実際に使ったわけではないんですが、PHPでIPアドレスの計算などをする場合はPearのNet_IPv4というライブラリが便利そうです。
http://pear.plus-server.net/package.networking.net-ipv4.html
マニュアルをちらっと見ただけでもかなり使えそうな感じが分かります。将来使う可能性大なのでメモしておきます。

MySQLでIPアドレスを扱う(INET_ATONとINET_NTOA)

たとえば以下のようなテーブルがあったとします。A,B,C社はそれぞれ、ip_fromからip_toまでのIPアドレス帯域を持っているという意味です。
company_table
companyip_fromip_to
A社192.168.1.1192.168.1.254
B社192.168.2.1192.168.2.254
C社192.168.3.1192.168.3.254

「192.168.2.123」のIPアドレスが、どの会社の帯域に含まれるのかを検索したい場合、INET_ATONというMySQL関数が使えます。

select * from company_table
where INET_ATON(ip_from) <= INET_ATON("192.168.2.123") and INET_ATON(ip_to) >= INET_ATON("192.168.2.123");

上記のSQLを実行すると、B社が結果で返ってきます。
INET_ATON(たぶんAddressTONumberの略)はネットワークアドレスを10進数に変換してくれる関数です。数値に変換することで、SQLでのネットワークアドレスの扱いがぐっと楽になります。ちなみに逆バージョンのINET_NTOAというのもあります。
http://dev.mysql.com/doc/refman/4.1/ja/miscellaneous-functions.html