<?xml version="1.0" encoding="UTF-8"?>
<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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>情報と音楽 &#187; CakePHP</title>
	<atom:link href="http://penguinlab.jp/blog/post/tag/cakephp/feed" rel="self" type="application/rss+xml" />
	<link>http://penguinlab.jp/blog</link>
	<description>labochoの日々のアウトプット</description>
	<lastBuildDate>Thu, 26 Jan 2012 12:51:48 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>CakePHPでreCAPTCHAによる画像認証を実装するまで</title>
		<link>http://penguinlab.jp/blog/post/205</link>
		<comments>http://penguinlab.jp/blog/post/205#comments</comments>
		<pubDate>Tue, 12 May 2009 19:05:57 +0000</pubDate>
		<dc:creator>labocho</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[reCAPTCHA]]></category>
		<category><![CDATA[スパム対策]]></category>

		<guid isPermaLink="false">http://penguinlab.jp/blog/?p=395</guid>
		<description><![CDATA[GWからCakePHPでつくりはじめたWebサービスで、画像認証を実装したいと思って、以前から気になっていたreCAPTCHAを導入した。びっくりするくらい簡単だったけど、意外とreCAPTCHA実装の記事が少ないので、丁寧に解説します。 reCAPTCHAってなんだって人はこちらをどうぞ。 秋元@サイボウズラボ・プログラマー・ブログ: reCAPTCHA &#8211; キャプチャを利用した人力高性能OCR なお、CakePHPは1.2を使ってます。 1. まずは登録 reCAPTCHAを使うにはWebサイトでアカウントを作る必要があります。 まずはhttp://recaptcha.net/へアクセスし、「USE reCAPTCHA ON YOUR SITE」へ。 「Sign up Now!」へ。 「Sign up」へ。 ユーザー名、パスワード、パスワード再入力、連絡先メールアドレス、そしてもちろんreCAPTCHAによる画像認証を入力して「Sign up Now!」へ。 次に、どのドメインでreCAPTCHAを使うかを聞いてきます。たぶんここで入れたドメイン以外からの検証リクエストは受け付けないんでしょう(少なくともlocalhostからは受付けてましたが)。 親ドメインを入れとけばサブドメインでも使えるし、一つのアカウントで複数のドメインを登録できるし、大量のドメインから使うんだったら「Enable this key on all domains (global keys)」にチェックを入れとけば、ドメインの制限は受けないようです。 入力したら「Create Key」へ。 これで登録完了です！ 「Public Key」(公開鍵)と「Private Key」(秘密鍵)は実装のさいに使用します。「Public Key」(公開鍵)は別に誰に知られてもまったく問題ないですが、「Private Key」(秘密鍵)は絶対に知られないようにしましょう(でないと認証の意味ないです)。 なお、ここで表示される情報はメニューの「MY ACCOUNT」からいつでも確認できます。 2. PHP用のライブラリを用意する メニューの「RESOURCES」に「PHP」の項目があるので、そこへ。 「Download」へ。 Google Codeに飛ぶのでこのzipをダウンロードします。 zipを展開するといくつかファイルが出てきます。 この中の「recaptchalib.php」をCakePHPの/app/vendors下に置いておきます。 3. View側の実装 View側では&#60;form&#62;&#60;/form&#62;の中に入るように、以下のコードを書きます。 App::import('Vendor', 'recaptchalib'); [...]]]></description>
			<content:encoded><![CDATA[<p>GWから<a href="http://cakephp.jp/" title="CakePHP" onclick="pageTracker._trackPageview('/outgoing/cakephp.jp/?referer=');">CakePHP</a>でつくりはじめたWebサービスで、画像認証を実装したいと思って、以前から気になっていた<a href="hhttp://recaptcha.net/" title="reCAPTCHA">reCAPTCHA</a>を導入した。びっくりするくらい簡単だったけど、意外とreCAPTCHA実装の記事が少ないので、丁寧に解説します。</p>
<p>reCAPTCHAってなんだって人はこちらをどうぞ。</p>
<ul>
<li><a href="http://labs.cybozu.co.jp/blog/akky/archives/2007/05/recaptcha-human-group-ocr.html" title="秋元@サイボウズラボ・プログラマー・ブログ: reCAPTCHA - キャプチャを利用した人力高性能OCR" onclick="pageTracker._trackPageview('/outgoing/labs.cybozu.co.jp/blog/akky/archives/2007/05/recaptcha-human-group-ocr.html?referer=');">秋元@サイボウズラボ・プログラマー・ブログ: reCAPTCHA &#8211; キャプチャを利用した人力高性能OCR</a></li>
</ul>
<p>なお、CakePHPは1.2を使ってます。</p>
<h3>1. まずは登録</h3>
<p>reCAPTCHAを使うにはWebサイトでアカウントを作る必要があります。</p>
<p>まずは<a href="http://recaptcha.net/" title="http://recaptcha.net/" onclick="pageTracker._trackPageview('/outgoing/recaptcha.net/?referer=');">http://recaptcha.net/</a>へアクセスし、「<a href="http://recaptcha.net/whyrecaptcha.html" title="USE reCAPTCHA ON YOUR SITE" onclick="pageTracker._trackPageview('/outgoing/recaptcha.net/whyrecaptcha.html?referer=');">USE reCAPTCHA ON YOUR SITE</a>」へ。</p>
<p><a href="http://penguinlab.jp/blog/wp-content/uploads/recaptcha001.png"><img src="http://penguinlab.jp/blog/wp-content/uploads/recaptcha001s.png" alt="recaptcha001.png" border="0" width="150" height="106" /></a></p>
<p>「Sign up Now!」へ。</p>
<p><a href="http://penguinlab.jp/blog/wp-content/uploads/recaptcha002.png"><img src="http://penguinlab.jp/blog/wp-content/uploads/recaptcha002s.png" alt="recaptcha002.png" border="0" width="150" height="106" /></a></p>
<p>「Sign up」へ。</p>
<p><a href="http://penguinlab.jp/blog/wp-content/uploads/recaptcha002_2.png"><img src="http://penguinlab.jp/blog/wp-content/uploads/recaptcha002_2s.png" alt="recaptcha002_2.png" border="0" width="150" height="94" /></a></p>
<p>ユーザー名、パスワード、パスワード再入力、連絡先メールアドレス、そしてもちろんreCAPTCHAによる画像認証を入力して「Sign up Now!」へ。</p>
<p><a href="http://penguinlab.jp/blog/wp-content/uploads/recaptcha003.png"><img src="http://penguinlab.jp/blog/wp-content/uploads/recaptcha003s.png" alt="recaptcha003.png" border="0" width="133" height="150" /></a></p>
<p>次に、どのドメインでreCAPTCHAを使うかを聞いてきます。たぶんここで入れたドメイン以外からの検証リクエストは受け付けないんでしょう(少なくともlocalhostからは受付けてましたが)。</p>
<p>親ドメインを入れとけばサブドメインでも使えるし、一つのアカウントで複数のドメインを登録できるし、大量のドメインから使うんだったら「Enable this key on all domains (global keys)」にチェックを入れとけば、ドメインの制限は受けないようです。</p>
<p>入力したら「Create Key」へ。</p>
<p><a href="http://penguinlab.jp/blog/wp-content/uploads/recaptcha004.png"><img src="http://penguinlab.jp/blog/wp-content/uploads/recaptcha004s.png" alt="recaptcha004.png" border="0" width="150" height="106" /></a></p>
<p>これで登録完了です！</p>
<p><a href="http://penguinlab.jp/blog/wp-content/uploads/recaptcha005.png"><img src="http://penguinlab.jp/blog/wp-content/uploads/recaptcha005s.png" alt="recaptcha005.png" border="0" width="150" height="106" /></a></p>
<p><strong>「Public Key」(公開鍵)</strong>と<strong>「Private Key」(秘密鍵)</strong>は実装のさいに使用します。「Public Key」(公開鍵)は別に誰に知られてもまったく問題ないですが、「Private Key」(秘密鍵)は絶対に知られないようにしましょう(でないと認証の意味ないです)。</p>
<p>なお、ここで表示される情報はメニューの「<a href="https://admin.recaptcha.net/" title="MY ACCOUNT" onclick="pageTracker._trackPageview('/outgoing/admin.recaptcha.net/?referer=');">MY ACCOUNT</a>」からいつでも確認できます。</p>
<h3>2. PHP用のライブラリを用意する</h3>
<p>メニューの「<a href="http://recaptcha.net/resources.html" title="RESOURCES" onclick="pageTracker._trackPageview('/outgoing/recaptcha.net/resources.html?referer=');">RESOURCES</a>」に「<a href="http://recaptcha.net/plugins/php/" title="PHP" onclick="pageTracker._trackPageview('/outgoing/recaptcha.net/plugins/php/?referer=');">PHP</a>」の項目があるので、そこへ。</p>
<p><a href="http://penguinlab.jp/blog/wp-content/uploads/recaptcha006.png"><img src="http://penguinlab.jp/blog/wp-content/uploads/recaptcha006s.png" alt="recaptcha006.png" border="0" width="150" height="106" /></a></p>
<p>「<a href="http://code.google.com/p/recaptcha/downloads/list?q=label:phplib-Latest" title="Download" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/recaptcha/downloads/list?q=label_phplib-Latest&amp;referer=');">Download</a>」へ。</p>
<p><a href="http://penguinlab.jp/blog/wp-content/uploads/recaptcha007.png"><img src="http://penguinlab.jp/blog/wp-content/uploads/recaptcha007s.png" alt="recaptcha007.png" border="0" width="150" height="132" /></a></p>
<p>Google Codeに飛ぶのでこのzipをダウンロードします。</p>
<p><a href="http://penguinlab.jp/blog/wp-content/uploads/recaptcha008.png"><img src="http://penguinlab.jp/blog/wp-content/uploads/recaptcha008s.png" alt="recaptcha008.png" border="0" width="150" height="98" /></a></p>
<p>zipを展開するといくつかファイルが出てきます。</p>
<p>この中の「<strong>recaptchalib.php</strong>」をCakePHPの<strong>/app/vendors</strong>下に置いておきます。</p>
<h3>3. View側の実装</h3>
<p>View側では<strong>&lt;form&gt;&lt;/form&gt;</strong>の中に入るように、以下のコードを書きます。</p>
<p><code>App::import('Vendor', 'recaptchalib');
$publickey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
echo recaptcha_get_html($publickey);
</code></p>
<p>1行目はさきほどコピーしたライブラリの読み込み。</p>
<p>2行目はreCAPTCHAの<strong>Public Key (公開鍵)</strong>を書きます。</p>
<p>3行目はreCAPTCHAのウィジェットを表示します。</p>
<p>たったこれだけでOK!</p>
<h3>4. Controller側の実装</h3>
<p>Controller側では先ほどのViewのformから呼ばれるアクション内に以下のコードを書きます。</p>
<p><code>App::import('Vendor', 'recaptchalib');
$privatekey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$resp = recaptcha_check_answer(
            $privatekey,
            $_SERVER["REMOTE_ADDR"],
            $this->params['form']['recaptcha_challenge_field'],
            $this->params['form']['recaptcha_response_field']);
</code></p>
<p>1行目はやはりライブラリの読み込み。</p>
<p>2行目はreCAPTCHAの<strong>Private Key (秘密鍵)</strong>を書きます。</p>
<p>3行目はユーザーが入力した文字列を検証します。</p>
<p>これで$resp->is_validに検証結果が入るので、あとはお好きなように。</p>
]]></content:encoded>
			<wfw:commentRss>http://penguinlab.jp/blog/post/205/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHPで jQuery Star Rating Plugin を使う。</title>
		<link>http://penguinlab.jp/blog/post/195</link>
		<comments>http://penguinlab.jp/blog/post/195#comments</comments>
		<pubDate>Tue, 17 Feb 2009 15:02:48 +0000</pubDate>
		<dc:creator>labocho</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://penguinlab.jp/blog/?p=385</guid>
		<description><![CDATA[今回の記事は、CakePHPで jQuery Star Rating Plugin を使いたい人にしか役に立たない情報です。ニッチです。 いまCakePHPでWebアプリケーションを作ってて(趣味です)、スターレイティングを導入しようと思い、いくらか調べて、「jQuery Star Rating Plugin」が良さそうという結論に達した。 で、さっそく実装して試してみてたら、inputのnamｅがサンプルのままの「star」だと問題なく動作するんだけど、CakePHPのdata[モデル名][カラム名]の形式のnameにすると、表示もPOSTもうまくいかない。 調べてみると、jquery.rating.js は、inputのnameをもとにクラスやなんかを作るんだけど、そのさいに[ ]をエスケープしてる。 //99行目 var n = (this.name &#124;&#124; 'unnamed-rating').replace(/\[&#124;\]/, "_"); まずこのエスケープがまずくて、最初の一個めしか置換してくれないので、直す。 //gオプションを追加 var n = (this.name &#124;&#124; 'unnamed-rating').replace(/\[&#124;\]/g, "_"); で、値をPOSTするためにhiddenのinputを作ってる。 //111行目 $.rating.groups[n].valueElem = $('&#60;input type="hidden" name="' + n + '" value=""' + (settings.readOnly ? ' disabled="disabled"' : '') + '/&#62;'); ここはエスケープしちゃうとCakePHPで$this->dataでアクセスできないので、エスケープする前の名前にする。 //さっきのnの宣言部からエスケープ前の名前をもってくる $.rating.groups[n].valueElem [...]]]></description>
			<content:encoded><![CDATA[<p>今回の記事は、CakePHPで <a href="http://www.fyneworks.com/jquery/star-rating/" title="jQuery Star Rating Plugin" onclick="pageTracker._trackPageview('/outgoing/www.fyneworks.com/jquery/star-rating/?referer=');">jQuery Star Rating Plugin</a> を使いたい人にしか役に立たない情報です。ニッチです。</p>
<p>いまCakePHPでWebアプリケーションを作ってて(趣味です)、スターレイティングを導入しようと思い、いくらか調べて、「jQuery Star Rating Plugin」が良さそうという結論に達した。</p>
<p>で、さっそく実装して試してみてたら、inputのnamｅがサンプルのままの「star」だと問題なく動作するんだけど、CakePHPのdata[モデル名][カラム名]の形式のnameにすると、表示もPOSTもうまくいかない。</p>
<p>調べてみると、jquery.rating.js は、inputのnameをもとにクラスやなんかを作るんだけど、そのさいに[ ]をエスケープしてる。</p>
<p><code>//99行目
var n = (this.name || 'unnamed-rating').replace(/\[|\]/, "_");
</code></p>
<p>まずこのエスケープがまずくて、最初の一個めしか置換してくれないので、直す。</p>
<p><code>//gオプションを追加
var n = (this.name || 'unnamed-rating').replace(/\[|\]/g, "_");
</code></p>
<p>で、値をPOSTするためにhiddenのinputを作ってる。</p>
<p><code>//111行目
$.rating.groups[n].valueElem = $('&lt;input type="hidden" name="' + n + '" value=""' + (settings.readOnly ? ' disabled="disabled"' : '') + '/&gt;');
</code></p>
<p>ここはエスケープしちゃうとCakePHPで$this->dataでアクセスできないので、エスケープする前の名前にする。</p>
<p><code>//さっきのnの宣言部からエスケープ前の名前をもってくる
$.rating.groups[n].valueElem = $('&lt;input type="hidden" name="' + (this.name || 'unnamed-rating') + '" value=""' + (settings.readOnly ? ' disabled="disabled"' : '') + '/&gt;');
</code></p>
<p>これでテストしたら、表示・挙動・POSTデータいづれも問題なさそうだった。コードを熟読してないので問題あるかもだけど。</p>
<p>・・・とまあ、ここまで書いといて気づいたんだけど、jQuery Star Rating Plugin ってGPL(と MIT License)なんですね。フリーだと思い込んでたよ。Webアプリケーションのソース公開はセキュリティ上問題ありそうだしなあ。同じようなの作るのめんどくさいなあ・・・。Creative Commons や MIT License なんかに比べるとGPLやLGPLって制限厳しいくせに線引きがあいまいすぎて、どうも好きになれない。</p>
]]></content:encoded>
			<wfw:commentRss>http://penguinlab.jp/blog/post/195/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (enhanced)

Served from: penguinlab.jp @ 2012-02-08 10:13:58 -->
