<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/ME2.0.7" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>村式開墾日記</title>
	<link>http://blog.ville.jp</link>
	<description>時にはかぶけよ！</description>
	<pubDate>Tue, 01 Jun 2010 06:04:24 +0900</pubDate>
	<generator>http://wordpress.xwd.jp/?v=ME2.0.7</generator>
	<language>ja</language>
			<item>
		<title>auの端末でselectboxの改行問題を回避</title>
		<link>http://blog.ville.jp/2010/06/01/173</link>
		<comments>http://blog.ville.jp/2010/06/01/173#comments</comments>
		<pubDate>Tue, 01 Jun 2010 15:04:24 +0900</pubDate>
		<dc:creator>神崎</dc:creator>
		
		<category>技術</category>

		<category>携帯</category>

		<guid isPermaLink="false">http://blog.ville.jp/2010/06/01/173</guid>
		<description><![CDATA[こんにちは。神崎です。
早速ですが
auの端末でselectboxの中身が改行されて意図しない表示になることがあります。
これを回避するには&#60;option>内に&#60;span style=...]]></description>
			<content:encoded><![CDATA[こんにちは。神崎です。

早速ですが
auの端末でselectboxの中身が改行されて意図しない表示になることがあります。

これを回避するには&#60;option>内に&#60;span style="font-size:x-small">&#60;/span>を適用するとよいです。


&#60;select name="pref">
&#60;option value="1" selected="selected">&#60;span style="font-size:x-small">北海道&#60;/span>&#60;/option>
&#60;option value="2">&#60;span style="font-size:x-small">青森県&#60;/span>&#60;/option>
&#60;/select>


村式では上記のことをよしなに適用してくれるsymfonyやCodeIgniterのプラグインを社内ライブラリとして開発し利用をしています。
機会があれば、プラグインも公開するかも？しれません。
ご参考になれば幸いです。それでは！]]></content:encoded>
			<wfw:commentRss>http://blog.ville.jp/2010/06/01/173/feed/</wfw:commentRss>
		</item>
		<item>
		<title>タグ付けできるMemcacheクライアントを実装してみました</title>
		<link>http://blog.ville.jp/2010/03/12/172</link>
		<comments>http://blog.ville.jp/2010/03/12/172#comments</comments>
		<pubDate>Fri, 12 Mar 2010 14:27:25 +0900</pubDate>
		<dc:creator>平井</dc:creator>
		
		<category>技術</category>

		<guid isPermaLink="false">http://blog.ville.jp/2010/03/12/172</guid>
		<description><![CDATA[こんにちは。平井です。
社員を飲みに誘って先に酔っ払うのが最近の醍醐味です。
最近は話題になることも多いKVSですが、
村式でもMemcachedをキャッシュ層に取り入れたりして、アプリケーションの処...]]></description>
			<content:encoded><![CDATA[こんにちは。平井です。
社員を飲みに誘って先に酔っ払うのが最近の醍醐味です。

最近は話題になることも多いKVSですが、
村式でもMemcachedをキャッシュ層に取り入れたりして、アプリケーションの処理能力を向上させたりしています。

Webアプリケーションに構築する上でキャッシュはとても有用ですが、
「ちゃんと消す」ということを意識して実装しないと、更新された情報が正しく表示されないといった状態に陥りがちです。

Perlの世界では、Memcachedに保存するデータをグルーピングして管理できるCache::Memcached::Managed [1]というライブラリが開発されてます。実際にいじったことはないですが、キャッシュの保存／削除に非常に有用なのではないでしょうか。

このようなライブラリがPHPにもあったらなーと思って少し探してみたのですが、見つけることができなかったので実装してみることにしました。


MemcacheTagging

MemcacheTagging [2]


以下のような感じで使用します。


require dirname(dirname(__FILE__)) . '/path/to/MemcacheTagging.class.php';

// create a instance.
$cache = MemcacheTagging::getInstance();

// set a value with tags.
$cache-&#62;set('key', 'value', array('tag_foo', 'tag_bar'));

// retrieve with a tag.
$values = $cache-&#62;getByTag('tag_foo');

// delete with a tag.
$cache-&#62;deleteByTag('tag_foo');


実装している主な機能としては、

キャッシュするデータにタグをつけられる
キャッシュされているデータをタグで取り出せる
キャッシュされているデータをタグで削除できる

などです。


テストがまだ適当
アトミックな実装になってない


など、まだまだ心配な面がありますので、社内の開発の中で検証を重ねて改良して行きたいと思っています。
Own Riskな上で試してくださる豪気な方大歓迎です！
何かありましたら twitter [3]に投げて頂くのが反応早いと思います。

それでは！

[1] http://search.cpan.org/~elizabeth/Cache-Memcached-Managed-0.20/lib/Cache/Memcached/Managed.pm
[2] http://github.com/massat/MemcacheTagging
[3] http://twitter.com/massat]]></content:encoded>
			<wfw:commentRss>http://blog.ville.jp/2010/03/12/172/feed/</wfw:commentRss>
		</item>
		<item>
		<title>TC/TTをPHPで利用する</title>
		<link>http://blog.ville.jp/2010/03/05/169</link>
		<comments>http://blog.ville.jp/2010/03/05/169#comments</comments>
		<pubDate>Fri, 05 Mar 2010 14:02:41 +0900</pubDate>
		<dc:creator>神崎</dc:creator>
		
		<category>技術</category>

		<guid isPermaLink="false">http://blog.ville.jp/2010/03/05/169</guid>
		<description><![CDATA[こんにちは。
昨年の10月末に、人力車で初出社した神崎です。
TokyoCabinet/TokyoTyrantをPHPで使う方法を簡単に書きます。

まず、TCはファイルにデータを保存しデータの永続化...]]></description>
			<content:encoded><![CDATA[こんにちは。
昨年の10月末に、人力車で初出社した神崎です。

TokyoCabinet/TokyoTyrantをPHPで使う方法を簡単に書きます。



まず、TCはファイルにデータを保存しデータの永続化を可能にしたKVSで高速に動作します。
TTはTCのリモートアクセスをするためのラッパーで、memcache互換のプロトコルもあります。

TC/TTをPHPから利用するには
memcacheのプロトコルを利用しMemcache関数を使う方法や
Openpear.orgで公開されているPurePHPのNet_TokyoTryantを利用することができます。

Memcache関数を使う場合

$ip     = "127.0.0.1";
$port   = 1978;

$memcache = new Memcache();

/**
 * connect
 */
if (!$memcache->pconnect($ip, $port)) {
    echo "connect error";
}

/**
 * put
 */
$memcache->set('now',date('Y-m-d H:i:s'));

/**
 * get
 */
$result = $memcache->get('now');
var_dump($result);

/**
 * delete
 */
$memcache->delete('now');


Net_TokyoTyrantを利用する場合

require_once 'Net/TokyoTyrant.php';

/**
 * connect
 */
$tt = new Net_TokyoTyrant();
$tt->connect($ip, $port);

/**
 * put
 */
$tt->set('now',date('Y-m-d H:i:s'));
$tt->set('token',md5(uniqid()));

$tt->set('ipod','5g');
$tt->set('iphone','3gs');


/**
 * get
 */
var_dump($tt->get('now'));

// 複数のkeyの値を取得
var_dump($tt->mget(array('now', 'token')));

// keyの一部でリストを取得
var_dump($tt->fwmkeys('ip', 100));

$fwmkeys = $tt->fwmkeys('ip', 100);
foreach($fwmkeys as $key) {
    echo $key . ":" . $tt->get($key) . "\n";
}

/**
 * out
 */
$tt->out('now');




高速で動作して欲しいことに加えてデータの永続化が必要な要件においては
TC/TTを利用することを考えてみるのも良いかもしれません。

http://1978th.net/tokyocabinet [1]
http://1978th.net/tokyotyrant [2]
http://openpear.org/package/Net_TokyoTyrant [3]



[1] http://1978th.net/tokyocabinet/
[2] http://1978th.net/tokyotyrant/
[3] http://openpear.org/package/Net_TokyoTyrant]]></content:encoded>
			<wfw:commentRss>http://blog.ville.jp/2010/03/05/169/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHPでFlashの中に透過GIFを入れる</title>
		<link>http://blog.ville.jp/2010/03/04/168</link>
		<comments>http://blog.ville.jp/2010/03/04/168#comments</comments>
		<pubDate>Thu, 04 Mar 2010 12:31:43 +0900</pubDate>
		<dc:creator>小池</dc:creator>
		
		<category>技術</category>

		<guid isPermaLink="false">http://blog.ville.jp/2010/03/04/168</guid>
		<description><![CDATA[小池です。 
さっそくですが、携帯サイトなどを制作しているとサーバーサイドでswfmillを使用して
Flash内の画像データを動的に差し替えることがあるかと思います。
以前、透過GIF画像を差し替え...]]></description>
			<content:encoded><![CDATA[小池です。 

さっそくですが、携帯サイトなどを制作しているとサーバーサイドでswfmillを使用して
Flash内の画像データを動的に差し替えることがあるかと思います。

以前、透過GIF画像を差し替える際になかなかうまくいかず苦労したので、備忘録として記載します。
何かの参考になれば幸いです。

 

透過GIFデータはFlash中でDefineBitsLossless2というフォーマットで格納されており、
透過GIFのバイナリ画像からDefineBitsLossless2に変換してやる必要があります。


//  GIFデータの読み込み

$im = imagecreatefromstring($gifData);
$size_x = imagesx($im);
$size_y = imagesy($im);
$transId = imagecolortransparent($im);
$color_map_count = imagecolorstotal($im);
       
/*
 * MAKE COLORMAP
 */
$colormap = array();
for ($i=0; $i

[1] http://www.adobe.com/devnet/swf/
[2] https://secure.m2osw.com/swf_tag_definebitslossless2]]></content:encoded>
			<wfw:commentRss>http://blog.ville.jp/2010/03/04/168/feed/</wfw:commentRss>
		</item>
		<item>
		<title>こころﾌﾟﾙﾌﾟﾙ電子ｺﾐｯｸ専門店「トク☆コミ！」のご紹介</title>
		<link>http://blog.ville.jp/2010/02/19/166</link>
		<comments>http://blog.ville.jp/2010/02/19/166#comments</comments>
		<pubDate>Fri, 19 Feb 2010 14:57:40 +0900</pubDate>
		<dc:creator>高橋</dc:creator>
		
		<category>その他</category>

		<guid isPermaLink="false">http://blog.ville.jp/2010/02/19/166</guid>
		<description><![CDATA[ディレクターの高橋です。
本日、携帯サイト「トク☆コミ！」をリリースしました！
（au、SoftBank公式サイト。docomoは今後対応予定！）
このサービスはパートナー企業 ドリームコンテンツ株式...]]></description>
			<content:encoded><![CDATA[ディレクターの高橋です。

本日、携帯サイト「トク☆コミ！」をリリースしました！
（au、SoftBank公式サイト。docomoは今後対応予定！）

このサービスはパートナー企業 ドリームコンテンツ株式会社 [1] 様と共に
立ち上げたものですが、とてつもなく”熱い想い”を込めています！！！

その”想い”とは…と続けたいのですが、、、
まずは「トク☆コミ！」がどのようなサービスかをご説明します！

 　 
　↑ 「トク☆コミ！」キャプチャ画像  


■トク☆コミ！ってどんなサービス？
みなさんは本や漫画を読んで

「あはははははっ！（あ、まずい、お腹が筋肉痛になる！）」と笑い続けたり、
じーんときて目の奥のほうから自然と流れてくる涙を黙ってぬぐったり、
ぐうぅぅって胸の奥が熱くなって知らぬ間に握りこぶしを作っていたり、、、

などといった経験はありませんか？

本を読んで、つい笑ったり、泣いてしまったり、熱くなったりと、
心が動いてしまうこと、感動してしまうことってありますよね。

「トク☆コミ！」は、そのように感動する本の中でも、
”読む人のこころを動かす（動かしてしまう！？）コミック”
を専門に扱った携帯電子コミックサイトです！

「トク☆コミ！」でコミックを読むと
”こころが動く！”
と言い切っても過言ではない！？かと思います。

つまり、「トク☆コミ！」とは”こころを動かす”サービス
だと自負しております！！！
 
■感情ありきのコミック配置！人の『生の感想』でコミック紹介！
「泣ける」「笑える」「感動！！」など感情視点からコミックを配置！
運営スタッフやお客さまの『生の感想』を手書きしてコミックを紹介します。


　↑ 『生の感想』一例

コミックを読んだからこそ書ける！
そして、
こころが動いたからこそ自信を持ってコミックをご紹介する！！！

それが「トク☆コミ！」の特徴の一つです！

そして、その”生の感想"を見て、手にしたコミックを読んで、

オォォーー！！
うるうる。。。
ガハハァッ！！！

と、こころを動かしていただけたら嬉しいですね！

 
■埋もれてしまった良書コミックをザクザク掘り起こし！
「トク☆コミ！」は駆け出しの書店（電子コミックサイト）のため、
新刊やいわゆるメジャーなコミックの取り扱いが、他の書店と比べて少ないかもしれません。

しかしながら、新刊やメジャーではない一般コミックの中にも、
キラりと光る”良書”は星の数ほど眠っているんです！！！

新刊やメジャーコミックに埋もれてしまった良書（コミック）たち・・・・・・・・・
トク☆コミ！がスポットライトを当てます！

そして数あるコミックの中から探し出した時の「おおおおぉっ！」という感動を
皆さんに紹介し続けたいと思います！！！

 
■こころプルプル
ちなみに、こころを動かすことを私たちは
『こころプルプル』
と呼んでいます！

プルプルッ！

とこころが動くイメージです。伝わりますかね？（笑）

携帯を片手に「トク☆コミ！」を見て、
こころプルプルッ！となったユーザーが、

「オォォーー！！」
「ガハハァッ！！！」
「プルプルーッ！！」

なんて奇声！？擬音！？を発しはじめる世界がきたらいぃなぁと、
かなり本気で思っています（笑）。

「トク☆コミ！」でこころを『プルップル』させてみてください！

↓↓　こちらからどうぞ！　↓↓

 [2]

 

[1] http://dreamcontents.jp/
[2] http://dreamcontents.jp/about_tokucomi.html]]></content:encoded>
			<wfw:commentRss>http://blog.ville.jp/2010/02/19/166/feed/</wfw:commentRss>
		</item>
		<item>
		<title>GDで高速にグラデーションを作る</title>
		<link>http://blog.ville.jp/2010/02/12/141</link>
		<comments>http://blog.ville.jp/2010/02/12/141#comments</comments>
		<pubDate>Fri, 12 Feb 2010 10:00:37 +0900</pubDate>
		<dc:creator>中川</dc:creator>
		
		<category>その他</category>

		<guid isPermaLink="false">http://blog.ville.jp/2010/02/12/141</guid>
		<description><![CDATA[
PHPのGDには残念ながらグラデーションを扱うメソッドがありません。
1pxずつ計算して塗りつぶしていくこともできますが、計算量が大きくなってしまいます。
そこで、グラデーションマスク画像を先に作っ...]]></description>
			<content:encoded><![CDATA[

PHPのGDには残念ながらグラデーションを扱うメソッドがありません。
1pxずつ計算して塗りつぶしていくこともできますが、計算量が大きくなってしまいます。
そこで、グラデーションマスク画像を先に作っておいてそれと合成するという方法を取りました。

黄色からオレンジのグラデーションを作る場合の手順は以下のようになります。



1.事前に #007F7F7F(100%非透過) ～ #7F7F7F7F(透明)のグラデーション画像をアルファチャネル付きの24bit-PNGで作る。


2.黄色、オレンジで塗りつぶした画像リソースを1枚ずつ作る
 

3.黄色画像をIMG_EFFECT_OVERLAYモードにして、(1)で作ったグラデーション画像を合成する(マスクがかかる)


4.オレンジ画像に(3)の画像を通常のピクセルブレンディングモード(IMG_EFFECT_NORMAL)で合成する


ここで肝となるのはimagelayereffectメソッドでIMG_EFFECT_OVERLAYを使用するところです。
IMG_EFFECT_OVERLAY の説明を見ると、このように書かれています。
オーバーレイを使用すると、背景の黒い部分は黒のまま。 一方背景の白い部分は白のままとなります。 背景のグレーな部分は、前景のピクセルの色となります。
http://php.net/manual/ja/function.imagelayereffect.php [1]

これを受けて(1)では #007F7F7F(100%非透過) ～ #7F7F7F7F(透明) の画像を作っています。

サンプルコード
(※簡単のため余計な処理は省いています)
$w = 400; $h = 210;  $yellow = imagecreatetruecolor($w, $h); $orange = imagecreatetruecolor($w, $h); $mask = imagecreatefrompng('mask.png'); // マスク画像  // 黄色、オレンジの画像を作る imagefill($yellow, 0, 0, 0x00FFFF00);// 黄色 imagefill($orange, 0, 0, 0x00FF6600);// オレンジ  // 黄色画像にマスクをかける imagelayereffect($yellow, IMG_EFFECT_OVERLAY); imagecopy($yellow, $mask, 0, 0, 0, 0, $w, $h);  // オレンジ色画像のモードはデフォルト(IMG_EFFECT_NORMAL)のままマスクした黄色画像を載せる imagelayereffect($orange, IMG_EFFECT_NORMAL);// (この行は書かなくても同じ) imagecopy($orange, $yellow, 0, 0, 0, 0, $w, $h);  header('Content-Type: image/png'); imagepng($orange);  imagedestroy($yellow); imagedestroy($orange); imagedestroy($mask);

[1] http://php.net/manual/ja/function.imagelayereffect.php]]></content:encoded>
			<wfw:commentRss>http://blog.ville.jp/2010/02/12/141/feed/</wfw:commentRss>
		</item>
		<item>
		<title>村式のオフィスに畳を入れました！</title>
		<link>http://blog.ville.jp/2010/02/09/142</link>
		<comments>http://blog.ville.jp/2010/02/09/142#comments</comments>
		<pubDate>Tue, 09 Feb 2010 18:00:14 +0900</pubDate>
		<dc:creator>村式くん</dc:creator>
		
		<category>村式</category>

		<category>お知らせ</category>

		<guid isPermaLink="false">http://blog.ville.jp/2010/02/09/142</guid>
		<description><![CDATA[1月末に村式のオフィスを一部改装しました。
改装の目玉はなんといっても打ち合わせ部屋に畳を入れたことです。
畳はいいです！匂いも雰囲気も最高！！！
ということで、新しい村式のオフィスを写真とともにご紹...]]></description>
			<content:encoded><![CDATA[1月末に村式のオフィスを一部改装しました。
改装の目玉はなんといっても打ち合わせ部屋に畳を入れたことです。
畳はいいです！匂いも雰囲気も最高！！！

ということで、新しい村式のオフィスを写真とともにご紹介します。
 

▼『実家』のような打ち合わせ部屋


今まではガラステーブルを取り囲む一般的な会議スペースでしたが、
改装後は、い草と檜の香りが漂う「和」空間となりました！
テーマは『実家』
和といっても、堅苦しい感じではなく、まるで親戚や友達が実家の畳部屋に集まってワイワイガヤガヤするようなイメージです。
ここでなら、社員やお客さまたちと腹を割って話をすることができます！

 

▼精神と時の部屋


これまでは畳を敷いていただけの質素な座禅部屋でしたが、
鎌倉の畳職人さんと大工さんにお願いして、引き戸を障子窓へ改装。
檜で縁を組んでもらって畳も一新しました！

夜になると照明が良い雰囲気を醸し出します。

この部屋には鶴岡八幡宮の御札をお祀りしており、さらに社員皆で選んだ良書を置きました。

疲れた時や煮詰まった時にはこの部屋に入って自分を見つめ直したり、
良書から気づきを得たりと、自分の内面から活力を取り戻すことのできる部屋です。

 

▼玄関


村式の玄関です。
短冊にはいつもお世話になっている方々から頂いた
直筆の社名を日替わりで掲げています！

 

▼仕事エリア

たくさんの観葉植物とマイナスイオンに囲まれた仕事エリアです。
この部屋のテーマは『プロの間』。
WEBのプロである村式メンバー各人の力を、思う存分発揮する場所です！

『演劇の舞台』や『プロレスのリング』のような空間をイメージしています。
ここからきっとすごいものが生れるはず！

 

などなど、改装した箇所は多岐に渡りますが、一部を紹介させて頂きました。

鎌倉近辺にいらした際には是非お立ち寄り下さい！]]></content:encoded>
			<wfw:commentRss>http://blog.ville.jp/2010/02/09/142/feed/</wfw:commentRss>
		</item>
		<item>
		<title>お客さまを人力車でお迎えするサービスが好評です！</title>
		<link>http://blog.ville.jp/2009/11/11/138</link>
		<comments>http://blog.ville.jp/2009/11/11/138#comments</comments>
		<pubDate>Wed, 11 Nov 2009 20:16:21 +0900</pubDate>
		<dc:creator>住吉</dc:creator>
		
		<category>サービス</category>

		<guid isPermaLink="false">http://blog.ville.jp/2009/11/11/138</guid>
		<description><![CDATA[11/4（水）に人力車のえびす屋さんご協力のもと開始した、
村式へのお客さまを人力車でお出迎えするサービス（無料プチ観光付き！）が好評です。
せっかくお客さまに鎌倉まで来て頂くのだから、少しでもこの町...]]></description>
			<content:encoded><![CDATA[11/4（水）に人力車のえびす屋さん [1]ご協力のもと開始した、
村式へのお客さまを人力車でお出迎えするサービス（無料プチ観光付き！） [2]が好評です。

せっかくお客さまに鎌倉まで来て頂くのだから、少しでもこの町を楽しんでもらいたい！
そんな思いで始めたこのサービスですが、既に色んなお客さまからご予約を頂いており、とても好評いただいています。
ちなみに最近村式に入社したばかりの神崎（通称かんちゃん） [3]も、人力車で初出社しました。

人力車は、鎌倉の名所を案内してくれるので楽しいのはもちろんなのですが、乗り心地も最高にいいんです。
車夫さんのこころ配りが伝わってくる乗り心地を是非体感してみてください！

詳しくはコチラ [4]から。





[1] http://www.ebisuya.com/tenpoannai-kamakuratentop.html
[2] http://ville.jp/rickshaw.html
[3] http://ville.jp/members.html
[4] http://ville.jp/rickshaw.html]]></content:encoded>
			<wfw:commentRss>http://blog.ville.jp/2009/11/11/138/feed/</wfw:commentRss>
		</item>
		<item>
		<title>2人の名前を携帯花火で打ち上げよう！</title>
		<link>http://blog.ville.jp/2009/08/08/136</link>
		<comments>http://blog.ville.jp/2009/08/08/136#comments</comments>
		<pubDate>Sat, 08 Aug 2009 00:33:15 +0900</pubDate>
		<dc:creator>村式くん</dc:creator>
		
		<category>サービス</category>

		<guid isPermaLink="false">http://blog.ville.jp/2009/08/08/136</guid>
		<description><![CDATA[いよいよ8/10（月）は鎌倉花火大会！
なんといっても名物の水中花火が楽しみです。
今年も村式は社員総出で出かける予定なので、いよいよ盛り上がってきました！
ということで本日、同じく鎌倉に本拠地を構え...]]></description>
			<content:encoded><![CDATA[いよいよ8/10（月）は鎌倉花火大会！
なんといっても名物の水中花火が楽しみです。
今年も村式は社員総出で出かける予定なので、いよいよ盛り上がってきました！

ということで本日、同じく鎌倉に本拠地を構える面白法人カヤック [1]さんとコラボして、
鎌倉花火大会記念のモバイルサイトLOVELOVE花火 [2]を作りました！

 [3]

★LOVE×LOVE花火とは？
1. 二人の名前が花火のように打ちあがります。
2. 打ち上がった花火をダウンロードして待受flashにできます。
3. 待受flashを恋人や友達に送れます。
※モバイル専用サイトです。

こちら [4]からアクセスして、早速携帯花火をお楽しみください！


[1] http://kayac.com/
[2] http://lovehana.jp/
[3] http://lovehana.jp/
[4] http://lovehana.jp/]]></content:encoded>
			<wfw:commentRss>http://blog.ville.jp/2009/08/08/136/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Zend_Http_Clientで同名のパラメータを複数渡す</title>
		<link>http://blog.ville.jp/2009/07/13/135</link>
		<comments>http://blog.ville.jp/2009/07/13/135#comments</comments>
		<pubDate>Mon, 13 Jul 2009 15:21:34 +0900</pubDate>
		<dc:creator>平井</dc:creator>
		
		<category>技術</category>

		<guid isPermaLink="false">http://blog.ville.jp/2009/07/13/135</guid>
		<description><![CDATA[HTTP周りのプログラムをする時に便利なZend_Http_Clientなんですが、同名のパラメーターを複数渡す時に軽くつまずいてしまいました。
以下のように、同名のパラメータを複数POSTしたい場合...]]></description>
			<content:encoded><![CDATA[HTTP周りのプログラムをする時に便利なZend_Http_Client [1]なんですが、同名のパラメーターを複数渡す時に軽くつまずいてしまいました。

以下のように、同名のパラメータを複数POSTしたい場合のお話です。
tag=php&tag=zend



Zend_Http_Clientには

	Zend_Http_Client::setParameterPost


というメソッドがあるので、まずはそれを使ってみました。


&#60;?php
set_include_path(dirname(__FILE__) . '/lib' . PATH_SEPARATOR . get_include_path());
require_once 'Zend/Http/Client.php';

$client = new Zend_Http_Client('http://example.org');
$client-&#62;setParameterPost(array('tag' => array('php', 'zend')));   // 配列で渡す方法
$client-&#62;setParameterPost('category', array('it', 'programming')); // key, valueで渡す方法
$client-&#62;request('POST');

var_dump($client->getLastRequest());

上の実行結果が以下。


[massat@localhost ~]$ php ./request.php 
string(265) "POST / HTTP/1.1
Host: example.org
Connection: close
Accept-encoding: gzip, deflate
User-Agent: Zend_Http_Client
Content-Type: application/x-www-form-urlencoded
Content-Length: 77

tag%5B0%5D=php&tag%5B1%5D=zend&category%5B0%5D=it&category%5B1%5D=programming"


URLエンコードされていますが、要は


tag[0]=php&tag[1]=zend&category[0]=it&category[1]=programming


というパラメータが作られている訳です。
PHPが同名のリクエストパラメータを処理できない仕様のため、Zend_Http_Clientが気を利かしてやっているのでしょうか。

しかし今回はこれだとだめなので、代わりに

	Zend_Http_Client::setRawData

というメソッドを使いました。


&#60;?php
set_include_path(dirname(__FILE__) . '/lib' . PATH_SEPARATOR . get_include_path());
require_once 'Zend/Http/Client.php';

$client = new Zend_Http_Client('http://example.org');
$parameter = sprintf('tag=%s&tag=%s&category=%s&category=%s', urlencode('php'), urlencode('zend'), urlencode('it'), urlencode('programming'));
$client->setRawData($parameter); // 生データをセット
$client->request('POST');

var_dump($client->getLastRequest());


結果が以下。


[massat@localhost ~]$ php ./request.php 
string(237) "POST / HTTP/1.1
Host: example.org
Connection: close
Accept-encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
User-Agent: Zend_Http_Client
Content-Length: 49

tag=php&tag=zend&category=it&category=programming"


これで、望む形式のリクエストパラメータを生成できました。

以上ちょっとしたことですが、メモまで。

[1] http://framework.zend.com/manual/ja/zend.http.html]]></content:encoded>
			<wfw:commentRss>http://blog.ville.jp/2009/07/13/135/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
