<?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; PHP</title>
	<atom:link href="http://www.kiteretsu-so.com/archives/category/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.kiteretsu-so.com</link>
	<description>関西で活動するクリエーターたちによるシェアブログ キテレツ荘。クリエイティブな話題を住人達が発信中。</description>
	<lastBuildDate>Mon, 17 Oct 2011 23:20:44 +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>たったこれだけで短縮URLサービスが作られていた件</title>
		<link>http://www.kiteretsu-so.com/archives/2176</link>
		<comments>http://www.kiteretsu-so.com/archives/2176#comments</comments>
		<pubDate>Tue, 12 Apr 2011 02:33:53 +0000</pubDate>
		<dc:creator>かしこ</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.kiteretsu-so.com/?p=2176</guid>
		<description><![CDATA[ようこそのお運び、厚く御礼申し上げます。 キテレツ荘で暗部を担当しております、かしこい風なだけのかしこです。 &#160; 新メンバー&#34;けんちき&#34;の入居祝いを兼ねて一本記事を書きやした。その内容とは・ [...]]]></description>
			<content:encoded><![CDATA[<p>ようこそのお運び、厚く御礼申し上げます。</p>
<p>キテレツ荘で暗部を担当しております、かしこい風なだけのかしこです。</p>
<p>&nbsp;</p>
<p>新メンバー&quot;けんちき&quot;の入居祝いを兼ねて一本記事を書きやした。その内容とは・・・？</p>
<p>&nbsp;</p>
<p>さて、昨今気付いているか気付かぬ内なのかはわかりませんが</p>
<p>URL短縮サービス、もしくはURL短縮システムというのを多く見かけます。</p>
<p>&nbsp;</p>
<p>なんじゃいそりゃ？</p>
<p>いえいえ、ご存知のハズです。</p>
<p>&nbsp;</p>
<p>例えば、Twitterで写真をtwitpectやInstantgramへアップロードしたときや、URL貼り付けた時。</p>
<p>気付かぬ内に短縮されたURLになっていることが多々あるはずです。</p>
<p>firestrageにも短縮URL発行とかって機能もありましたね。</p>
<p>あと、pixivの[p.tl]とか。</p>
<p>&nbsp;</p>
<p>今回はそのあたりの仕組みを作りながらお勉強したいと思います。</p>
<p>まずは&hellip;<a href="../../kashiko_work/shorten/index.php" shape="rect" target="_blank">短縮URLサンプル。</a></p>
<p>そしてたった数ステップだけでこのサービスが作られていたことに思わず真似したくなるでしょう。</p>
<p>&nbsp;</p>
<p><span id="more-2176"></span></p>
<p>まずこのURL短縮の目的と仕組みですが以下のようになっていると思います。（たぶん）</p>
<p>&nbsp;</p>
<p>■目的</p>
<p>長いURLだと煩わしい、もしくは文字制限のあるツールに貼り付けるには長すぎる。</p>
<p>こういったものを解消するために考えられたものだと思います。</p>
<p>&nbsp;</p>
<p>故にこのサービスを展開するには極力短いドメインが必要になってきます。</p>
<p>上記記載のpixivのドメイン名は[p.tl]ですから。</p>
<p>※今回はドメインは用意していないのでドメイン関連箇所は各自考慮して頂きたい！</p>
<p>&nbsp;</p>
<p>■仕組み</p>
<p>webサーバーにおいて現在のページから他のURLに転送できる仕組みがいくつかあります。</p>
<p>この中で「.htaccess」と呼ばれるwebサーバーの設定ファイルのようなものを利用して転送させます。</p>
<p>&nbsp;</p>
<p>この.htaccessに短縮前のURLと短縮後のURLを所定の記載ルールにのっとって記載してやると転送します。</p>
<p>&nbsp;</p>
<p>短縮URLというぐらいですからドメイン以降のURLも短く、且つランダムに設定してあげましょう。</p>
<p>&nbsp;</p>
<p>1．ユーザーが短縮前URLを入力</p>
<p>2．短縮後ランダムURLを生成</p>
<p>3．短縮前URLと短縮後URLを所定の形に成型して.htaccessファイルに追記していく。</p>
<p>&nbsp;</p>
<p>以上になります。</p>
<p>&nbsp;</p>
<p>論ずるより触るがよろし！</p>
<p>ということでこちらにサンプルをご用意しました。</p>
<p><a href="http://www.kiteretsu-so.com/kashiko_work/shorten/index.php" shape="rect" target="_blank">短縮URLサンプル</a></p>
<p>&nbsp;</p>
<p>さて、お勉強です。</p>
<p>1については割愛しても問題ないでしょうかね。</p>
<p>formメゾットをpostにして書き込みルーチンにデータを送ってます。（getでも構いませんがサービスとしてならpostでしょうか。）</p>
<p>&nbsp;</p>
<p>2についてはややこしい部分ではありましたが、幸いランダム生成の記事を書いてくださっていた方がいらっしゃったので利用させていただきました。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<ol>
<li>&nbsp;&nbsp;&nbsp; function getRandomString($nLengthRequired = 6){</li>
<li>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $sCharList = &quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_&quot;;</li>
<li>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mt_srand();</li>
<li>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $sRes = &quot;&quot;;</li>
<li>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for($i = 0;$i&lt;$nLengthRequired;$i++)</li>
<li>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $sRes .=$sCharList{mt_rand(0,strlen($sCharList)-1)};</li>
<li>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return $sRes;</li>
<li>&nbsp;&nbsp;&nbsp; }</li>
<li>&nbsp;&nbsp;&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp; $rand = getRandomString();</li>
</ol>
<p>&nbsp;</p>
<p>まぁ、みたまんまです。</p>
<p>&nbsp;</p>
<p>3については書き込みとリダイレクトの構文を一気に解説します。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<ol>
<li>$shorten = $_POST[&#39;shorten&#39;];</li>
<li>$file = &#39;.htaccess&#39;;</li>
<li>&nbsp;</li>
<li>$write = &quot;Redirect permanent /kashiko_work/shorten/$rand $shorten\n&quot;;</li>
<li>$text = &quot;http://www.kiteretsu-so.com/kashiko_work/shorten/$rand&quot;;</li>
<li>print &quot;発行された短縮URLは【&quot;.$text.&quot;】です。&quot;;</li>
<li>print &quot;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&quot;;</li>
<li>file_put_contents($file, $write, FILE_APPEND | LOCK_EX);</li>
</ol>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Redirect permanent A B　と記載することでAのURLにアクセスがあればBへ転送しなさいという意味になります。</p>
<p>Aというのは2でランダムに生成したサーバーのルートからのURLになります。</p>
<p>Bというのはpostで飛ばされてきたデータそのままです。</p>
<p>若干解説をすると1行目で入力画面からのPOSTデータを変数$shortenに入力</p>
<p>２行目で書き込むファイルを指定</p>
<p>4行目で書き込む形に整形して、５行目は見た目の整形</p>
<p>8行目でファイル書き込み指示です。</p>
<p>&nbsp;</p>
<p>この形で.htaccessファイルに追記できればいいので</p>
<p>file_put_contents($file, $write, FILE_APPEND | LOCK_EX);</p>
<p>で追記しましょうね。と指示されています。</p>
<p>file_put_contents関数の第一引数は追記するファイル名、第二引数は追記する内容、第三引数は書き込みモードです。</p>
<p>今回の&quot;FILE_APPEND | LOCK_EX&quot;というのは追記します。そしてファイルにアクセスしているので他のアクセスは禁止しますという記載方法です。</p>
<p>詳しくは別途Google先生に聞いてみてください。</p>
<p>&nbsp;</p>
<p>さぁ、いかがでしたでしょうか。簡単でしょｗ</p>
<p>実際のところphp10行くらいでできちゃってるんですから。</p>
<p>&nbsp;</p>
<p>これを勉強するメリットは2つあります。</p>
<p>まず、既存のサービスは結構簡単に作られているんだよ。ということを理解できる。要するにアイディアなわけです。</p>
<p>次にphpという言語の見せ場のひとつ、ファイルにデータを書き込むということを理解できる。</p>
<p>&nbsp;</p>
<p>実際にこれをサービス化するのであればセキュリティー対策とランダム発行のURLに重複がないかどうかをチェックする仕組みを入れてやらなければいけませんが・・・</p>
<p>それでもここまでできれば余裕じゃないでしょうか。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>今回は既存サービスの仕組みを分解・理解・再構築のステップを踏まえたphpのお勉強でした。</p>
<p>&nbsp;</p>
<p>ちなみにタイトルは以前のもーりーの記事「<a href="http://www.kiteretsu-so.com/archives/2156">本当に読んでほしいならタイトルにこだわるべき</a>」から参考にしました。</p>
<p>&nbsp;</p>
<p>かしこ。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kiteretsu-so.com/archives/2176/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【夏休み企画】検索システムつくってみようぜ！⑤</title>
		<link>http://www.kiteretsu-so.com/archives/1685</link>
		<comments>http://www.kiteretsu-so.com/archives/1685#comments</comments>
		<pubDate>Mon, 07 Sep 2009 14:00:59 +0000</pubDate>
		<dc:creator>かしこ</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.kiteretsu-so.com/?p=1685</guid>
		<description><![CDATA[コオロギの唄が聞こえる季節になってきました。 やたらと忙しく最終回の5回目をなかなか更新できなかった、かしこです。 【５、条件による検索結果の表示（完成）】 ・検索結果の表示。 というルーチンの概要説明となります。 指定 [...]]]></description>
			<content:encoded><![CDATA[<p>コオロギの唄が聞こえる季節になってきました。</p>
<p>やたらと忙しく最終回の5回目をなかなか更新できなかった、かしこです。</p>
<p>【５、条件による検索結果の表示（完成）】</p>
<p>・検索結果の表示。</p>
<p>というルーチンの概要説明となります。</p>
<p>指定した条件に対してdata.phpの中身を表示。前回の検索数で作った変数$banbanを利用してチャラット完成させましょう。</p>
<p>実際の完成形はこちら⇒「<a href="../../kashiko_work/search/index.php" target="_blank">キテ荘的検索ってみよ</a>」</p>
<p>スターターキットは<a href="../../kashiko_work/search/starter_kit.zip" target="_blank">こちら</a>。</p>
<p><span id="more-1685"></span></p>
<p>さて、前述の通り$banbanを利用します。</p>
<p>？・・・$banbanってなにって？</p>
<p>ふむ、$banbanは前回の検索数表示ルーチンの中に、仕組んだ変数ですが、この変数の中には表示されるべき内容のみが値のみが配列として格納されています。</p>
<p>これはですね、data.phpの全データを$listとして読み出して、これを元に条件に該当するものを絞って、結果その件数＝検索数というルーチンを用意しました。</p>
<p>その際に、該当する時点の変数だけを$banbanに格納するということなのです。</p>
<p>わかりにくれば検索数のfor文の手前で「print_r($list)」とすると全件表示されますが、for文後に「print_r($banban)」とすると該当するデータのみの表示となります。</p>
<p>これこそが本日、表示すべきデータそのものということなのです。</p>
<p>ではデータを書き出してみましょう。</p>
<p>for($i= ０;$i&lt;検索数;$i++){</p>
<p>print $banban[i]["id"];</p>
<p>print $banban[i]["price"];</p>
<p>print $banban[i]["comment"];</p>
<p>}</p>
<p>こうすると該当i番目の連想配列のkeyを呼び出しめでたく表示されます。</p>
<p>あとは表示させたい形にphpを書き出すようにしてあげればOKです。</p>
<p>htmlの形成は完成ファイルを参照してください。</p>
<p>ポイントは前回の検索数を表示するルーチンに$banban（変数はなんでもいい）を仕組んでおく。あとはそれを表示するという”よい意味での手抜き”です。</p>
<p>今日のデータはこちらから<a href="../../kashiko_work/search/index_4.zip">ダウンロード</a>できます。</p>
<p>さてさて、検索シリーズは今回で完成ということで、終了です。</p>
<p>ただし、ページングの解説は飛ばしてますし、実際は並べ替えも必要になるでしょうが・・・今回のシリーズはあくまでも検索ルーチンの構築なのでまた違う機会にでも紹介・解説できればなーっと。</p>
<p>というわけで無駄に記事の更新を続けた検索システムをつくってみようぜ！はいかがでしたでしょうか。</p>
<p>難易度は☆☆★★★・・・こんなもんでしょうか。</p>
<p>初見でわかるアナタはステキです。わかないアナタも完成形のソースからきっかけをつかんでもらえばOKです。</p>
<p>ということでバイババーイ！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kiteretsu-so.com/archives/1685/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>【夏休み企画】検索システムつくってみようぜ！④</title>
		<link>http://www.kiteretsu-so.com/archives/1638</link>
		<comments>http://www.kiteretsu-so.com/archives/1638#comments</comments>
		<pubDate>Thu, 20 Aug 2009 15:35:21 +0000</pubDate>
		<dc:creator>かしこ</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.kiteretsu-so.com/?p=1638</guid>
		<description><![CDATA[今年は冷夏だそうですが皆様いかがお過ごしでしょうか。 韓国の友人に荷物を送ったら韓国の税関で検疫をうけたと連絡を受けたかしこです。 【４、条件による検索結果数の表示】 ・検索条件に何件ヒットとしたか。 というルーチンの概 [...]]]></description>
			<content:encoded><![CDATA[<p>今年は冷夏だそうですが皆様いかがお過ごしでしょうか。</p>
<p>韓国の友人に荷物を送ったら韓国の税関で検疫をうけたと連絡を受けたかしこです。</p>
<p>【４、条件による検索結果数の表示】</p>
<p>・検索条件に何件ヒットとしたか。</p>
<p>というルーチンの概要説明となります。</p>
<p>指定した条件に対してdata.phpの中身を精査して何件該当するのか。ここをクリアすれば検索は余裕です。</p>
<p>実際の完成形はこちら⇒「<a href="../../kashiko_work/search/index.php" target="_blank">キテ荘的検索ってみよ</a>」</p>
<p>スターターキットは<a href="../../kashiko_work/search/starter_kit.zip" target="_blank">こちら</a>。</p>
<p><span id="more-1638"></span></p>
<p>では、ルーチンを考えてみます。</p>
<p>Getで受信した変数とdata.phpに連想配列として格納されている商品データをif文で選別する。</p>
<p>？なのことだ・・・とお思いのアナタ。</p>
<p>このシリーズの一回目にやった”print_r($list);”でデータを確認してみてください。</p>
<p>[cat]=&gt;&#8221;1&#8243; とかという表記があったはず。それとGetで受信した変数（$cat）を付きあわせて該当するファイルをカウントする。</p>
<p>それを条件の数だけチェックしていけば残った配列数が該当件数、しいては該当ファイルということになります。</p>
<p>あとはそのルーチンをプログラムしてやればOK！</p>
<p>ということで下をご覧ください。<br />
=========================================</p>
<p>&lt;?<br />
include &#8216;data.php&#8217;;</p>
<p>if($_GET["cat"]){<br />
$cat = $_GET["cat"];<br />
}else{<br />
$cat = &#8220;&#8221; ;<br />
}<br />
if($_GET["catd"]){<br />
$catd = $_GET["catd"];<br />
}else{<br />
$catd = &#8220;&#8221; ;<br />
}<br />
if($_GET["new"]){<br />
$new = $_GET["new"];<br />
}else{<br />
$new = &#8220;&#8221; ;<br />
}<br />
$snum = $cat.&#8221;-&#8221;.$catd.&#8221;-&#8221;.$new;<br />
?&gt;</p>
<p>&lt;?</p>
<p>$num = count($list);<br />
$searchnum = 0;<br />
if($list){<br />
for($i= 0;$i&lt;$num;$i++){<br />
if($cat){<br />
$a = $list[$i]["cat"];<br />
}<br />
if($catd){<br />
$b = $list[$i]["cat_detail"];<br />
}<br />
if($new){<br />
$c = $list[$i]["new"];<br />
}<br />
$dnum = $a.&#8221;-&#8221;.$b.&#8221;-&#8221;.$c;<br />
if($snum == $dnum){<br />
$searchnum++;<br />
$banban[] = $list[$i];<br />
}<br />
}<br />
}</p>
<p>?&gt;</p>
<p>&lt;?=$searchnum?&gt;<br />
=========================================</p>
<p>前半ブロックでGetで受信した変数を付きあわせしやすくするために”$snum”という変数にまとめています。</p>
<p>さてさて、本日のメイン解説となる後半ブロックです。</p>
<p>まずdata.phpから読み込んだデータをcount関数で何件（何個の配列数が）あるかどうかを調べて$numに格納します。</p>
<p>これはその下のfor文を何回まわすのかという数を調べているわけです。そう、$numの数だけまわします。</p>
<p>$searchnumは検索該当数をカウントするために用意。forでまわる度にカウントが１つずつ増えていきます。これが「○○ヒット」の数になるわけです。</p>
<p>ただし、このままですと$listが全部表示されてしまいますのでfor文の中で精査していきます。</p>
<p>$a=$list[$i]["cat"]・・・＄listの中のforのi番目の連想配列キーcat　を変数$aに格納</p>
<p>$b = $list[$i]["cat_detail"]・・・＄listの中のforのi番目の連想配列キーcat_detail　を変数$bに格納</p>
<p>$ｃ = $list[$i]["new"]・・・＄listの中のforのi番目の連想配列キーnew　を変数$cに格納</p>
<p>これを変数$dnumにまとめて格納・・・そう、これが所謂、精査の条件になります。</p>
<p>あとはGetした$snumとforの中の$dnumのイコールのときだけ$searchnumにプラス１してやります。</p>
<p>これで検索数がはじき出されます。</p>
<p>ここからは補足ですが・・・</p>
<p>$banban[] = $list[$i];は次回、実際のデータを吐き出す際に使用する項目です。これは該当したi番目の配列を$banbanに配列として格納してゆけよ！という命令です。</p>
<p>ここは次回に使うのでまた改めて解説しますが、要はヒットした配列だけを$banbanに入れるということなのです。</p>
<p>ということで本日はここまでです。（どんどん複雑になっていくなぁ・・・）</p>
<p>今日のデータはこちらから<a href="../../kashiko_work/search/index_3.zip">ダウンロード</a>できます。</p>
<p>さてさて、次回は最終回です。実際にデータを吐き出すルーチンをやりますが、ポイントは$banbanですｗ</p>
<p>【予定】</p>
<p>・５、条件による検索結果の表示（完成）</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kiteretsu-so.com/archives/1638/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>【夏休み企画】検索システムつくってみようぜ！③</title>
		<link>http://www.kiteretsu-so.com/archives/1634</link>
		<comments>http://www.kiteretsu-so.com/archives/1634#comments</comments>
		<pubDate>Wed, 19 Aug 2009 15:11:41 +0000</pubDate>
		<dc:creator>かしこ</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.kiteretsu-so.com/?p=1634</guid>
		<description><![CDATA[キテレツ荘のデザインがリュニューアルされた様ですが皆様いかがお過ごしでしょうか。 さてさて、そろそろ脱力し始めそうな気配がプンプンしているかしこです。 【３、Getによるform内のphp化】 ・Getで受信するルーチン [...]]]></description>
			<content:encoded><![CDATA[<p>キテレツ荘のデザインがリュニューアルされた様ですが皆様いかがお過ごしでしょうか。</p>
<p>さてさて、そろそろ脱力し始めそうな気配がプンプンしているかしこです。</p>
<p>【３、Getによるform内のphp化】</p>
<p>・Getで受信するルーチン</p>
<p>・Getで受信した内容をフォームに反映させる</p>
<p>この2つで参ります。が、えー、恐らくこのシリーズのキーポイント１です。</p>
<p>そのため、ボリュームもヤバイかも。</p>
<p>実際の完成形はこちら⇒「<a href="../../kashiko_work/search/index.php" target="_blank">キテ荘的検索ってみよ</a>」</p>
<p>スターターキットは<a href="../../kashiko_work/search/starter_kit.zip" target="_blank">こちら</a>。</p>
<p><span id="more-1634"></span></p>
<p>まずはGet、Postや書き方などを<a href="http://nyx.pu1.net/practice/external_var/" target="_blank">こちら</a>で予習することをオススメします。</p>
<p>■Getで受信するルーチン</p>
<p>フォームのメゾットをGetとして送信するとURLが「index.php?cat=1」のような形になります。</p>
<p>これを受信するには「$_GET["cat"];」と書いてあげれば受信できます。</p>
<p>ではでは、今回のシステムもcatを受信するので次のようにします。</p>
<p>=========================================</p>
<p>if($_GET["cat"]){<br />
$cat = $_GET["cat"];<br />
}else{<br />
$cat = &#8220;&#8221; ;<br />
}</p>
<p>=========================================</p>
<p>なにをしているのかといえば『$_GET["cat"]』があれば変数$catに代入。</p>
<p>なければNull（空に）という処理をしています。</p>
<p>今回のシステムではcat、catd、price、new、typeの5つを受信しますが、type以外は上のルーチンで対応可能です。</p>
<p>typeについてはﾁｪｯｸボックスを利用しているので扱いが少し異なります。</p>
<p>=========================================</p>
<p>if($_GET["type"]){<br />
$type = $_GET['type'];<br />
}else{<br />
$type = array(1,2,3,4,5,6);<br />
}</p>
<p>=========================================</p>
<p>$_GETがあれば変数$typeへ、なければ$typeに配列として1,2,3,4,5,6を代入しています。</p>
<p>何故、ここだけ処理が違うのか・・・といいますと、</p>
<p>受信した際のURLが「index.php?type[]=1&amp;type[]=2&amp;type[]=3」というように受信して変数typeに配列として格納しています。</p>
<p>で、チェックボックスが全て空で検索するという矛盾対策のために空で受信した場合は全てにチェックを入れて受信するという処理を行っています。</p>
<p>ま、このあたりの処理はあまり深く追求しなくてもよいと思います。配列の受信はこんなものだ！的でよいでしょう。</p>
<p>■Getで受信した内容をフォームに反映させる</p>
<p>なんのことかといいますと、form内のselectbox等で検索をしますわね。</p>
<p>結果が呼びだされた時にこの処理をしないとイチイチselectbox達が初期状態に戻ります。</p>
<p>そうなると自分が何を検索したのかがわからなくなるという事態が発生します。またその状態で再度検索をすると先の条件がどこかにいってしまいます。これはユーザービリティ云々の前に検索システムとしては致命的な欠陥といってもいいでしょう。</p>
<p>ここからはそうならない処理を行ってみたいと思います。</p>
<p>では、具体的にどうするのか？</p>
<p>要はselectの中身に”checked”をつけてやれればよいのです。</p>
<p>下は新着か否かという項目をいじってみた例です。</p>
<p>=========================================<br />
&lt;select name=&#8221;new&#8221; style=&#8221;width:160px;&#8221;&gt;<br />
&lt;option value=&#8221;0&#8243;<br />
&lt;?<br />
if($new == 0){<br />
print &#8220;selected&#8221;;<br />
}<br />
?&gt;<br />
&gt;こだわらない&lt;/option&gt;<br />
&lt;option value=&#8221;1&#8243;<br />
&lt;?<br />
if($new == 1){<br />
print &#8220;selected&#8221;;<br />
}<br />
?&gt;<br />
&gt;新着で探す&lt;/option&gt;<br />
&lt;/select&gt;<br />
=========================================<br />
この例でいくとGetで$newを取得していれば０か１の値が入っているのでselectの間にphpをねじ込んでいます。で、 もし０（null）なら「こだわらない」に”checked”が、１なら「新着で探す」に”checked”が入るので、めでたく選択項目がキープされるわけです。</p>
<p>他の項目もこれと同じルーチンでOKですがやはりチェックボックスの項目だけは別になります。<br />
=========================================</p>
<p>&lt;input type=&#8221;checkbox&#8221; id=&#8221;type1&#8243; name=&#8221;type[]&#8221; value=&#8221;1&#8243;<br />
&lt;?<br />
if($type[0]==1){<br />
print &#8220;checked&#8221;;<br />
}<br />
?&gt;<br />
/&gt;</p>
<p>&lt;input type=&#8221;checkbox&#8221; id=&#8221;type2&#8243; name=&#8221;type[]&#8221; value=&#8221;2&#8243;<br />
&lt;?<br />
if($type[0]==2||$type[1]==2){<br />
print &#8220;checked&#8221;;<br />
}<br />
?&gt;<br />
/&gt;</p>
<p>&lt;input type=&#8221;checkbox&#8221; id=&#8221;type3&#8243; name=&#8221;type[]&#8221; value=&#8221;3&#8243;<br />
&lt;?<br />
if($type[0]==3||$type[1]==3||$type[2]==3){<br />
print &#8220;checked&#8221;;<br />
}<br />
?&gt;<br />
/&gt;</p>
<p>=========================================<br />
これも理屈は同じで”checked”をつけるかつけないかっていう処理なのですがif文の条件が少し複雑で$typeの配列の何番目に格納されているかが送信時のチェックボックスのチェック数によってことなるので想定される配列の順番だけ条件を用意しておるわけです。</p>
<p>このあたりは少し複雑で、基礎的な知識がないと苦しいです。勉強会があるようなので、解説してもいいかと思っています。</p>
<p>詳しくは今日の完成データを参照してくだることを期待しています。</p>
<p>ということで本日はここまでです。（だいぶ長くなりましたよ・・・）</p>
<p>今日のデータはこちらから<a href="../../kashiko_work/search/index_2.zip">ダウンロード</a>できます。</p>
<p>さてさて、次回は実際の検索ルーチンが絡んでくる検索結果数の表示にチャンレンジしましょう。</p>
<p>【予定】</p>
<p>・４、条件による検索結果数の表示</p>
<p>・５、条件による検索結果の表示（完成）</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kiteretsu-so.com/archives/1634/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【夏休み企画】検索システムつくってみようぜ！②</title>
		<link>http://www.kiteretsu-so.com/archives/1630</link>
		<comments>http://www.kiteretsu-so.com/archives/1630#comments</comments>
		<pubDate>Mon, 17 Aug 2009 15:38:02 +0000</pubDate>
		<dc:creator>かしこ</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.kiteretsu-so.com/?p=1630</guid>
		<description><![CDATA[休みボケの月曜日ですが、皆様いかがお過ごしでしょうか。 superflyの「恋する瞳は美しい」をやたらリピートしているかしこです。 さてさて、テンションが続く内に連投しときます。 【２、初期解説とデータ読み込み】 ・ｈｔ [...]]]></description>
			<content:encoded><![CDATA[<p>休みボケの月曜日ですが、皆様いかがお過ごしでしょうか。</p>
<p>superflyの「<a href="http://www.youtube.com/watch?v=BiuAUe_WUNA" target="_blank" class="broken_link">恋する瞳は美しい</a>」をやたらリピートしているかしこです。</p>
<p>さてさて、テンションが続く内に連投しときます。<br />
【２、初期解説とデータ読み込み】</p>
<p>・ｈｔｍｌの補助的解説</p>
<p>・htmlのｐｈｐ化</p>
<p>・データの読み込みと確認方法</p>
<p>この2つで参ります。</p>
<p>実際の完成形はこちら⇒「<a href="http://www.kiteretsu-so.com/kashiko_work/search/index.php" target="_blank">キテ荘的検索ってみよ</a>」</p>
<p>スターターキットは<a href="http://www.kiteretsu-so.com/kashiko_work/search/starter_kit.zip" target="_blank">こちら</a>。</p>
<p><span id="more-1630"></span></p>
<p>・ｈｔｍｌの補助的解説</p>
<p>カテゴリーとカテゴリー詳細の連動はJavaScriptでおこなっております。</p>
<p>元ネタは<a href="http://jsajax.com/NestedDropDownArticle487.aspx" target="_blank">こちら</a>。</p>
<p>ポイントはｈｔｍｌの94行目、「 new Option(newOptions[i],newValues[i],false,false); 」</p>
<p>ここに第3引数をflaseです。</p>
<p>これはphp化した際にtrueを設定するためにあえて宣言しています。詳細はその時に解説します。</p>
<p>あとは皆さんチャラっと流せますよｗ</p>
<p>・htmlのｐｈｐ化</p>
<p>大層な事をいっていますが新規でphpファイルを作成して便宜上index.phpとします。</p>
<p>さて、sakuraサーバーのPHPのデフォルトcharsetはEUC-JPということなので、エンコードEUC-JPとしてペーストしてください。</p>
<p>以上</p>
<p>・データの読み込みと確認方法</p>
<p>今回の本題、スターターキットに同梱されているdata.phpを読み込んで検索するアイテムを読み込めるようにします。</p>
<p>data.phpにはあらかじめ商品データを$listという変数に連想配列で格納してあります。興味があれば覗いてみてください。</p>
<p>では、1行目にｐｈｐの宣言をしてdata.phpをincludeします。</p>
<p>======================================</p>
<p>&lt;?</p>
<p>include &#8216;data.php&#8217;;</p>
<p>?&gt;</p>
<p>======================================</p>
<p>はい、これで読み込み完了です。</p>
<p>？、実感がない。</p>
<p>はい、そうですか・・・ではではinclude&#8217;data.php&#8217;;の一行下に次のコードを。</p>
<p>======================================</p>
<p>print_r($list);</p>
<p>======================================</p>
<p>これは予めdata.phpで設定してある変数$listを確認するための一行です。</p>
<p>これで、配列の中身が一目瞭然となります。</p>
<p>ということで本日はここまでです。</p>
<p>今日のデータはこちらから<a href="http://www.kiteretsu-so.com/kashiko_work/search/index_1.zip">ダウンロード</a>できます。</p>
<p>さてさて、次回は検索をGetで送信するようにしていきましょう。</p>
<p>【予定】</p>
<p>・３、Getによるform内のphp化</p>
<p>・４、条件による検索結果数の表示</p>
<p>・５、条件による検索結果の表示（完成）</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kiteretsu-so.com/archives/1630/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>【夏休み企画】検索システムつくってみようぜ！①</title>
		<link>http://www.kiteretsu-so.com/archives/1627</link>
		<comments>http://www.kiteretsu-so.com/archives/1627#comments</comments>
		<pubDate>Sun, 16 Aug 2009 16:09:36 +0000</pubDate>
		<dc:creator>かしこ</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.kiteretsu-so.com/?p=1627</guid>
		<description><![CDATA[残暑厳しい中、皆様いかがおすごしでしょうか。 腱鞘炎中のかしこです。 夏休みっーことと、キテレツ荘ってTips系の記事少ないので試しにこういうのやってみようと。 検索システムをつくろう！ ・実用に耐えれるレベルの検索シス [...]]]></description>
			<content:encoded><![CDATA[<p>残暑厳しい中、皆様いかがおすごしでしょうか。</p>
<p>腱鞘炎中のかしこです。</p>
<p>夏休みっーことと、キテレツ荘ってTips系の記事少ないので試しにこういうのやってみようと。</p>
<p><strong>検索システムをつくろう！</strong></p>
<p>・実用に耐えれるレベルの検索システムをシリーズで作っていく。</p>
<p>・phpの開発の流れを同時に学ぶ。</p>
<p>・自分用のまとめ</p>
<p>という3本のテーゼを持ってすすめてみます。</p>
<p>実際の完成形はこちら⇒「<a href="http://www.kiteretsu-so.com/kashiko_work/search/index.php" target="_blank">キテ荘的検索ってみよう</a>」</p>
<p><span id="more-1627"></span></p>
<p>■１、概要、準備編■</p>
<p>さて、まず架空の雑貨メーカー「Brancbranc」を設定しています。</p>
<p>その上で、スペックを決めていきます。</p>
<p>・雑貨メーカーなのでカテゴリー、カテゴリー詳細は必須。また新着アイテムなんてあるとステキだろうから用意。あと金額設定もいるでしょう。その上でﾁｪｯｸボックス込みの検索があれば汎用性と実用性も増す・・・ということで完成形のような形で準備。</p>
<p>・商品単位で検索して、ブックマークもする可能性もあるので送信方式はGetで。</p>
<p>・あくまでも検索システムがメインなので登録、更新のプロセスは省く。</p>
<p>ということでデザイン⇒コーディング済みのhtmlと必要なImgと商品用の画像をパーケージにしたスターターキットを<a href="http://www.kiteretsu-so.com/kashiko_work/search/starter_kit.zip">ダウンロード</a>して始めていきましょう。</p>
<p>■<a href="http://www.kiteretsu-so.com/kashiko_work/search/starter_kit.zip">スターターキット</a></p>
<p>これを「XAMPP」等の環境に定義するか、サーバー環境に準備するかしていよいよ次回よりphp化して機能を追加していきます。</p>
<p>【予定】</p>
<p>・２、初期解説とデータ読み込み</p>
<p>・３、Getによるform内のphp化</p>
<p>・４、条件による検索結果数の表示</p>
<p>・５、条件による検索結果の表示（完成）</p>
<p>さてさて、企画倒れにならないように間をあけずにリリースしていく予定です・・・よ？</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kiteretsu-so.com/archives/1627/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>初心者でもわかる『マチコ』解体新書～「読みたいとこだけ読め！」</title>
		<link>http://www.kiteretsu-so.com/archives/1228</link>
		<comments>http://www.kiteretsu-so.com/archives/1228#comments</comments>
		<pubDate>Sat, 16 May 2009 09:50:11 +0000</pubDate>
		<dc:creator>くっさん</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[モバイル]]></category>

		<guid isPermaLink="false">http://www.kiteretsu-so.com/?p=1228</guid>
		<description><![CDATA[こんばんわ、私が最近アメブロで活躍している棟居です。 先日の「第1回　キテレツ巡業　キテレツ春場所」で発表したモバイルサービス『マチコ』の全貌です。 今回の開発にあたって、モバイルの現状、技術的な部分、その他知りたい情報 [...]]]></description>
			<content:encoded><![CDATA[<p>こんばんわ、私が最近アメブロで活躍している棟居です。</p>
<p>先日の「第1回　キテレツ巡業　キテレツ春場所」で発表したモバイルサービス『マチコ』の全貌です。<br />
今回の開発にあたって、モバイルの現状、技術的な部分、その他知りたい情報など共有できれば良いし、アウトプットしたいので見たいところだけ見てください。</p>
<div id="top">
<ol>
<li><a href="#li1">結局『マチコ』の全体構成って？</a></li>
<li><a href="#li2">GPSやら位置情報がどうのこうの言ってるけど何？</a></li>
<li><a href="#li3">実際の位置情報を取得するのって難しい？</a></li>
<li><a href="#li4">このサービスの核になるPEARのNet_UserAgent_Mobile_GPS</a></li>
<li><a href="#li5">電話がかかってきたり、他の人からメールがきたらどうするの？</a></li>
<li><a href="#li6">取得した【緯度】【経度】【距離】【タイムスタンプ】をCSVで保存</a></li>
<li><a href="#li7">現在人気モバイルサイトの傾向</a></li>
</ol>
</div>
<p><span id="more-1228"></span></p>
<h3 id="li1" style="border-left:#f66 solid 5px; padding:0 0 0 8px;">結局『マチコ』の全体構成って？</h3>
<p><img src="http://www.kiteretsu-so.com/wordpress/wp-content/uploads/2009/05/machikoflow.jpg" alt="machikoflow" title="machikoflow" width="520" height="2403" class="alignnone size-full wp-image-1238" style="background:none;" /></p>
<p style="text-align:right;"><a href="#body_top" style="color:#00d">▲この記事の先頭に戻る</a></p>
<h3 id="li2" style="border-left:#f66 solid 5px; padding:0 0 0 8px;">GPSやら位置情報がどうのこうの言ってるけど何？</h3>
<p>携帯電話で位置情報を取得する方法は２つあります。<br />
・基地局を使った位置情報<br />
・GPSを使った位置情報<br />
の２つです。今回は主に、後者のGPSを使った位置情報の取得の仕方を利用しています。<br />
それでは両者のちがいを簡単に説明します。</p>
<p>[基地局を使った位置情報]<br />
<img src="http://www.kiteretsu-so.com/wordpress/wp-content/uploads/2009/05/kichikyoku.gif" alt="kichikyoku" title="kichikyoku" width="490" height="271" class="alignnone size-full wp-image-1248" /><br />
　基地局の位置情報を利用した場合は各キャリア（docomo,au,softbankなど）のアンテナとなる基地局を利用することになります。<br />
<strong>メリット</strong>はGPS対応機種でなくても利用できるところです。しかし、自分が今いる位置を正確に表してくれるとは限りません。<br />
だいぶズレます。数kmずれるのなんかざらにあります。そういう面で、かなりアバウトなところが<strong>デメリット</strong>ですね。</p>
<p>[GPSを使った位置情報]<br />
<img src="http://www.kiteretsu-so.com/wordpress/wp-content/uploads/2009/05/eisei.gif" alt="eisei" title="eisei" width="490" height="350" class="alignnone size-full wp-image-1251" /></p>
<p>　GPSを利用した場合、衛星使っているのでかなり正確な位置情報を取得することができます。みなさんご存知のカーナビとかに使われているシステムですね！<br />
ただ、位置を取得す場所によって測位レベルが低いとやはりズレちゃいます。それでも、基地局のアンテナを利用するよりも遥かに正確に位置を取得することができるのが<strong>メリット</strong>です。<br />
　<strong>デメリット</strong>は、まだGPSに対応している携帯の機種をもっている人が少ないというところです。<br />
ただ、<span style="color:#f00;">総務省が今年度４月から携帯電話にはGPS搭載を義務づける</span>ことが決まっています。今後必ずGPS対応のサービスが普及してくるでしょう。</p>
<p>ちなみにGPSがどれくらい精度が高いかというと、この写真（Google Earth）を見て頂ければわかると思います。<br />
<img src="http://www.kiteretsu-so.com/wordpress/wp-content/uploads/2009/05/google_earth.jpg" alt="google_earth" title="google_earth" width="500" height="494" class="alignnone size-full wp-image-1255" /></p>
<p>これは、先日の5月10日の発表会の後にデジハリ大阪校の前の道路で、実験で位置情報を取得した位置です。<br />
右の黄色のピンの位置が実際に取得された位置です。<br />
多少ずれてはいますが、ほぼあっています。おそらく誤差は数メートルといったところでしょう！やはり衛星のシステムを使うと精度が高いんですね～</p>
<p style="text-align:right;"><a href="#body_top" style="color:#00d">▲この記事の先頭に戻る</a></p>
<h3 id="li3" style="border-left:#f66 solid 5px; padding:0 0 0 8px;">実際の位置情報を取得するのって難しい？</h3>
<p>　実際に位置情報を取得する方法はメチャ簡単です。</p>
<p>『DoCoMOの場合』</p>
<pre class="brush: xml; title: ; notranslate">&lt;a href=&quot;http://www.example.com/index.php?&quot; lcs&gt;GPSで位置情報を取得&lt;/a&gt;</pre>
<p>『auの場合』</p>
<pre class="brush: xml; title: ; notranslate">&lt;a href=&quot;device:gpsone?url=http://www.example.com/index.php?ver=1&amp;ver=1&amp;datum=0&amp;unit=0&quot;&gt;GPSで位置情報を取得&lt;/a&gt;</pre>
<p>『softbankの場合』</p>
<pre class="brush: xml; title: ; notranslate">&lt;a href=&quot;location:auto?url=http://www.example.com/index.php?&quot;&gt;GPSで位置情報を取得&lt;/a&gt;</pre>
<p>softbankの場合「location:auto」で簡易位置情報（基地局で取得する方）「location:cell」とGPSで取得する「location:gps」の優先度の高い方に自動的に選択されるので、GPSに非対応の機種でも簡易位置で取得できます。</p>
<p>設置するソースは簡単です。<br />
ただ、設置しても今度レスポンスされたときの返される戻り値がまたキャリアによって変わってくるのです。3キャリアとも単純に「緯度」と「経度」が10進数で返ってこりゃ一番楽なのですが、そういうわけにはいかないです。<br />
また、キャリアごとに設置するa要素のhref属性が違うので、振り分ける必要が出てきます。<br />
よって、結果的に結構めんどくさいです。</p>
<p style="text-align:right;"><a href="#body_top" style="color:#00d">▲この記事の先頭に戻る</a></p>
<h3 id="li4" style="border-left:#f66 solid 5px; padding:0 0 0 8px;">このサービスの核になるPEARのNet_UserAgent_Mobile_GPS</h3>
<p>　ここはPHPの話になります。<br />
各キャリアごとにアクセスしてきたユーザーエージェントを判別して、GETで取得するための（「<a href="#li3">3.実際の位置情報を取得するのって難しい？</a>」）の記述を3つ書いて、更にまた、各キャリアごとのレスポンスのパラメータを分解させて・・・<br />
みたいなことを１からやろうとすると、それだけで１ヶ月かかっちゃいます。</p>
<p>そこでPEARというところから提供されているPHPで有名なライブラリを使います。<br />
使うライブラリ名は<a href="http://pear.php.net/package/Net_UserAgent_Mobile_GPS/" target="_blank">Net_UserAgent_Mobile_GPS</a>です。</p>
<p>例えば、GPSで位置情報を取得するためのa要素（リンク）を設置するのと、それをクリックした後のレスポンスで緯度・経度を取得するソースは以下のような感じです。</p>
<p>[リンクの設置](PEARでNet_UserAgent_Mobile_GPSをインストールしていることを前提としています)</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
require 'Net/UserAgent/Mobile/GPS.php';

try {
    $g = Net_UserAgent_Mobile_GPS::factory();
} catch (Net_UserAgent_Mobile_GPS_Exception $e) {
    var_dump($e-&gt;getMessage());
    exit();
}
$url = &quot;http://machiko.kiteretsu-so.com/form.php&quot;;
$str = &quot;GPS対応機種かどうかﾁｪｯｸ&quot;;
$glink = $g-&gt;getGPSLink($url, $str);
?&gt;
</pre>
<p>[返り値の緯度と経度を取得]</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
require 'Net/UserAgent/Mobile/GPS.php';

try {
    $g = Net_UserAgent_Mobile_GPS::factory();
} catch (Net_UserAgent_Mobile_GPS_Exception $e) {
    var_dump($e-&gt;getMessage());
    exit();
}
$res = $g-&gt;getGPSResponse();
//array(2) { [&quot;lat&quot;]=&gt;  string(13) &quot;+35.40.58.968&quot; [&quot;lon&quot;]=&gt;  string(14) &quot;+139.41.12.966&quot; }
?&gt;
</pre>
<p>めちゃくちゃ簡単です。<br />
60進数で緯度と経度が配列で返ってくるので、超扱いやすいです。<br />
これだけで、3キャリア統一したかたちで動かすことができるのだから、やはり先人に感謝せんといけませんね(^^)</p>
<p>僕の個人のブログにも<a href="http://kusumoto.osakazine.net/e177674.html" target="_blank">詳細</a>あります。</p>
<p style="text-align:right;"><a href="#body_top" style="color:#00d">▲この記事の先頭に戻る</a></p>
<h3 id="li5" style="border-left:#f66 solid 5px; padding:0 0 0 8px;">電話がかかってきたり、他の人からメールがきたらどうするの？</h3>
<p>　ユーザーを特定させる方法、つまりセッション管理の話です。<br />
『マチコ』の使用中に電話がかかってきたり、他の人からメールがきたらどうするの？という問題です。<br />
　結論からいうと受信メールにユーザーを特定するアクセスURLを残しておくことでいったんサイトを離れたとしても、特定できるようにしました。<br />
基本idは使い捨てにしていますので、再びちがう人と距離を感じたい場合はまた新たなIDが発行され、アクセス用URLが受信メールに残る仕組みです。</p>
<p>ここからはその、ユーザーを特定させるセッション管理の話です。</p>
<p>　PCでログインを維持するために、あらかじめログイン名やパスワードを入力させるという方法をとります。かしこさんの得意なヤツですね！！<br />
モバイルはPCとはちがって、文字の入力やボタン操作がしにくいのが特徴です。<br />
いちいちモバイルサイトに訪問したときに、ログイン名やパスワードを入力させようとすると「うわ、めんどくせー」と思っちゃいユーザーは離れていきます。</p>
<p>　モバイルのセッション管理の有効な方法は大きく３つあります。<br />
<strong>・クッキーを利用<br />
・URLにセッションIDを付与していく方法<br />
・かんたんログイン（個体識別情報）を利用する</strong></p>
<p><strong>[クッキーを利用する]</strong><br />
<img src="http://www.kiteretsu-so.com/wordpress/wp-content/uploads/2009/05/mobile_cookie1.gif" alt="mobile_cookie1" title="mobile_cookie1" width="490" height="134" class="alignnone size-full wp-image-1280" /></p>
<p> 上の表のように各キャリアがそれぞれcookieに対応しているわけではありません。<br />
なので、cookieを利用したセッション管理は現状では３キャリア統一させた管理は難しいと思います。</p>
<p><strong>[URLにセッションIDを付与していく方法]</strong><br />
　URLにセッションIDを付与していく方法は、<strong>セッション ID </strong>という、各ユーザー固有の ID を保存し、各ページ間で共有することによって、同一のユーザからのアクセスかどうかを判断することによって実現されています。</p>
<p>URLに付与されるセッションIDの例<br />
<code style="padding:5px; background:#ffc; border:1px #ccc solid;">http://www.example.com/index.php?PHPSESSID=957e1ace99b2e12f36f295529e57d8aa</code></p>
<p>　このように、[PHPSESSID=セッションID」というフォーマットでURLに付与されるようになります。<br />
PHPSESSIDというのはデフォルトのセッション ID<strong>名</strong>になりますので変更することができます。</p>
<p>例えばユーザー管理の情報が<br />
・名前：棟居<br />
・住所：大阪<br />
・年齢:25<br />
の場合</p>
<p>[１ページ目]</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
	ini_set('session.use_trans_sid', '1');
	session_start();
?&gt;
&lt;html&gt;
&lt;body&gt;
&lt;p&gt;session.phpのページ&lt;/p&gt;

&lt;?php
　$_SESSION[&quot;name&quot;] = &quot;棟居&quot;;
　$_SESSION[&quot;pref&quot;] = &quot;大阪&quot;;
　$_SESSION[&quot;age&quot;] = 25;
?&gt;

&lt;a href=&quot;session2.php&quot;&gt;確認画面へ&lt;/a&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>[2ページ目]</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
	ini_set('session.use_trans_sid', '1');
	session_start();
?&gt;

&lt;html&gt;
&lt;body&gt;
&lt;p&gt;session2.phpのページ&lt;/p&gt;

&lt;?php
　print htmlspecialchars($_SESSION[&quot;name&quot;]) . &quot;&lt;BR&gt;&quot;;
　print htmlspecialchars($_SESSION[&quot;age&quot;]) . &quot;&lt;BR&gt;&quot;;
　print htmlspecialchars($_SESSION[&quot;pref&quot;]) . &quot;&lt;BR&gt;&quot;;
?&gt;

&lt;a href=&quot;session3.php&quot;&gt;session3.phpへ&lt;/a&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p> これは１ページ目にセットされたユーザー情報を2ページ目に持っていってブラウザに出力させるといことができます。<br />
このようにしていくと、ページの遷移の際にURLにセッションIDが付与されながらユーザーの情報をいくらでも他のページに持ち回すことができます。</p>
<p>１行目の</p>
<pre class="brush: php; title: ; notranslate">
ini_set('session.use_trans_sid', '1');
</pre>
<p>はphp.iniの設定を変えていることになります。<br />
「&#8217;session.use_trans_sid&#8217;」はURLに自動的にセッションIDを埋め込むかどうかの設定になります。する場合「1」しない場合「0」です。</p>
<p>この設定はphp.iniに書くのが一般的ですが、全体が変更されてしまうため、セッションIDを利用するファイル数が少ないときなどはこのように直接phpファイルの<span style="color:#f00;">先頭に</span>書いやることもできます。</p>
<p>今回『マチコ』では一部この方法をとっています。<br />
ただ、<span style="color:#f00;">URLにセッションIDを付与していく方法はセキュリティ上よくありません。</span><br />
URLにセッションIDが丸見えだからです。特にdocomo。<br />
この辺はセキュリティ対策を考えながら利用する必要があります。</p>
<p>[かんたんログイン（個体識別情報）を利用する]<br />
<img src="http://www.kiteretsu-so.com/wordpress/wp-content/uploads/2009/05/kantanlogin.jpg" alt="kantanlogin" title="kantanlogin" width="399" height="327" class="alignnone size-full wp-image-1301" /></p>
<p>　かんたんログインはセッション管理が必要なモバイルサイトで非常によく利用されています。<br />
これは<strong>携帯電話端末の個体識別情報</strong>を利用しています。</p>
<p>携帯端末には一台一台「個体識別番号」という番号が割り振られていて、この番号を取得することによってユーザーがアクセスしてきた時に認証の判断を行ないます。<br />
個体識別番号のパラメータの取得方法は各キャリアによってこれも違ってきます。</p>
<p><strong>メリット</strong>はやはり、ID、パスワードを入力しなくてもクリック１回でログインでき、ユーザーにスムーズにコンテンツに入り込むんでもらうことができます。</p>
<p><strong>デメリット</strong>はユーザ本人が個体識別番号を送信するかしないか選択するこができるようになっているところです。</p>
<p>[docomo]<br />
<img src="http://www.kiteretsu-so.com/wordpress/wp-content/uploads/2009/05/kantanlogin2.jpg" alt="kantanlogin2" title="kantanlogin2" width="500" height="428" class="alignnone size-full wp-image-1304" /></p>
<p>　僕はdocomoを使っているのですが、このようにdocomoでは１回目「FOMAカードの製造番号を送信しますか？」というダイアログのようなものがでてきます。<br />
初めの１回だけですが、普通の人なら少し警戒してしまうこともあると思います。</p>
<p>[au]<br />
　auは端末を購入して最初の設定のときに、「EZ番号を送りますか？」とユーザに問いかけられていて、たいていのユーザは「はい」と答えていると思います。</p>
<p>[softbank]<br />
　softbankは端末を購入したままの設定で、「個体識別番号を送らない」という設定になっている機種があります。特に3G端末からなっているみたいです。</p>
<p>　携帯の端末情報を送信しているだけなので、<span style="color:#f00;">携帯電話番号、メールアドレス、住所、氏名が送信されているわけではない</span>です。<br />
その辺を安心してユーザーに利用してもらえるようにすればかなり便利な機能だと僕は思います。</p>
<p style="text-align:right;"><a href="#body_top" style="color:#00d">▲この記事の先頭に戻る</a></p>
<h3 id="li6" style="border-left:#f66 solid 5px; padding:0 0 0 8px;">取得した【緯度】【経度】【距離】【タイムスタンプ】をCSVで保存</h3>
<p><img src="http://www.kiteretsu-so.com/wordpress/wp-content/uploads/2009/05/csvkiroku.jpg" alt="csvkiroku" title="csvkiroku" width="414" height="147" class="alignnone size-full wp-image-1310" /></p>
<p>　取得した、【緯度】【経度】【距離】【タイムスタンプ】はCSV（カンマ区切り）データとして保存していきます。<br />
先日<a href="http://www.kiteretsu-so.com/archives/1183" target="_blank">とんかさんがAさんとBさんの距離を求める式の記事</a>を公開してくれました。<br />
最新のAさんとBさんの距離を求める場合、それぞれの最新の緯度と経度の値が必要になります。<br />
そこで、<strong><span style="color:#f00;">CSVに保存していくことによって、CSVから相手の最新のデータをひっぱってきています。</span></strong></p>
<p>IDがa45さんの人が「♪バイブで距離を感じる♪」ボタンを押すと、IDがb45さんのcsvデータの最新の緯度・経度を取り出して計算するという方法をとりました。</p>
<p style="text-align:right;"><a href="#body_top" style="color:#00d">▲この記事の先頭に戻る</a></p>
<h3 id="li7" style="border-left:#f66 solid 5px; padding:0 0 0 8px;">現在人気モバイルサイトの傾向</h3>
<p><img src="http://www.kiteretsu-so.com/wordpress/wp-content/uploads/2009/05/mobile_marketing.jpg" alt="mobile_marketing" title="mobile_marketing" width="500" height="375" class="alignnone size-full wp-image-1317" /></p>
<p>　どんなモバイルサイトを作ろうかという打ち合わせをしたときに作った資料です。<br />
僕はモバイルの知識が全くの0だったために、どういうサイトがあるのかも知らなかったです。今でも頻繁にモバイルサイトを利用しているわけではないですが・・・。</p>
<p>現状、<a href="http://kusumoto.osakazine.net/e180063.html">モバイルのヘビーユーザーのほとんどが学生</a>であるために、学生ぐらいをターゲットにしたコンテンツがやっぱり多いみたいですね。</p>
<p>傾向としては<strong>「自分をアピールできるサービス」</strong>がヒットしています。</p>
<p>最近は小学生や中学生でも「<a href="http://ip.tosp.co.jp/" target="_blank">魔法のiらんど</a>」や「<a href="http://m-space.jp/" target="_blank">mobilespace</a>」などの有名な無料ホムペ開設サイトでホームページで自分のサイトを持ち「前略プロフィール」でプロフを公開し、自分をアピールしていっています。<br />
アピールの仕方は開設した、ホムペやミニブログなどで写真をUPさせたり記事を書いたりしています。<br />
特に、クリスマス、誕生日、夏休み、土曜日、日曜日などのモブログのＵＰ率は非常高いらしいです。これは、学生が休みやイベント日に投稿している人がやはりたくさん多いということなんでしょうな～。</p>
<p>コミュニティ系は<strong>なんだかんだで結局mixi</strong>にたどりつく人が多いみたいです。</p>
<p>あと女子学生をターゲットにしている「<a href="http://peps.jp/" target="_blank">@peps</a>」はすごいです！<br />
ユーザビリティもクソもありません！とにかくギラギラしたもん勝ち！<br />
最近、小中高生の保護者が子供に携帯電話をどういうふうに持たせるかという社会問題がありますが、割かし「モバゲータウン」や「GREE」などはCM広告も打っているだけに保護者自身もアクセスしたことがあるみたいですが、@pepsは最強です！<br />
「@peps」保護者は知りません！とにかく女子学生の利用数がすごいみたい！！</p>
<p style="text-align:right;"><a href="#body_top" style="color:#00d">▲この記事の先頭に戻る</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kiteretsu-so.com/archives/1228/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>緯度経度より距離を求める方法・備忘録 ｜ 地球は丸い！</title>
		<link>http://www.kiteretsu-so.com/archives/1183</link>
		<comments>http://www.kiteretsu-so.com/archives/1183#comments</comments>
		<pubDate>Thu, 14 May 2009 17:00:41 +0000</pubDate>
		<dc:creator>とんか</dc:creator>
				<category><![CDATA[FLASH]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.kiteretsu-so.com/?p=1183</guid>
		<description><![CDATA[今回の春場所サイト「マチコ」携帯サービスにおいて、 携帯GPSで取得した緯度経度を使って ２人の距離を算出する計算を行っています。 でも、緯度経度から距離を算出するってよく分からなかったのでいろいろ調べてたところ、 轍　 [...]]]></description>
			<content:encoded><![CDATA[<p>今回の春場所サイト「<a href="http://machiko.kiteretsu-so.com/" target="_blank">マチコ</a>」携帯サービスにおいて、<br />
携帯GPSで取得した緯度経度を使って<br />
２人の距離を算出する計算を行っています。</p>
<p>でも、緯度経度から距離を算出するってよく分からなかったのでいろいろ調べてたところ、</p>
<p><a href="http://wadati.blog10.fc2.com/blog-entry-345.html" target="_blank">轍　〜自転車的なる日記〜  緯度・経度から距離を求める方法</a></p>
<p>なるサイト様の情報が簡易でかつ実用的っぽいので<br />
この式で計算してみることにしました。</p>
<p>ただ、自分的にちょっと理解が追いつかなかったので<br />
備忘録として行程を一個いっこ追いながら、phpおよびas3にまで落とし込むまでを記しておきます。<br />
<span id="more-1183"></span></p>
<p>※取得した緯度経度が「度分秒の60進法」の場合、「10進法」にあらかじめ直してください。直し方は以下リンク参照<br />
　<a href="http://blog.fkoji.com/2005/09210026.html" target="_blank">経度・緯度を60進法から10進法へ変換 &#8211; F.Ko-Jiの「一秒後は未来」</a></p>
<p>では始めます。</p>
<p><img src="http://www.kiteretsu-so.com/wordpress/wp-content/uploads/2009/05/idokeido01.jpg" alt="idokeido01" title="idokeido01" width="521" height="400" class="alignnone size-full wp-image-1188" /></p>
<p>A点、大阪（緯度 = aIdoとします：34.701909, 経度 = aKeidoとします：135.494977）と<br />
B点、東京（緯度 = bIdoとします：35.681382, 経度 = bKeidoとします：139.766084）の<br />
２点間の距離（dとします・単位km）を求めます。</p>
<p>距離を求める場合は、東京と大阪を結ぶ線を引いて、<strong>その線の長さが分かればよいのです</strong>。</p>
<p>その線の長さを求めるために、<br />
大阪と東京の東西の距離差と南北の距離差が分かれば<br />
ピタゴラスの定理<br />
<strong>xの2乗 + yの2乗 = 求める距離の2乗</strong><br />
により距離が計算できます！</p>
<p>ではどうやって東西の距離（touzaiKyoriとします）、南北の距離（nanbokuKyoriとします）を求めればよいのか。</p>
<p>その前に緯度経度って概念がごっちゃになりやすいので簡単に緯度経度についてのおさらいです。</p>
<p><strong>●緯度（横ライン）</strong>：<br />
赤道が緯度0度、北極が90度、南極が-90度とする<br />
<strong>「地球の中心（核）」を起点とした角度。</strong><br />
世界地図（メルカトル図法時）では水平方向に線が引かれます。<br />
当然、赤道で一番円周が大きくなり（つまり地球の直径）<br />
赤道から距離が離れるたびに緯度ラインの直径は小さくなっていきます。</p>
<p><strong>●経度（縦ライン）</strong>：<br />
ロンドンのグリニッジ天文台を通る大円が経度0度<br />
（大円：ある地点と北極と南極を通る大きな円）<br />
<strong>「地球の地軸」を起点とした角度</strong>。<br />
世界地図（メルカトル図法時）では垂直方向に線が引かれます。<br />
円周は常に同じです（常に地球の直径）。<br />
<strong><br />
ポイント<br />
・緯度は場所によって円周の長さ、半径が違う！※経度は常に円周の長さ常には同じ。<br />
・緯度経度は座標のxyだと思うとこんがらがるので、あくまで地球の基準点からの角度と考える！<br />
</strong></p>
<p>地球は丸いので東京と大阪の東西の距離、南北の距離は<br />
<strong>地球の円周上</strong>にそっています。<br />
よって円弧の長さを求めることになります。</p>
<p>●円弧の長さの求め方<br />
小学校で習った式は<br />
円弧の長さ =直径×π×円弧の角度／360<br />
だったと思いますが、もっと簡単にする方法があります。<br />
ラジアンという角度の単位を使う方法です。<br />
<strong>円弧の長さ = 半径×円弧の角度をラジアンに変換した値</strong></p>
<p>一般的な角度をラジアンという角度に変換するには<br />
1度 = π / 180 = 約0.017ラジアン<br />
1ラジアン = 180 / π = 約52.3度<br />
で計算すればよいです。<br />
※phpならわざわざ計算しなくても角度をラジアンに変換する関数があります。</p>
<p>ちなみにラジアンとは：<br />
・角度の単位。<br />
・1ラジアン (約57度)のとき半径と弧の長さが等しい。<br />
・360度 = 2πラジアン<br />
・弧の長さを計算するのにめっちゃ分かりやすい。</p>
<p>では東西の距離（touzaiKyori）、南北の距離（nanbokuKyori）を求めてみます。<br />
計算には円弧の角度の他に地球の半径が必要となるので<a href="http://ja.wikipedia.org/wiki/%E5%9C%B0%E7%90%83" target="_blank">wikipedia</a>で地球の半径を調べてみました。<br />
●地球の半径（earth_rとします ）：約6378.137km</p>
<p>●で、緯度経度にそった円弧の角度<br />
大阪東京の緯度の差（idoSaとします）：   bIdo &#8211; aIdo<br />
大阪東京の経度の差（keidoSaとします）：   bKeido &#8211; aKeido</p>
<p>この緯度の角度差、経度の角度差をラジアンに変換した値と地球の半径を利用して<br />
円弧の長さを求めます。</p>
<p><img src="http://www.kiteretsu-so.com/wordpress/wp-content/uploads/2009/05/idokeido02.jpg" alt="idokeido02" title="idokeido02" width="520" height="400" class="alignnone size-full wp-image-1195" /></p>
<p>ただし、南北の距離を計算するための半径は、すなわち地球の半径ですが、<br />
東西方向の距離を計算するための半径は、<strong>測定値の緯度により、異なります。</strong><br />
（日本は赤道ラインよりずいぶん上に位置していますので<br />
その緯度の半径は赤道の半径より当然小さくなります）</p>
<p><img src="http://www.kiteretsu-so.com/wordpress/wp-content/uploads/2009/05/idokeido03.jpg" alt="idokeido03" title="idokeido03" width="520" height="280" class="alignnone size-full wp-image-1196" /></p>
<p>測定位置の緯度ラインの半径は<strong>三角関数の計算</strong>により求められます。<br />
<strong>直角三角形は角度が一定であれば3辺の長さの比も一定</strong>という性質を利用します。</p>
<p>コサインθとは比率に基づく値にすぎません。<br />
三角形の角度がθ（ここではすなわちaIdo）度のときの<br />
底辺（ここでいう測定地の緯度の半径） ÷ 斜辺（ここでいう地球の中心から測定値の距離） の値のことです。<br />
斜辺（地球の中心から測定値の距離） = 地球の半径（earth_r）なので<br />
<strong>底辺（測定地の緯度の半径）= cosθ × earth_r </strong><br />
となります。<br />
※phpやactionscriptだとコサインを計算してくれる関数があります。<br />
ただし<strong>求めたい角度θの単位を一度ラジアンに変換する必要があります</strong>。</p>
<p>これで式が揃いました。</p>
<p><strong>東西の距離（touzaiKyori）</strong>=  測定値（大阪）の緯度の半径 ×  大阪東京の緯度の差（idoSa）<br />
 = コサインaIdo ×  地球の半径（earth_r）× 大阪東京の緯度の差（idoSa）</p>
<p><strong>南北の距離（nanbokuKyori）</strong>=  地球の半径（earth_r） ×  大阪東京の経度の差（keidoSa）</p>
<p>この二つが求まれば<br />
xの2乗 + yの2乗 = 求める距離の2乗<br />
となり、その平方根をもとめることで<strong>距離dが求まります</strong>。</p>
<p>よってPHPで書くと以下の通り</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
$aIdo = 34.701909;					//  A点（大阪）の緯度
$aKeido = 135.4949770;		 //  A点（大阪）の経度

$bIdo = 35.681382;				//  B点（東京）の緯度
$bKeido = 139.766084;		//  B点（東京）の経度

$earth_r = 6378.137;		//	地球の半径

$idoSa = deg2rad($bIdo - $aIdo);	//緯度差をラジアンに
$keidoSa = deg2rad($bKeido - $aKeido);	//経度差をラジアンに

$nanbokuKyori =  $earth_r * $idoSa;		//南北の距離
$touzaiKyori = cos(deg2rad($aIdo)) * $earth_r * $keidoSa;		//東西の距離

$d = sqrt(pow($touzaiKyori,2) + pow( $nanbokuKyori,2));			//三平方の定理でdを求める
?&gt;
</pre>
<p>またactionscript3.0で書くと</p>
<p>var aIdo:Number = 34.701909;					//  A点（大阪）の緯度<br />
var aKeido:Number = 135.4949770;		 //  A点（大阪）の経度</p>
<p>var bIdo:Number = 35.681382;				//  B点（東京）の緯度<br />
var bKeido:Number = 139.766084;		//  B点（東京）の経度</p>
<p>const earth_r:Number = 6378.137;		//	地球の半径</p>
<p>var idoSa:Number =  Math.PI / 180 * (bIdo &#8211; aIdo);	//緯度差をラジアンに<br />
var keidoSa:Number = Math.PI / 180 * (bKeido &#8211; aKeido);		//経度差をラジアンに</p>
<p>var nanbokuKyori:Number = earth_r * idoSa;		//南北の距離<br />
var touzaiKyori:Number = Math.cos( Math.PI / 180 * aIdo) * earth_r * keidoSa;		//東西の距離</p>
<p>var d:Number = Math.sqrt(Math.pow(touzaiKyori,2) + Math.pow(nanbokuKyori,2));		//三平方の定理でdを求める</p>
<p>となります。<br />
ちなみに求められる値dは405.807810663 kmとなります。<br />
検証のために以下のサイトで大阪駅東京駅間を測ってみましたが、ほぼほぼ同じ値でした。<br />
<a href="http://lab.uribou.net/ll2dist/" target="_blank">LatLng2Distance:::緯度経度から距離算出API:</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kiteretsu-so.com/archives/1183/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>[書籍紹介＆フレームワーク紹介]CakePHPはどうも簡単らしいぞう</title>
		<link>http://www.kiteretsu-so.com/archives/1096</link>
		<comments>http://www.kiteretsu-so.com/archives/1096#comments</comments>
		<pubDate>Wed, 29 Apr 2009 17:46:59 +0000</pubDate>
		<dc:creator>とんか</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.kiteretsu-so.com/?p=1096</guid>
		<description><![CDATA[まいどです。トンカです。 レッドクリフ2観てきましたが圧巻でしたよ。 俺的には「尚香」ちゃんの腰帯をクルクルまわして解いてるあたり、 今まで野暮ったい格好で動き回ってたのに 実は髪を下ろすとめっちゃカワイイっ女の子ってあ [...]]]></description>
			<content:encoded><![CDATA[<p>まいどです。トンカです。<br />
レッドクリフ2観てきましたが圧巻でしたよ。<br />
俺的には「尚香」ちゃんの腰帯をクルクルまわして解いてるあたり、<br />
今まで野暮ったい格好で動き回ってたのに<br />
実は髪を下ろすとめっちゃカワイイっ女の子ってあたりが<br />
スーパーミドコロだと思いました。</p>
<p>はい、では本題。最近勉強し始めた「CakePHP」について雑記＆書籍紹介。</p>
<p><strong>そもそもフレームワークってなんじゃらほい。</strong></p>
<p>最近フレームワークって言葉をよく聞きますよね。<br />
CSSなら「yui」、<br />
Flashなら「Progression」、<br />
Rubyなら「Ruby on Rails」、<br />
PHPなら「symfony」「Zend Framework」そして「CakePHP」 。</p>
<p>そもそもフレームワークってどういうものかと言うと</p>
<ul>
<li>制作に関する規則がしっかりしてるので、他人の手を借りてもコードがバラバラになりにくい</li>
<li>セキュリティとか、考えないと行けないけど後回しにしたい部分があらかじめクリアされている</li>
<li>必要な機能が結構用意されているし、コードの再利用がしやすいので開発スピードがあがる</li>
</ul>
<p>ってな感じ。つまり「フレームワーク＝制作効率化のための仕組みパック」と素人の俺は勝手に認識しています。</p>
<p><strong>PHPフレームワーク「CakePHP」に出来ること</strong></p>
<p>じゃぁcakePHPの特徴ってなんなの？ってことなんですが</p>
<ul>
<li>インストールが簡単（俺はちょっと手間取ったけど、分かれば簡単です）</li>
<li>PEARとかのライブラリいらず</li>
<li>データベースへの接続、デザイン表示部分、それらを管理する制御部分がそれぞれ独立してるので分かりやすい、修正しやすい、再利用しやすい</li>
<li>規則が分かりやすい、ルールの大きな部分はファイルの「命名ルール」を揃えること</li>
<li>色んなところで手間を少なくする工夫がある</li>
</ul>
<p>なんてのが上げられます。やっぱりポイントは「簡単便利」。</p>
<p><strong>CakePHPで制作されたサイト一例</strong></p>
<p>じゃぁどんなのが作れるのよってことで実際の開発事例をいくつかリンクしておきます。<br />
<a href="http://topic.nifty.com/" target="_blank">みんなで作る話題発見サイト　トピックイット：@nifty</a><br />
<a href="http://furumiru.com/"  target="_blank">みんなの古民家スポットコミュニティ　フルミル</a><br />
<a href="http://www2.sagawa-exp.co.jp/search/fare/input/" target="_blank">佐川急便｜料金検索</a><br />
<a href="http://clipmail.jp/" target="_blank">今見ているページの情報をメールで共有するシンプルなサービス clipmail</a><br />
<a href="http://www.blueman.com/" target="_blank">ブルーマン公式ページ</a></p>
<p>などなど、簡単なwebアプリケーションから大きなコミュニティーサイトまで<br />
結構作れることが分かります。</p>
<p><strong>「 CakePHPによるWebアプリケーション開発」って本の紹介</strong></p>
<p>で俺は勉強するにあたって本屋で何冊か立ち読みしてたんですが、たくさん本があったのですが<br />
この本がおすすめでした。<br />
<img src="http://www.kiteretsu-so.com/wordpress/wp-content/uploads/2009/04/cakephp.png" alt="cakephp" title="cakephp" width="194" height="246" class="alignnone size-full wp-image-1097" /></p>
<p><a href="http://www.amazon.co.jp/gp/product/4798022225?ie=UTF8&#038;tag=kiteretsu0e-22&#038;linkCode=as2&#038;camp=247&#038;creative=1211&#038;creativeASIN=4798022225">オープンソース徹底活用 CakePHPによるWebアプリケーション開発</a><img src="http://www.assoc-amazon.jp/e/ir?t=kiteretsu0e-22&#038;l=as2&#038;o=9&#038;a=4798022225" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p>内容はCakePHPの簡単な概要からインストール方法、<br />
各機能の説明、データベースの扱い方から掲示板の作成事例等々、めっちゃ分かりやすく実用的なところまで書いてあり、テスト環境の用意の仕方から制作を補助する「ヘルパー」と呼ばれる機能も一通り、またCakePHPを拡張する方法まで納められているので、とりあえずで始めるには十分な内容かと思われます。</p>
<p><strong>でとりあえず掲示板テスト作ってました</strong></p>
<p>今は一つ一つこなしている段階ですが、<br />
データベースとか、全く理解してない段階で簡単な掲示板とか作ってみました。<br />
<a href="http://www.a-knot.sakura.ne.jp/cake/boards" target="_blank">http://www.a-knot.sakura.ne.jp/cake/boards</a></p>
<p>うそです、作ったと言えば大げさです。ほとんど勝手にCakePHPが作ってくれました。<br />
だって俺５分しか触ってないもん。<br />
いや〜めちゃめちゃ簡単便利。</p>
<p>んではまた今度、インストール編かきます。<br />
（さくらインターネットではなぜか手間取ってしまったので備忘録がいりそうです…）</p>
<p><a href="http://cakephp.jp/" target="_blank">CakePHP本家サイト</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kiteretsu-so.com/archives/1096/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

