<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.3" -->
<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>MT312 &#187; 2007 &#187; 5 月</title>
	<link>http://www.mt312.com</link>
	<description></description>
	<pubDate>Sun, 13 Jul 2008 21:49:58 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
	<language>ja</language>
			<item>
		<title>携帯特有の注意点</title>
		<link>http://www.mt312.com/php/42/</link>
		<comments>http://www.mt312.com/php/42/#comments</comments>
		<pubDate>Tue, 15 May 2007 08:28:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.mt312.com/php/42/</guid>
		<description><![CDATA[ホスト名
携帯はホスト名が頻繁に変わってしまいます。
またホスト名の後半でキャリア判別すると失敗する場合があり、信用できません。正確に携帯判別するには各社サイトに掲載されているIPリストと照合する必要があります。
Content-Lengthを付ける
DoCoMoはContent-Lengthがないと表示できない場合があります。
「接続先のサーバーは現在ご利用できません」
リダイレクトは避ける
正しく処理されなかったり、エラーになる機種があります。
「無効なデータを受信しました」
POST後の二重投稿防止ボタン
PLAIN TEXT
HTML:




&#60;form action="./index.php" method="post"&#62;


&#160; &#60;p&#62;投稿完了しました&#60;/p&#62;


&#160; &#60;p&#62;&#60;input type="submit" value="戻る" /&#62;&#60;/p&#62;


&#60;/form&#62; 






POST後にこれを踏むと二重投稿を防ぐ事ができます。
GETでは駄目。
&#60;input&#62;フィールド内で改行を入力
PCブラウザでは改行できなくても携帯ではできてしまいます。
&#60;textarea&#62;フィールド内の改行コード
&#60;textarea&#62;フィールドに文章を出力する場合は改行コードをCRLFにする。
LFでは改行されません。
istyle属性
istyle="1" 全角かな
istyle="2" 半角カナ
istyle="3" 半角英字
istyle="4" 半角数字
パスワード入力欄&#60;input　type=&#34;password&#34;&#62;はDoCoMoはistyleが無視されて半角数字モードになりますが、AUでは付けていないと全角モードになるのでここにもistyleを付けておく。最近のSoftBank携帯はistyleに対応しているようです。
まとめ
携帯の機能はよりPCに近づいています。
この記事も、すぐに当てにならなくなるかもしれませんので、参考程度に。
]]></description>
			<content:encoded><![CDATA[<h3>ホスト名</h3>
<p>携帯はホスト名が頻繁に変わってしまいます。<br />
またホスト名の後半でキャリア判別すると失敗する場合があり、信用できません。正確に携帯判別するには各社サイトに掲載されているIPリストと照合する必要があります。</p>
<h3>Content-Lengthを付ける</h3>
<p>DoCoMoはContent-Lengthがないと表示できない場合があります。<br />
「接続先のサーバーは現在ご利用できません」</p>
<h3>リダイレクトは避ける</h3>
<p>正しく処理されなかったり、エラーになる機種があります。<br />
「無効なデータを受信しました」</p>
<h3>POST後の二重投稿防止ボタン</h3>
<div class="igBar"><span id="lhtml-2"><a href="#" onclick="javascript:showCodeTxt('html-2'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">HTML:</span>
<div id="html-2">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/form.html"><span style="color: #000000;">&lt;form</span></a> <span style="color: #000066;">action</span>=<span style="color: #ff0000;">"./index.php"</span> <span style="color: #000066;">method</span>=<span style="color: #ff0000;">"post"</span><span style="color: #000000;">&gt;</span></a></span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/p.html"><span style="color: #000000;">&lt;p&gt;</span></a></span>投稿完了しました<span style="color: #009900;"><span style="color: #000000;">&lt;/p&gt;</span></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/p.html"><span style="color: #000000;">&lt;p&gt;</span></a></span><span style="color: #009900;"><a href="http://december.com/html/4/element/input.html"><span style="color: #000000;">&lt;input</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"submit"</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">"戻る"</span> /<span style="color: #000000;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000;">&lt;/p&gt;</span></span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="color: #000000;">&lt;/form&gt;</span></span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
POST後にこれを踏むと二重投稿を防ぐ事ができます。<br />
GETでは駄目。</p>
<h3>&lt;input&gt;フィールド内で改行を入力</h3>
<p>PCブラウザでは改行できなくても携帯ではできてしまいます。</p>
<h3>&lt;textarea&gt;フィールド内の改行コード</h3>
<p>&lt;textarea&gt;フィールドに文章を出力する場合は改行コードをCRLFにする。<br />
LFでは改行されません。</p>
<h3>istyle属性</h3>
<p>istyle="1" 全角かな<br />
istyle="2" 半角カナ<br />
istyle="3" 半角英字<br />
istyle="4" 半角数字</p>
<p>パスワード入力欄&lt;input　type=&quot;password&quot;&gt;はDoCoMoはistyleが無視されて半角数字モードになりますが、AUでは付けていないと全角モードになるのでここにもistyleを付けておく。最近のSoftBank携帯はistyleに対応しているようです。</p>
<h3>まとめ</h3>
<p>携帯の機能はよりPCに近づいています。<br />
この記事も、すぐに当てにならなくなるかもしれませんので、参考程度に。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mt312.com/php/42/feed/</wfw:commentRss>
		</item>
		<item>
		<title>処理速度最適化法</title>
		<link>http://www.mt312.com/php/41/</link>
		<comments>http://www.mt312.com/php/41/#comments</comments>
		<pubDate>Thu, 10 May 2007 11:50:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.mt312.com/php/41/</guid>
		<description><![CDATA[いろいろ纏めようと思っていたんですが、すでに分かりやすいサイトが沢山あります。
PHP最適化tipsまとめサイト
基礎構文処理速度のあれこれ
require VS require_once
実際に計測してみた所、試行回数が少なかったせいか、あまり差は見られませんでした。
（未読ファイルの読み込みに関して）
一度しか読まないのが分かっていればrequire_onceを使うメリットはないと思います。
速度は気にせず以下で使い分ければOK。
複数回読まれる可能性があるが、一度しか読む必要がない。require_once
それ以外。require
== VS ===
型を含めて比較する後者の方が若干速い。
パスワードなど外部データと比較する場合にセキュリティーホールとなる可能性があるので、理由がない限り===を常用する。
is_hoge() VS ===
PLAIN TEXT
PHP:




if&#40;is_null&#40;$var&#41;&#41; &#123;&#125;


if&#40;$var===null&#41; &#123;&#125; 






後者が速い。
count($array)>0 VS (bool)$array
配列に要素があるかどうかの判別。
後者が速い。
array_merge() VS +演算子
array_mergeは連結後に数字キーを振り直すので、連想配列の場合は+演算子を使った方が速い。
PLAIN TEXT
PHP:




$a = array&#40;'a'=&#62;1, 'b'=&#62;2&#41;;


$b = array&#40;'a'=&#62;3, 'c'=&#62;4&#41;;


&#160;


// array_merge($a, $b) == $b + $a; 






バージョン分岐
PHPのメジャーバージョンで分岐したい場合はversion_compare()を使うより各バージョン特有の定数を調べるのが良い。
PLAIN TEXT
PHP:




// PHP_VERSIONの一文字目を調べるより速い


$isPHP5 = defined&#40;'E_STRICT'&#41;; 






is_file() VS file_exists()
file_exists()はディレクトリも含まれるので、ファイルの有無を調べたいだけならis_file()の方が高速。
文字列連結速度
PLAIN TEXT
PHP:




$str = $str1.$str2;


$str = "$str1$str2";


$str = "{$str1}{$str2}"; 






上から順に高速。 
splitは使うな
文字列を分割して配列を作成する場合、splitは遅いので避ける。
正規表現分割は、 preg_split (PHP 3.0.9, 4, 5)
固定文字分割は、 explode (PHP 3, 4, 5)
分割して一部分だけ取得したい場合は、分割数を制限する3番目のlimit引数を付けておきます。 [...]]]></description>
			<content:encoded><![CDATA[<p>いろいろ纏めようと思っていたんですが、すでに分かりやすいサイトが沢山あります。</p>
<p><a href="http://labs.unoh.net/2007/05/phptips.html">PHP最適化tipsまとめサイト</a><br />
<a href="http://www.phppro.jp/phptips/archives/vol15/#3">基礎構文処理速度のあれこれ</a></p>
<h3>require VS require_once</h3>
<p>実際に計測してみた所、試行回数が少なかったせいか、あまり差は見られませんでした。<br />
（未読ファイルの読み込みに関して）<br />
一度しか読まないのが分かっていればrequire_onceを使うメリットはないと思います。<br />
速度は気にせず以下で使い分ければOK。</p>
<p>複数回読まれる可能性があるが、一度しか読む必要がない。require_once<br />
それ以外。require</p>
<h3>== VS ===</h3>
<p>型を含めて比較する後者の方が若干速い。<br />
パスワードなど外部データと比較する場合にセキュリティーホールとなる可能性があるので、理由がない限り===を常用する。</p>
<h3>is_hoge() VS ===</h3>
<div class="igBar"><span id="lphp-11"><a href="#" onclick="javascript:showCodeTxt('php-11'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-11">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">if</span><span style="color:#006600;">&#40;</span><a href="http://www.php.net/is_null"><span style="color:#0000CC;">is_null</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$var</span><span style="color:#006600;">&#41;</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span><span style="color:#006600;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">if</span><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$var</span>===<span style="color:#008000;">null</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span><span style="color:#006600;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
後者が速い。</p>
<h3>count($array)>0 VS (bool)$array</h3>
<p>配列に要素があるかどうかの判別。<br />
後者が速い。</p>
<h3>array_merge() VS +演算子</h3>
<p>array_mergeは連結後に数字キーを振り直すので、連想配列の場合は+演算子を使った方が速い。</p>
<div class="igBar"><span id="lphp-12"><a href="#" onclick="javascript:showCodeTxt('php-12'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-12">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$a</span> = <a href="http://www.php.net/array"><span style="color:#0000CC;">array</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'a'</span>=&gt;<span style="color:#CC66CC;color:#800000;">1</span>, <span style="color:#990000;">'b'</span>=&gt;<span style="color:#CC66CC;color:#800000;">2</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$b</span> = <a href="http://www.php.net/array"><span style="color:#0000CC;">array</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'a'</span>=&gt;<span style="color:#CC66CC;color:#800000;">3</span>, <span style="color:#990000;">'c'</span>=&gt;<span style="color:#CC66CC;color:#800000;">4</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// array_merge($a, $b) == $b + $a; </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>バージョン分岐</h3>
<p>PHPのメジャーバージョンで分岐したい場合はversion_compare()を使うより各バージョン特有の定数を調べるのが良い。</p>
<div class="igBar"><span id="lphp-13"><a href="#" onclick="javascript:showCodeTxt('php-13'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-13">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// PHP_VERSIONの一文字目を調べるより速い</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$isPHP5</span> = <a href="http://www.php.net/defined"><span style="color:#0000CC;">defined</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'E_STRICT'</span><span style="color:#006600;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>is_file() VS file_exists()</h3>
<p>file_exists()はディレクトリも含まれるので、ファイルの有無を調べたいだけならis_file()の方が高速。</p>
<h3>文字列連結速度</h3>
<div class="igBar"><span id="lphp-14"><a href="#" onclick="javascript:showCodeTxt('php-14'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-14">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$str</span> = <span style="color:#0000CC;">$str1</span>.<span style="color:#0000CC;">$str2</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$str</span> = <span style="color:#990000;">"$str1$str2"</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$str</span> = <span style="color:#990000;">"{$str1}{$str2}"</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
上から順に高速。 </p>
<h3>splitは使うな</h3>
<p>文字列を分割して配列を作成する場合、splitは遅いので避ける。<br />
正規表現分割は、 preg_split (PHP 3.0.9, 4, 5)<br />
固定文字分割は、 explode (PHP 3, 4, 5)<br />
分割して一部分だけ取得したい場合は、分割数を制限する3番目のlimit引数を付けておきます。 特にループ内で繰り返し使う場合、全分割するより時間を短縮できます。 </p>
<div class="igBar"><span id="lphp-15"><a href="#" onclick="javascript:showCodeTxt('php-15'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-15">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$str</span> = <span style="color:#990000;">'id,date,name,msg,pwd'</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// limit引数：必要なデータ数 + 1</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$arr</span> = <a href="http://www.php.net/explode"><span style="color:#0000CC;">explode</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">','</span>, <span style="color:#0000CC;">$str</span>, <span style="color:#CC66CC;color:#800000;">3</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/print_r"><span style="color:#0000CC;">print_r</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$arr</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// 出力結果 Array ([0] =&gt; 'id' [1] =&gt; 'date' [2] =&gt; 'name,msg,pwd') </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>time()を何度も呼ばない</h3>
<p>何度も使う場合は定数にするなりして使い回す。（2回だけなら定数化しない方が速いかもしれないが。）PHP5では$_SERVER['REQUEST_TIME'];でも可能。</p>
<div class="igBar"><span id="lphp-16"><a href="#" onclick="javascript:showCodeTxt('php-16'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-16">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/define"><span style="color:#0000CC;">define</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'REQUEST_TIME'</span>, <a href="http://www.php.net/time"><span style="color:#0000CC;">time</span></a><span style="color:#006600;">&#40;</span><span style="color:#006600;">&#41;</span><span style="color:#006600;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>in_array()よりisset()</h3>
<p>調べたい要素が複数ある、又は複数回調べたい、それが空文字以外の文字や整数（つまりキーになりうる）で重複していない（整数1と文字'1'は重複）事が確かならarray_flip()で反転させてキーで調べると速い。</p>
<div class="igBar"><span id="lphp-17"><a href="#" onclick="javascript:showCodeTxt('php-17'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-17">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// 0と5はある？</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$nums</span> = <a href="http://www.php.net/array"><span style="color:#0000CC;">array</span></a><span style="color:#006600;">&#40;</span><span style="color:#CC66CC;color:#800000;">5</span>, <span style="color:#CC66CC;color:#800000;">4</span>, <span style="color:#CC66CC;color:#800000;">3</span>, <span style="color:#CC66CC;color:#800000;">1</span>, <span style="color:#CC66CC;color:#800000;">2</span>, <span style="color:#CC66CC;color:#800000;">0</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$nums</span> = array_filp<span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$nums</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">if</span><span style="color:#006600;">&#40;</span><a href="http://www.php.net/isset"><span style="color:#0000CC;">isset</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$nums</span><span style="color:#006600;">&#91;</span><span style="color:#CC66CC;color:#800000;">0</span><span style="color:#006600;">&#93;</span>, <span style="color:#0000CC;">$num</span><span style="color:#006600;">&#91;</span><span style="color:#CC66CC;color:#800000;">5</span><span style="color:#006600;">&#93;</span><span style="color:#006600;">&#41;</span><span style="color:#006600;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/print"><span style="color:#0000CC;">print</span></a> <span style="color:#990000;">'あった！'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>array_key_exists()よりisset()</h3>
<p>配列の要素がnullの場合両者の挙動が異なります。<br />
それでも影響がない場面ではisset()を使った方が速い。</p>
<h3>大文字小文字変換</h3>
<p>大文字変換 strtoupper();<br />
小文字変換 strtolower();<br />
速度は変換数に比例して遅くなる。</p>
<div class="igBar"><span id="lphp-18"><a href="#" onclick="javascript:showCodeTxt('php-18'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-18">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$s</span> = <span style="color:#990000;">'aaaaaAaaaaAaaaaaa'</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// 大文字が少ない分strtolower($s);よりstrtoupper($s);の方が時間がかかる。 </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>まとめ</h3>
<p>関数を使わずに済むならその方が高速。<br />
正規表現を使わずに済むならその方が高速。<br />
その他、同様の役割でも何かしらの判断基準が設けられている場合は、そちらの方が遅くなる傾向にあります。</p>
<p>また、計算式では誤差が生じたり可読性が落ちるのでキャストは使わずにintvalなどの変換関数を用いる。状況に応じて速度と手間と可読性のどれを重視するか判断しましょう。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mt312.com/php/41/feed/</wfw:commentRss>
		</item>
		<item>
		<title>コメントスパム対策法</title>
		<link>http://www.mt312.com/php/40/</link>
		<comments>http://www.mt312.com/php/40/#comments</comments>
		<pubDate>Thu, 10 May 2007 11:42:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.mt312.com/php/40/</guid>
		<description><![CDATA[近年スパム被害が増えています。
誰でも投稿できるブログや掲示板も狙われています。
ここでは手間のかからない、簡単な対処法をいくつか紹介します。

主な対処法

禁止ワードを設定
日本語が使えない環境からの投稿を拒否
半角英数字のみの投稿を拒否
投稿できるURLの数を制限
プロキシサーバ経由の投稿を拒否
リファラーを参照してフォームを経由したか判断
フォームを表示してから投稿するまでの許容時間を設定する
ダミー項目を作り入力があった場合に拒否
フォームを解析されない様に、ロボットを排除
データ送信先を頻繁に変更
Captcha画像認証



検索ロボットを排除
PLAIN TEXT
HTML:




&#60;meta name="robots" content="none,noindex,nofollow,noarchive" /&#62;


&#60;meta name="googlebot" content="noindex,nofollow,noarchive,nosnippet" /&#62;


&#60;meta name="libwww-perl" content="none,noindex,nofollow" /&#62; 






ロボットを完全に排除するのは難しい様ですが、少しは効果があると思います。googlebotのsnippetは検索結果に表示される該当ページからの抜粋です。これがある方がクリック率が高まるそうです。これを削除(nosnippet)するとキャッシュも削除されます。
Googleページ削除
リファラーからフォームを経由したか調べる
PLAIN TEXT
PHP:




$from = $_SERVER&#91;'HTTP_REFERER'&#93;;


$host = $_SERVER&#91;'HTTP_HOST'&#93;;


if&#40;!stristr&#40;$from, $host&#41;&#41; &#123;


&#160; print '不正なリファラーです。';


&#125; 






リファラーを持たない環境は結構あります。ノートン等のセキュリティソフトによって隠蔽されている可能性もあります。ドコモなど一部携帯でアウト。
逆引き不可能なIPアドレスを拒否
PLAIN TEXT
PHP:




$ip = $_SERVER&#91;'REMOTE_ADDR'&#93;;


$host = getHostByAddr&#40;$ip&#41;;


if&#40;$ip==$host&#41; &#123;


&#160; print '逆引き不可能なIPアドレスです。';


&#125;


&#160;


// これでも可能


if&#40;!preg_match&#40;'/[a-z]/', $host&#41;&#41; &#123;


&#160; print '逆引き不可能なIPアドレスです。';


&#125; 






プロキシ経由を拒否
プロキシ特有の環境変数とホスト名を調べる方法です。
環境変数を吐かない匿名プロキシもあって、すべてを検出できる訳ではありません。
他にはプロキシリストを作成したり、ポートスキャンする方法もあります。
PLAIN TEXT
PHP:




$systems = $_SERVER + $_ENV;


&#160;


$ip = $systems&#91;'REMOTE_ADDR'&#93;;


$host = getHostByAddr&#40;$ip&#41;;


// ドコモの携帯はproxyが存在するので注意


// anonym=anonymous,anonymizer


// prox=proxy,proxify


$proxhost = preg_match&#40;


'/anonym&#124;cache&#124;delegate&#124;firewall&#124;gateway&#124;httpd&#124;keeper&#124;prox&#124;squid&#124;via&#124;www/',


$host&#41;;


&#160;


$bools = array&#40;


&#160; isset&#40;$systems&#91;'HTTP_CLIENT_IP'&#93;&#41;,


&#160; isset&#40;$systems&#91;'HTTP_FORWARDED'&#93;&#41;,


&#160; isset&#40;$systems&#91;'HTTP_MAX_FORWARS'&#93;&#41;,


&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>近年スパム被害が増えています。<br />
誰でも投稿できるブログや掲示板も狙われています。<br />
ここでは手間のかからない、簡単な対処法をいくつか紹介します。</p>
<ul>
<li>主な対処法
<ul>
<li>禁止ワードを設定</li>
<li>日本語が使えない環境からの投稿を拒否</li>
<li>半角英数字のみの投稿を拒否</li>
<li>投稿できるURLの数を制限</li>
<li>プロキシサーバ経由の投稿を拒否</li>
<li>リファラーを参照してフォームを経由したか判断</li>
<li>フォームを表示してから投稿するまでの許容時間を設定する</li>
<li>ダミー項目を作り入力があった場合に拒否</li>
<li>フォームを解析されない様に、ロボットを排除</li>
<li>データ送信先を頻繁に変更</li>
<li>Captcha画像認証</li>
</ul>
</li>
</ul>
<h3>検索ロボットを排除</h3>
<div class="igBar"><span id="lhtml-28"><a href="#" onclick="javascript:showCodeTxt('html-28'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">HTML:</span>
<div id="html-28">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/meta.html"><span style="color: #000000;">&lt;meta</span></a> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"robots"</span> <span style="color: #000066;">content</span>=<span style="color: #ff0000;">"none,noindex,nofollow,noarchive"</span> /<span style="color: #000000;">&gt;</span></a></span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/meta.html"><span style="color: #000000;">&lt;meta</span></a> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"googlebot"</span> <span style="color: #000066;">content</span>=<span style="color: #ff0000;">"noindex,nofollow,noarchive,nosnippet"</span> /<span style="color: #000000;">&gt;</span></a></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/meta.html"><span style="color: #000000;">&lt;meta</span></a> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"libwww-perl"</span> <span style="color: #000066;">content</span>=<span style="color: #ff0000;">"none,noindex,nofollow"</span> /<span style="color: #000000;">&gt;</span></a></span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
ロボットを完全に排除するのは難しい様ですが、少しは効果があると思います。googlebotのsnippetは検索結果に表示される該当ページからの抜粋です。これがある方がクリック率が高まるそうです。これを削除(nosnippet)するとキャッシュも削除されます。</p>
<p><a href="http://www.google.co.jp/intl/ja/remove.html">Googleページ削除</a></p>
<h3>リファラーからフォームを経由したか調べる</h3>
<div class="igBar"><span id="lphp-29"><a href="#" onclick="javascript:showCodeTxt('php-29'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-29">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$from</span> = <span style="color:#0000CC;">$_SERVER</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_REFERER'</span><span style="color:#006600;">&#93;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$host</span> = <span style="color:#0000CC;">$_SERVER</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_HOST'</span><span style="color:#006600;">&#93;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">if</span><span style="color:#006600;">&#40;</span>!<a href="http://www.php.net/stristr"><span style="color:#0000CC;">stristr</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$from</span>, <span style="color:#0000CC;">$host</span><span style="color:#006600;">&#41;</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/print"><span style="color:#0000CC;">print</span></a> <span style="color:#990000;">'不正なリファラーです。'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
リファラーを持たない環境は結構あります。ノートン等のセキュリティソフトによって隠蔽されている可能性もあります。ドコモなど一部携帯でアウト。</p>
<h3>逆引き不可能なIPアドレスを拒否</h3>
<div class="igBar"><span id="lphp-30"><a href="#" onclick="javascript:showCodeTxt('php-30'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-30">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$ip</span> = <span style="color:#0000CC;">$_SERVER</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'REMOTE_ADDR'</span><span style="color:#006600;">&#93;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$host</span> = <a href="http://www.php.net/gethostbyaddr"><span style="color:#0000CC;">getHostByAddr</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$ip</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">if</span><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$ip</span>==<span style="color:#0000CC;">$host</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/print"><span style="color:#0000CC;">print</span></a> <span style="color:#990000;">'逆引き不可能なIPアドレスです。'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// これでも可能</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">if</span><span style="color:#006600;">&#40;</span>!<a href="http://www.php.net/preg_match"><span style="color:#0000CC;">preg_match</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'/[a-z]/'</span>, <span style="color:#0000CC;">$host</span><span style="color:#006600;">&#41;</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/print"><span style="color:#0000CC;">print</span></a> <span style="color:#990000;">'逆引き不可能なIPアドレスです。'</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>プロキシ経由を拒否</h3>
<p>プロキシ特有の環境変数とホスト名を調べる方法です。<br />
環境変数を吐かない匿名プロキシもあって、すべてを検出できる訳ではありません。<br />
他にはプロキシリストを作成したり、ポートスキャンする方法もあります。</p>
<div class="igBar"><span id="lphp-31"><a href="#" onclick="javascript:showCodeTxt('php-31'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-31">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$systems</span> = <span style="color:#0000CC;">$_SERVER</span> + <span style="color:#0000CC;">$_ENV</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$ip</span> = <span style="color:#0000CC;">$systems</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'REMOTE_ADDR'</span><span style="color:#006600;">&#93;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$host</span> = <a href="http://www.php.net/gethostbyaddr"><span style="color:#0000CC;">getHostByAddr</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$ip</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// ドコモの携帯はproxyが存在するので注意</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// anonym=anonymous,anonymizer</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// prox=proxy,proxify</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$proxhost</span> = <a href="http://www.php.net/preg_match"><span style="color:#0000CC;">preg_match</span></a><span style="color:#006600;">&#40;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#990000;">'/anonym|cache|delegate|firewall|gateway|httpd|keeper|prox|squid|via|www/'</span>,</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$host</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$bools</span> = <a href="http://www.php.net/array"><span style="color:#0000CC;">array</span></a><span style="color:#006600;">&#40;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/isset"><span style="color:#0000CC;">isset</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$systems</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_CLIENT_IP'</span><span style="color:#006600;">&#93;</span><span style="color:#006600;">&#41;</span>,</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/isset"><span style="color:#0000CC;">isset</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$systems</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_FORWARDED'</span><span style="color:#006600;">&#93;</span><span style="color:#006600;">&#41;</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/isset"><span style="color:#0000CC;">isset</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$systems</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_MAX_FORWARS'</span><span style="color:#006600;">&#93;</span><span style="color:#006600;">&#41;</span>,</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/isset"><span style="color:#0000CC;">isset</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$systems</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_PROXY_CONNECTION'</span><span style="color:#006600;">&#93;</span><span style="color:#006600;">&#41;</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/isset"><span style="color:#0000CC;">isset</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$systems</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_SP_HOST'</span><span style="color:#006600;">&#93;</span><span style="color:#006600;">&#41;</span>,</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/isset"><span style="color:#0000CC;">isset</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$systems</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_TE'</span><span style="color:#006600;">&#93;</span><span style="color:#006600;">&#41;</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/isset"><span style="color:#0000CC;">isset</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$systems</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_VIA'</span><span style="color:#006600;">&#93;</span><span style="color:#006600;">&#41;</span>,</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/isset"><span style="color:#0000CC;">isset</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$systems</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_X_FORWARDED_FOR'</span><span style="color:#006600;">&#93;</span><span style="color:#006600;">&#41;</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/isset"><span style="color:#0000CC;">isset</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$systems</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_X_LOCKING'</span><span style="color:#006600;">&#93;</span><span style="color:#006600;">&#41;</span>,</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/isset"><span style="color:#0000CC;">isset</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$systems</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_XONNECTION'</span><span style="color:#006600;">&#93;</span><span style="color:#006600;">&#41;</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/isset"><span style="color:#0000CC;">isset</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$systems</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_XROXY_CONNECTION'</span><span style="color:#006600;">&#93;</span><span style="color:#006600;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$proxvar</span> = <a href="http://www.php.net/in_array"><span style="color:#0000CC;">in_array</span></a><span style="color:#006600;">&#40;</span><span style="color:#008000;">TRUE</span>, <span style="color:#0000CC;">$bools</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">if</span><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$proxhost</span> || <span style="color:#0000CC;">$proxvar</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/print"><span style="color:#0000CC;">print</span></a> <span style="color:#990000;">'プロキシ経由です。'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
<a href="http://www.7key.jp/security/proxy.html">ネットワーク総合辞書 - プロクシとは</a><br />
<a href="http://www.cybersyndrome.net/">サイバーシンドローム</a></p>
<h3>その他の変数</h3>
<div class="igBar"><span id="lphp-32"><a href="#" onclick="javascript:showCodeTxt('php-32'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-32">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// 使用言語（ja以外のen-US等は不可）</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$lang</span> = <span style="color:#0000CC;">$_SERVER</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_ACCEPT_LANGUAGE'</span><span style="color:#006600;">&#93;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">if</span><span style="color:#006600;">&#40;</span>!<a href="http://www.php.net/stristr"><span style="color:#0000CC;">stristr</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$lang</span>, <span style="color:#990000;">'ja'</span><span style="color:#006600;">&#41;</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/print"><span style="color:#0000CC;">print</span></a> <span style="color:#990000;">'海外からのアクセスです。'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<div class="igBar"><span id="lphp-33"><a href="#" onclick="javascript:showCodeTxt('php-33'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-33">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// 接続状況（none,close等は不可）</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$conn</span> = <span style="color:#0000CC;">$_SERVER</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_CONNECTION'</span><span style="color:#006600;">&#93;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">if</span><span style="color:#006600;">&#40;</span>!<a href="http://www.php.net/stristr"><span style="color:#0000CC;">stristr</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$conn</span>, <span style="color:#990000;">'Keep-Alive'</span><span style="color:#006600;">&#41;</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/print"><span style="color:#0000CC;">print</span></a> <span style="color:#990000;">'接続状況が不明です。'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
これらの方法は携帯では使えない場合が多い。</p>
<h3>URL数を制限</h3>
<div class="igBar"><span id="lphp-34"><a href="#" onclick="javascript:showCodeTxt('php-34'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-34">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// URLを3つまでに制限する</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">if</span><span style="color:#006600;">&#40;</span><a href="http://www.php.net/substr_count"><span style="color:#0000CC;">substr_count</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$message</span>, <span style="color:#990000;">'http://'</span><span style="color:#006600;">&#41;</span>&gt; <span style="color:#CC66CC;color:#800000;">3</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/print"><span style="color:#0000CC;">print</span></a> <span style="color:#990000;">'URLは3つ以下に制限されています。'</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
URLを載せる目的のスパムが多いので効果的。</p>
<h3>日本語を含まない投稿を拒否</h3>
<div class="igBar"><span id="lphp-35"><a href="#" onclick="javascript:showCodeTxt('php-35'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-35">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">if</span><span style="color:#006600;">&#40;</span>!<a href="http://www.php.net/mb_ereg"><span style="color:#0000CC;">mb_ereg</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'[あ-んア-ン]'</span>, <span style="color:#0000CC;">$message</span><span style="color:#006600;">&#41;</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/print"><span style="color:#0000CC;">print</span></a> <span style="color:#990000;">'日本語が含まれていません。'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
効果的ですが、鎖国的で残念な方法。</p>
<h3>禁止ワードの入力を拒否</h3>
<div class="igBar"><span id="lphp-36"><a href="#" onclick="javascript:showCodeTxt('php-36'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-36">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// 投稿されたくないキーワードをカンマ区切りで設定</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$spamword</span> = <span style="color:#990000;">'アホ,バカ'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// 正規表現に変換</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$spamword</span> = <a href="http://www.php.net/preg_quote"><span style="color:#0000CC;">preg_quote</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$spamword</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$spamword</span> = <a href="http://www.php.net/str_replace"><span style="color:#0000CC;">str_replace</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">','</span>, <span style="color:#990000;">'|'</span>, <span style="color:#0000CC;">$spamword</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">if</span><span style="color:#006600;">&#40;</span><a href="http://www.php.net/mb_eregi"><span style="color:#0000CC;">mb_eregi</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$spamword</span>, <span style="color:#0000CC;">$message</span>, <span style="color:#0000CC;">$matches</span><span style="color:#006600;">&#41;</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <a href="http://www.php.net/print"><span style="color:#0000CC;">print</span></a> <span style="color:#0000CC;">$matches</span><span style="color:#006600;">&#91;</span><span style="color:#CC66CC;color:#800000;">0</span><span style="color:#006600;">&#93;</span>.<span style="color:#990000;">'が含まれています。'</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
（preg_quoteはShift_JISでは無効）</p>
<p><a href="http://www.moonover.jp/zikotu/senden/">宣伝書き込み調査中</a></p>
<p>日本語のスパムが目立ち始めたので、NGワード集を作成してみました。<br />
<textarea cols="20" rows="1">《,》,『,』,【,】,♂,♀,§,☆,★,○,●,◎,◇,◆,□,■,△,▲,▽,▼,※,→,←,↑,↓,〓,⇒,⇔,∀,∇,≪,≫,♪,━,─,逢,兄,姉,妹,淫,嘘,噂,裏,占,王,億,男,女,株,髪,姦,鬼,喰,恋,乞,咲,寂,尻,賑,精,即,溜,畜,巷,妻,奴,殿,奈,菜,覗,縛,秘,婦,某,娘,妄,儲,萌,桃,誘,夢,裸,烈,乱,足跡,貴方,案内,浮気,運命,援交,援助,円満,架空,覚醒,家事,加入,喫茶,究極,求人,業界,巨大,緊急,金融,厳守,懸賞,厳選,豪華,交際,豪邸,購読,好評,合法,攻略,困惑,在宅,殺到,至急,時給,資金,実録,始動,自慢,指名,借金,収入,衝撃,証拠,招待,所得,絶好,続出,損害,体験,代表,達人,団地,延滞,調教,直ア,直メ,抽選,出会,盗撮,投資,当社,当選,読者,年上,年下,内緒,入会,美人,必見,必死,便乗,風俗,副業,沸騰,不倫,返済,報酬,放題,本舗,麻薬,満喫,満載,銘柄,融資,優良,楽々,連合,遊ぼう,あなた,今だけ,受取人,急上昇,実施中,写真集,消費者,たった,動画集,誰でも,登録料,年会費,ほんと,ほんの,未払い,めちゃ,楽して,資料請求,こっそり,こんなに,ーす。,～す。,いよ。,くね。,事。,来てね。,だよ。,だよね。,ようね。,できる。,のである。,む。,ぃ,ぅ,ぇ,ぉ,～ス,～ｽ,アダルト,ｱﾀﾞﾙﾄ,アフィリ,ｱﾌｨﾘ,アルバイト,ｱﾙﾊﾞｲﾄ,イチオシ,ｲﾁｵｼ,イベント,ｲﾍﾞﾝﾄ,エロ,ｴﾛ,オークション,ｵｰｸｼｮﾝ,ガチ,ｶﾞﾁ,キャッシング,ｷｬｯｼﾝｸﾞ,ギャル,ｷﾞｬﾙ,キャンセル,ｷｬﾝｾﾙ,キャンペーン,ｷｬﾝﾍﾟｰﾝ,クレジット,ｸﾚｼﾞｯﾄ,ゲッツ,ｹﾞｯﾂ,ゴージャス,ｺﾞｰｼﾞｬｽ,合コン,合ｺﾝ,ココ,ｺｺ,コスプレ,ｺｽﾌﾟﾚ,コンパ,ｺﾝﾊﾟ,サービス,ｻｰﾋﾞｽ,サイコー,ｻｲｺｰ,サンプル画像,ｻﾝﾌﾟﾙ画像,サンプル動画,ｻﾝﾌﾟﾙ動画,スケベ,ｽｹﾍﾞ,スゴイ,ｽｺﾞｲ,ズバリ,ｽﾞﾊﾞﾘ,セレブ,ｾﾚﾌﾞ,ダイエット,ﾀﾞｲｴｯﾄ,タダ,ﾀﾀﾞ,チャット,ﾁｬｯﾄ,チャンス,ﾁｬﾝｽ,チャンネル,ﾁｬﾝﾈﾙ,ツッコミ,ﾂｯｺﾐ,テレクラ,ﾃﾚｸﾗ,ドラッグ,ﾄﾞﾗｯｸﾞ,ナイス,ﾅｲｽ,ナンパ,ﾅﾝﾊﾟ,ナース,ﾅｰｽ,ヌード,ﾇｰﾄﾞ,ノウハウ,ﾉｳﾊｳ,パートナー,ﾊﾟｰﾄﾅｰ,ビジネス,ﾋﾞｼﾞﾈｽ,ビック,ﾋﾞｯｸ,ビッグ,ﾋﾞｯｸﾞ,プレゼント,ﾌﾟﾚｾﾞﾝﾄ,フレンド,ﾌﾚﾝﾄﾞ,ポルノ,ﾎﾟﾙﾉ,マニア,ﾏﾆｱ,メル友,ﾒﾙ友,ランキング,ﾗﾝｷﾝｸﾞ,リッチ,ﾘｯﾁ,ローン,ﾛｰﾝ,ワンクリ,ﾜﾝｸﾘ</textarea></p>
<h3>まとめ</h3>
<p>スパムは、フォーム情報をスキャンして一方的に大量に送りつけられます。以前は英語のスパムが殆どで対処も楽でしたが、最近は日本語のスパムも目立つ様になってきました。フォームを探すだけでなく、手動で登録したり、弾かれても内容を変えてリトライさせるスパム生成アプリまで販売されています。</p>
<p>有名なスクリプトや一般的な対処法はすぐに狙われてしまいます。効果的で簡単な対処方法はなかなかありませんが、ちょっとした「ひねり」を加える事で被害を抑える事ができます。例えばフォームを表示してから投稿するまでの時間を計測して短すぎたら拒否するのも賢い手法といえます。また、セッションを活用するのも効果的です。今後良い方法を入手できたら紹介したいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mt312.com/php/40/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Amazon Web Service</title>
		<link>http://www.mt312.com/php/39/</link>
		<comments>http://www.mt312.com/php/39/#comments</comments>
		<pubDate>Thu, 10 May 2007 11:42:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.mt312.com/php/39/</guid>
		<description><![CDATA[Amazon Web Service(AWS)を使うと、Amazonで検索した商品データを自分のサイトに載せる事ができます。商品データはXML形式で返されますので、これをPHPで解析してHTMLに成型します。

このサービスを利用するには登録が必要です。

商品広告で収入を得る為のアソシエイト登録
AWSを利用する為のSubscription Idの取得



商品検索方法
http://xml-jp.amznxslt.com/onca/xml3?local=jp
このアドレスに検索用のパラメータを連結させて問い合わせします。


オプションパラメータ


f=
XSLTを適用する場合はそのURL
f=xmlとするとそのままXMLを取得できます。


locale=
国コード 日本はjp


type=
lite 簡易版
heavy 完全版


t=
アソシエイトID


dev-t=
Subscription Id （デベロッパトークン）


page=
結果が複数ページに渡る場合のページ数


mode=
検索する商品のジャンル


和書
books-jp


洋書
books-us


音楽
music-jp


音楽クラシック
classical-jp


DVD
dvd-jp


ビデオ
vhs-jp


エレクトロニクス
electronics-jp


ソフトウェア
software-jp


ゲーム
videogames-jp


ASINSearch=
商品固有のASIN(Amazon Standard Item Number)コード、もしくは書籍に付いているISBNコードを指定。 カンマ（,）で区切って複数指定可能


KeywordSearch=
検索単語


これ以外にも詳細な検索が行えるパラメータがいくつかあります。
XMLを解析する
アマゾンから返ってきたXMLは、PHP標準のDOM関数を使って自力で解析しても良いのですが、構造が複雑になると少々大変です。そこで、PEARのXML_Serializerパッケージに含まれているXML_Unserializerクラスを使います。これを使えば、XMLテキストを瞬時に連想配列にしてくれますので、後で好きな様にHTMLに加工できます。
（注） PEARがない場合、まずPEARを導入して下さい。
http://pear.php.net/package/XML_Serializer
PLAIN TEXT
PHP:




// XML_Unserializerクラスの読み込み


require 'XML/Unserializer.php';


&#160;


class AWS_QueryString &#123;


&#160; var $_params;


&#160;


&#160; function AWS_QueryString&#40;$token, $assoc,　$type = 'heavy', $format = 'xml',


$locale = 'jp'&#41; &#123;


&#160; &#160; $this-&#62;_params = array&#40;&#41;;


&#160; &#160; // 基本データだけ入れておく


&#160; &#160; $this-&#62;add&#40;'dev-t', $token&#41;;


&#160; &#160; $this-&#62;add&#40;'t', $assoc&#41;;


&#160; &#160; $this-&#62;add&#40;'locale', $locale&#41;;


&#160; &#160; $this-&#62;add&#40;'f', $format&#41;;


&#160; &#160; $this-&#62;add&#40;'type', $type&#41;;


&#160; &#125;


&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Amazon Web Service(AWS)を使うと、Amazonで検索した商品データを自分のサイトに載せる事ができます。商品データはXML形式で返されますので、これをPHPで解析してHTMLに成型します。</p>
<ul>
<li>このサービスを利用するには登録が必要です。
<ul>
<li><a href="http://associates.amazon.co.jp/gp/associates/join/main.html/250-9149221-5127435">商品広告で収入を得る為のアソシエイト登録</a></li>
<li><a href="http://www.amazon.co.jp/exec/obidos/subst/associates/join/webservices.html/250-9149221-5127435">AWSを利用する為のSubscription Idの取得</a></li>
</ul>
</li>
</ul>
<h3>商品検索方法</h3>
<p><strong>http://xml-jp.amznxslt.com/onca/xml3?local=jp</strong><br />
このアドレスに検索用のパラメータを連結させて問い合わせします。</p>
<table>
<tr>
<th colSpan="3">オプションパラメータ</th>
</tr>
<tr>
<td>f=</td>
<td colSpan="2">XSLTを適用する場合はそのURL<br />
f=xmlとするとそのままXMLを取得できます。</td>
</tr>
<tr>
<td>locale=</td>
<td colSpan="2">国コード 日本はjp</td>
</tr>
<tr>
<td>type=</td>
<td colSpan="2">lite 簡易版<br />
heavy 完全版</td>
</tr>
<tr>
<td>t=</td>
<td colSpan="2">アソシエイトID</td>
</tr>
<tr>
<td>dev-t=</td>
<td colSpan="2">Subscription Id （デベロッパトークン）</td>
</tr>
<tr>
<td>page=</td>
<td colSpan="2">結果が複数ページに渡る場合のページ数</td>
</tr>
<tr>
<td rowSpan="10">mode=</td>
<th colSpan="2">検索する商品のジャンル</th>
</tr>
<tr>
<td>和書</td>
<td>books-jp</td>
</tr>
<tr>
<td>洋書</td>
<td>books-us</td>
</tr>
<tr>
<td>音楽</td>
<td>music-jp</td>
</tr>
<tr>
<td>音楽クラシック</td>
<td>classical-jp</td>
</tr>
<tr>
<td>DVD</td>
<td>dvd-jp</td>
</tr>
<tr>
<td>ビデオ</td>
<td>vhs-jp</td>
</tr>
<tr>
<td>エレクトロニクス</td>
<td>electronics-jp</td>
</tr>
<tr>
<td>ソフトウェア</td>
<td>software-jp</td>
</tr>
<tr>
<td>ゲーム</td>
<td>videogames-jp</td>
</tr>
<tr>
<td>ASINSearch=</td>
<td colSpan="2">商品固有のASIN(Amazon Standard Item Number)コード、もしくは書籍に付いているISBNコードを指定。 カンマ（,）で区切って複数指定可能</td>
</tr>
<tr>
<td>KeywordSearch=</td>
<td colSpan="2">検索単語</td>
</tr>
</table>
<p>これ以外にも詳細な検索が行えるパラメータがいくつかあります。</p>
<h3>XMLを解析する</h3>
<p>アマゾンから返ってきたXMLは、PHP標準のDOM関数を使って自力で解析しても良いのですが、構造が複雑になると少々大変です。そこで、PEARのXML_Serializerパッケージに含まれているXML_Unserializerクラスを使います。これを使えば、XMLテキストを瞬時に連想配列にしてくれますので、後で好きな様にHTMLに加工できます。</p>
<p>（注） PEARがない場合、まず<a href="http://pear.php.net/manual/ja/installation.php">PEARを導入</a>して下さい。<br />
<a href="http://pear.php.net/package/XML_Serializer">http://pear.php.net/package/XML_Serializer</a></p>
<div class="igBar"><span id="lphp-38"><a href="#" onclick="javascript:showCodeTxt('php-38'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-38">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// XML_Unserializerクラスの読み込み</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">require</span> <span style="color:#990000;">'XML/Unserializer.php'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">class</span> AWS_QueryString <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#008000;">var</span> <span style="color:#0000CC;">$_params</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#008000;">function</span> AWS_QueryString<span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$token</span>, <span style="color:#0000CC;">$assoc</span>,　<span style="color:#0000CC;">$type</span> = <span style="color:#990000;">'heavy'</span>, <span style="color:#0000CC;">$format</span> = <span style="color:#990000;">'xml'</span>,</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$locale</span> = <span style="color:#990000;">'jp'</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000CC;">$this</span>-&gt;_params = <a href="http://www.php.net/array"><span style="color:#0000CC;">array</span></a><span style="color:#006600;">&#40;</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#F27900;">// 基本データだけ入れておく</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000CC;">$this</span>-&gt;<span style="color:#006600;">add</span><span style="color:#006600;">&#40;</span><span style="color:#990000;">'dev-t'</span>, <span style="color:#0000CC;">$token</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000CC;">$this</span>-&gt;<span style="color:#006600;">add</span><span style="color:#006600;">&#40;</span><span style="color:#990000;">'t'</span>, <span style="color:#0000CC;">$assoc</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000CC;">$this</span>-&gt;<span style="color:#006600;">add</span><span style="color:#006600;">&#40;</span><span style="color:#990000;">'locale'</span>, <span style="color:#0000CC;">$locale</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000CC;">$this</span>-&gt;<span style="color:#006600;">add</span><span style="color:#006600;">&#40;</span><span style="color:#990000;">'f'</span>, <span style="color:#0000CC;">$format</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000CC;">$this</span>-&gt;<span style="color:#006600;">add</span><span style="color:#006600;">&#40;</span><span style="color:#990000;">'type'</span>, <span style="color:#0000CC;">$type</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#008000;">function</span> add<span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$name</span>, <span style="color:#0000CC;">$value</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000CC;">$this</span>-&gt;_params<span style="color:#006600;">&#91;</span><span style="color:#0000CC;">$name</span><span style="color:#006600;">&#93;</span> = <span style="color:#0000CC;">$value</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#008000;">function</span> get<span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$key</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#008000;">if</span><span style="color:#006600;">&#40;</span><a href="http://www.php.net/array_key_exists"><span style="color:#0000CC;">array_key_exists</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$key</span>, <span style="color:#0000CC;">$this</span>-&gt;_params<span style="color:#006600;">&#41;</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color:#008000;">return</span> <span style="color:#0000CC;">$this</span>-&gt;_params<span style="color:#006600;">&#91;</span><span style="color:#0000CC;">$key</span><span style="color:#006600;">&#93;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#008000;">return</span> <span style="color:#008000;">NULL</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#008000;">function</span> toString<span style="color:#006600;">&#40;</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#008000;">if</span><span style="color:#006600;">&#40;</span><a href="http://www.php.net/count"><span style="color:#0000CC;">count</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$this</span>-&gt;_params<span style="color:#006600;">&#41;</span>&gt; <span style="color:#CC66CC;color:#800000;">0</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color:#0000CC;">$tmp</span> = <a href="http://www.php.net/array"><span style="color:#0000CC;">array</span></a><span style="color:#006600;">&#40;</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color:#0000CC;">$str</span> = <span style="color:#990000;">''</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color:#008000;">foreach</span><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$this</span>-&gt;_params <span style="color:#008000;">as</span> <span style="color:#0000CC;">$key</span> =&gt; <span style="color:#0000CC;">$value</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000;">if</span><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$value</span><span style="color:#006600;">&#41;</span> <span style="color:#0000CC;">$tmp</span><span style="color:#006600;">&#91;</span><span style="color:#006600;">&#93;</span> = <span style="color:#990000;">"$key=$value"</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color:#006600;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000CC;">$str</span> = <a href="http://www.php.net/implode"><span style="color:#0000CC;">implode</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'&amp;'</span>, <span style="color:#0000CC;">$tmp</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000CC;">$str</span> = <span style="color:#990000;">"http://xml-jp.amznxslt.com/onca/xml3?$str"</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#008000;">return</span> <span style="color:#0000CC;">$str</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">class</span> AWS_ProductData <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#008000;">var</span> <span style="color:#0000CC;">$_products</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#008000;">function</span> AWS_ProductData<span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$xmlsrc</span>, <span style="color:#0000CC;">$encoding</span>=<span style="color:#990000;">'SJIS'</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000CC;">$lines</span> = <a href="http://www.php.net/file"><span style="color:#0000CC;">file</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$xmlsrc</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000CC;">$line</span> = <a href="http://www.php.net/implode"><span style="color:#0000CC;">implode</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">''</span>, <span style="color:#0000CC;">$lines</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000CC;">$line</span> = <a href="http://www.php.net/mb_convert_encoding"><span style="color:#0000CC;">mb_convert_encoding</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$line</span>, <span style="color:#0000CC;">$encoding</span>, <span style="color:#990000;">'UTF-8'</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; </div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000CC;">$unserializer</span> =&amp; <span style="color:#008000;">new</span> XML_Unserializer<span style="color:#006600;">&#40;</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#F27900;">// 解析に属性も含める</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000CC;">$unserializer</span>-&gt;<span style="color:#006600;">setOption</span><span style="color:#006600;">&#40;</span><span style="color:#990000;">'parseAttributes'</span>, <span style="color:#008000;">TRUE</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000CC;">$success</span> = <span style="color:#0000CC;">$unserializer</span>-&gt;<span style="color:#006600;">unserialize</span><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$line</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#008000;">if</span><span style="color:#006600;">&#40;</span><a href="http://www.php.net/is_object"><span style="color:#0000CC;">is_object</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$success</span><span style="color:#006600;">&#41;</span><span style="color:#006600;">&#41;</span> <a href="http://www.php.net/die"><span style="color:#0000CC;">die</span></a><span style="color:#006600;">&#40;</span> <span style="color:#0000CC;">$success</span>-&gt;<span style="color:#006600;">getMessage</span><span style="color:#006600;">&#40;</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000CC;">$this</span>-&gt;_products = <span style="color:#0000CC;">$unserializer</span>-&gt;<span style="color:#006600;">getUnserializedData</span><span style="color:#006600;">&#40;</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#008000;">function</span> getProducts<span style="color:#006600;">&#40;</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#008000;">return</span> <span style="color:#0000CC;">$this</span>-&gt;_products;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// アマゾン・リクエストID（デベロッパトークン）</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/define"><span style="color:#0000CC;">define</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'AWS_TOKEN'</span>, <span style="color:#990000;">'xxxxxxxx'</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// アマゾン・アソシエイトID</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/define"><span style="color:#0000CC;">define</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'AWS_ASSOC'</span>, <span style="color:#990000;">'xxxxx-22'</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$qs</span> =&amp; <span style="color:#008000;">new</span> AWS_QueryString<span style="color:#006600;">&#40;</span>AWS_TOKEN, AWS_ASSOC<span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$qs</span>-&gt;<span style="color:#006600;">add</span><span style="color:#006600;">&#40;</span><span style="color:#990000;">'mode'</span>, <span style="color:#990000;">'music-jp'</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$qs</span>-&gt;<span style="color:#006600;">add</span><span style="color:#006600;">&#40;</span><span style="color:#990000;">'KeywordSearch'</span>, <span style="color:#990000;">'宇多田ヒカル'</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$url</span> = <span style="color:#0000CC;">$qs</span>-&gt;<span style="color:#006600;">toString</span><span style="color:#006600;">&#40;</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$obj</span> =&amp; <span style="color:#008000;">new</span> AWS_ProductData<span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$url</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$products</span> = <span style="color:#0000CC;">$obj</span>-&gt;<span style="color:#006600;">getProducts</span><span style="color:#006600;">&#40;</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/print"><span style="color:#0000CC;">print</span></a> <span style="color:#990000;">'&lt;pre&gt;'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/print_r"><span style="color:#0000CC;">print_r</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$products</span><span style="color:#006600;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/print"><span style="color:#0000CC;">print</span></a> <span style="color:#990000;">'&lt;/pre&gt;'</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
<a href="/sample/aws/">実行結果</a></p>
<h3>商品リンク</h3>
<pre>http://www.amazon.co.jp/exec/obidos/ASIN/xxxxxxxxxx/xxxxx-22/
http://www.amazon.co.jp/exec/obidos/ASIN/xxxxxxxxxx/xxxxx-22/ref=nosim/</pre>
<p>通常、商品が売れた場合の紹介料は3%ですが、下のようにref=nosimを付けたアドレスにリンクしておくと、そのページで購入された場合に限り5%になりますので、一応付けておきましょう。</p>
<h3>参考資料</h3>
<ul>
<li><a href="http://www.atmarkit.co.jp/fjava/column/andoh/andoh22.html">＠IT - Amazon Webサービスの可能性</a></li>
<li><a href="http://www.goodpic.com/mt/archives/000479.html">Goodpic - AmazonのXML Webサービス（REST）はXSLを書くだけでもかなり使える</a></li>
<li><a href="http://hail2u.net/blog/coding/air.html">hail2u.net - Amazonの画像置換</a></li>
<li><a href="http://blog.bulknews.net/mt/archives/000906.html">blog.bulknews.net - Amazonの輸入盤画像</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mt312.com/php/39/feed/</wfw:commentRss>
		</item>
		<item>
		<title>テンプレートエンジンについて</title>
		<link>http://www.mt312.com/php/38/</link>
		<comments>http://www.mt312.com/php/38/#comments</comments>
		<pubDate>Thu, 10 May 2007 11:31:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.mt312.com/php/38/</guid>
		<description><![CDATA[PHPにテンプレートエンジンは必要か？
この話題はPHP users-mlでも取り上げられました。
PHPはSSIの様にHTML内に埋め込んで使う事ができます。では、テンプレートエンジンが使われているのは何故でしょうか。いずれにせよ、他人のスクリプトを使う場合、デザイン部分だけ独立している方が使いやすいですね。
Smarty
HTML_Template_IT
テンプレートエンジンの魅力
それは、ロジックとデザインの完全な分離です。PHPを知らなくても容易にデザインを変更できるようになります。高機能なテンプレートエンジンでは、表組みや日付のフォーマット変更、文章の要約処理、文字コードの変更まで行う事ができます。

以下に該当する場合、テンプレートエンジンは特に威力を発揮します。

デザイン担当者がスクリプトを全く知らない場合。
ロジックよりデザインを先行して作成する場合。
複雑なデザインの場合。



PHPタグを上手に使おう
テンプレートエンジンは必要ないと判断した場合でも、作り方次第で上手くデザインを分離させられます。まず、PHPを含むデザインファイルは.phpとせず.htmとしておき、PHPでincludeして使うようにします。これでブラウザでデザインを確認しやすくなります。そして、どこでもPHPが書けてしまう事に甘えずに、スクリプトのみのファイルで極力データを加工しておきます。
※.htmとして良いのは画面への出力部分を極力抽出した場合に限ります。と言うのは、直接アクセスされた場合に中身が丸見えになってしまうからです。関数定義を含めるのも避けましょう。
結果データは &#60;h1&#62;&#60;?echo $arr["title"] ?&#62;&#60;/h1&#62; の様にHTMLに埋め込みます。ところが直接ブラウザで見るとデータが消えてしまっているのが分かります。これはテンプレートエンジンを使わない場合は仕方がありません。PHPタグ&#60;??&#62;はブラウザには表示されません。これが気に入らない場合はテンプレートエンジンを導入しましょう。
デザインを崩してしまう書き方

属性内のクォーテーション
&#60;a href=&#34;&#60;?echo $arr[&#34;url&#34;] ?&#62;&#34;&#62;url&#60;/a&#62; → &#34;&#62;url
これは「'」を使えば回避できます。
&#60;a href=&#34;&#60;?echo $arr['url'] ?&#62;&#34;&#62;url&#60;/a&#62; → url

比較やオブジェクトで使う &#34;&#62;&#34;
&#60;? if($n&#62;=10){ ?&#62; → =10){ ?&#62;
&#60;?echo $obj-&#62;value ?&#62; → value ?&#62;
これらは最近のWEB作成ソフトでは上手く解釈してくれますが、ブラウザでも確認できた方がより便利です。そこで、属性内のクォーテーションと&#34;&#62;&#34;は使わないようにします。テンプレート内で使う変数は予め連想配列にしておき、ループが必要な場合はそれを配列に溜めます。ループにはforeachを活用します。連想配列はクォーテーションを使うので、extract($hash);でキー文字列の変数に変換します。
PLAIN TEXT
PHP:




&#60;? foreach&#40;$hashes as $hash&#41;&#123;extract&#40;$hash&#41;; ?&#62;


&#60;h2&#62;&#60;?echo $title ?&#62;&#60;/h2&#62;


&#60;p&#62;written by &#60;?echo $name ?&#62; on &#60;?echo date&#40;'m/d H:i', $timestamp&#41; ?&#62;&#60;/p&#62;


&#60;p&#62;&#60;?echo $message ?&#62;&#60;/p&#62;


&#60;p&#62;&#60;a href="./bbs.php?reply=&#60;?echo $id ?&#62;"&#62;返信する&#60;/a&#62;&#60;/p&#62;


&#60;hr /&#62;


&#60;? &#125; ?&#62; 






こうして少し気を使うだけで、きれいなデザインを保持できます。
自分だけで使う場合は、これで十分かもしれません。
追記
とは言ってもクラスを多用する場合には必然的にオブジェクトの-&#62;を使わざるを得ません。連想配列しか使えないのは不便です。そんな場合はテンプレート内専用の変換関数をクラスに属させずに集めておくと便利になり、見通しも効きます。例えばオブジェクトの変数を取り出すだけの関数や表組み生成などの1行では書けない様な処理も該当します。ここで使っているWordPressもテンプレート用の関数を充実させて使いやすい様に設計されています。
]]></description>
			<content:encoded><![CDATA[<h3>PHPにテンプレートエンジンは必要か？</h3>
<p>この話題は<a href="http://ns1.php.gr.jp/pipermail/php-users/2002-August/009663.html">PHP users-ml</a>でも取り上げられました。</p>
<p>PHPはSSIの様にHTML内に埋め込んで使う事ができます。では、テンプレートエンジンが使われているのは何故でしょうか。いずれにせよ、他人のスクリプトを使う場合、デザイン部分だけ独立している方が使いやすいですね。</p>
<p><a href="http://smarty.php.net/">Smarty</a><br />
<a href="http://pear.php.net/manual/ja/package.html.html-template-it.php">HTML_Template_IT</a></p>
<h3>テンプレートエンジンの魅力</h3>
<p>それは、<strong>ロジックとデザインの完全な分離</strong>です。PHPを知らなくても容易にデザインを変更できるようになります。高機能なテンプレートエンジンでは、表組みや日付のフォーマット変更、文章の要約処理、文字コードの変更まで行う事ができます。</p>
<ul>
<li>以下に該当する場合、テンプレートエンジンは特に威力を発揮します。
<ul>
<li>デザイン担当者がスクリプトを全く知らない場合。</li>
<li>ロジックよりデザインを先行して作成する場合。</li>
<li>複雑なデザインの場合。</li>
</ul>
</li>
</ul>
<h3>PHPタグを上手に使おう</h3>
<p>テンプレートエンジンは必要ないと判断した場合でも、作り方次第で上手くデザインを分離させられます。まず、PHPを含むデザインファイルは.phpとせず.htmとしておき、PHPでincludeして使うようにします。これでブラウザでデザインを確認しやすくなります。そして、どこでもPHPが書けてしまう事に甘えずに、スクリプトのみのファイルで極力データを加工しておきます。</p>
<p>※.htmとして良いのは画面への出力部分を極力抽出した場合に限ります。と言うのは、直接アクセスされた場合に中身が丸見えになってしまうからです。関数定義を含めるのも避けましょう。</p>
<p>結果データは &lt;h1&gt;&lt;?echo $arr["title"] ?&gt;&lt;/h1&gt; の様にHTMLに埋め込みます。ところが直接ブラウザで見るとデータが消えてしまっているのが分かります。これはテンプレートエンジンを使わない場合は仕方がありません。PHPタグ&lt;??&gt;はブラウザには表示されません。これが気に入らない場合はテンプレートエンジンを導入しましょう。</p>
<h3>デザインを崩してしまう書き方</h3>
<pre>
属性内のクォーテーション
&lt;a href=&quot;&lt;?echo $arr[&quot;url&quot;] ?&gt;&quot;&gt;url&lt;/a&gt; → &quot;&gt;url
これは「'」を使えば回避できます。
&lt;a href=&quot;&lt;?echo $arr['url'] ?&gt;&quot;&gt;url&lt;/a&gt; → url</pre>
<pre>
比較やオブジェクトで使う &quot;&gt;&quot;
&lt;? if($n&gt;=10){ ?&gt; → =10){ ?&gt;
&lt;?echo $obj-&gt;value ?&gt; → value ?&gt;</pre>
<p>これらは最近のWEB作成ソフトでは上手く解釈してくれますが、ブラウザでも確認できた方がより便利です。そこで、属性内のクォーテーションと&quot;&gt;&quot;は使わないようにします。テンプレート内で使う変数は予め連想配列にしておき、ループが必要な場合はそれを配列に溜めます。ループにはforeachを活用します。連想配列はクォーテーションを使うので、extract($hash);でキー文字列の変数に変換します。</p>
<div class="igBar"><span id="lphp-40"><a href="#" onclick="javascript:showCodeTxt('php-40'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-40">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">&lt;?</span> <span style="color:#008000;">foreach</span><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$hashes</span> <span style="color:#008000;">as</span> <span style="color:#0000CC;">$hash</span><span style="color:#006600;">&#41;</span><span style="color:#006600;">&#123;</span><a href="http://www.php.net/extract"><span style="color:#0000CC;">extract</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$hash</span><span style="color:#006600;">&#41;</span>; <span style="color:#008000;">?&gt;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&lt;h2&gt;&lt;?<a href="http://www.php.net/echo"><span style="color:#0000CC;">echo</span></a> <span style="color:#0000CC;">$title</span> ?&gt;&lt;/h2&gt;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&lt;p&gt;written by &lt;?<a href="http://www.php.net/echo"><span style="color:#0000CC;">echo</span></a> <span style="color:#0000CC;">$name</span> <span style="color:#008000;">?&gt;</span> on &lt;?<a href="http://www.php.net/echo"><span style="color:#0000CC;">echo</span></a> <a href="http://www.php.net/date"><span style="color:#0000CC;">date</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'m/d H:i'</span>, <span style="color:#0000CC;">$timestamp</span><span style="color:#006600;">&#41;</span> ?&gt;&lt;/p&gt;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&lt;p&gt;&lt;?<a href="http://www.php.net/echo"><span style="color:#0000CC;">echo</span></a> <span style="color:#0000CC;">$message</span> ?&gt;&lt;/p&gt;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&lt;p&gt;&lt;a href=<span style="color:#990000;">"./bbs.php?reply=&lt;?echo $id ?&gt;"</span>&gt;返信する&lt;/a&gt;&lt;/p&gt;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&lt;hr /&gt;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">&lt;?</span> <span style="color:#006600;">&#125;</span> <span style="color:#008000;">?&gt;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
こうして少し気を使うだけで、きれいなデザインを保持できます。<br />
自分だけで使う場合は、これで十分かもしれません。</p>
<h3>追記</h3>
<p>とは言ってもクラスを多用する場合には必然的にオブジェクトの-&gt;を使わざるを得ません。連想配列しか使えないのは不便です。そんな場合はテンプレート内専用の変換関数をクラスに属させずに集めておくと便利になり、見通しも効きます。例えばオブジェクトの変数を取り出すだけの関数や表組み生成などの1行では書けない様な処理も該当します。ここで使っているWordPressもテンプレート用の関数を充実させて使いやすい様に設計されています。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mt312.com/php/38/feed/</wfw:commentRss>
		</item>
		<item>
		<title>クラスとメソッドの動的使用</title>
		<link>http://www.mt312.com/php/37/</link>
		<comments>http://www.mt312.com/php/37/#comments</comments>
		<pubDate>Wed, 09 May 2007 08:55:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.mt312.com/php/37/</guid>
		<description><![CDATA[PHPでは大胆な事ができます。
インスタンスメソッドを呼ぶ
PLAIN TEXT
PHP:




class ClassA &#123;


&#160; function method&#40;&#41; &#123;


&#160; &#160; print 'method';


&#160; &#125;


&#125;


&#160;


// 大文字小文字は区別しない


$className = 'classa';


$methodName = 'method';


$obj = new $className&#40;&#41;;// new ClassA();


$obj-&#62;$methodName&#40;&#41;;// $obj-&#62;method(); 






staticメソッドを呼ぶ
インスタンスメソッドと若干異なります。
PLAIN TEXT
PHP:




class ClassA &#123;


&#160; function method&#40;&#41; &#123;


&#160; &#160; print 'method';


&#160; &#125;


&#125;


&#160;


// 大文字小文字は区別しない


$className = 'classa';


$methodName = 'method';


$className::$methodName&#40;&#41;;// parse error


eval&#40;"$className::$methodName();"&#41;;// evalを使えばOK


call_user_func&#40;array&#40;$className, $methodName&#41;&#41;;// こちらがベスト 






まとめ
いずれも非常に便利です。
クラス名や関数名を文字列で登録しておくだけで実行できます。
GDのバージョンによって、画像処理関数を切り替えたい時にも使えます。
又、登録モード、削除モード、検索モードなど、モード毎に1つの関数を呼ぶ便利な使い方もできます。わざわざ、if(登録モードなら)なんて分岐せずに済みますね。
]]></description>
			<content:encoded><![CDATA[<p>PHPでは大胆な事ができます。</p>
<h3>インスタンスメソッドを呼ぶ</h3>
<div class="igBar"><span id="lphp-43"><a href="#" onclick="javascript:showCodeTxt('php-43'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-43">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">class</span> ClassA <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#008000;">function</span> method<span style="color:#006600;">&#40;</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <a href="http://www.php.net/print"><span style="color:#0000CC;">print</span></a> <span style="color:#990000;">'method'</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// 大文字小文字は区別しない</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$className</span> = <span style="color:#990000;">'classa'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$methodName</span> = <span style="color:#990000;">'method'</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$obj</span> = <span style="color:#008000;">new</span> <span style="color:#0000CC;">$className</span><span style="color:#006600;">&#40;</span><span style="color:#006600;">&#41;</span>;<span style="color:#F27900;">// new ClassA();</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$obj</span>-&gt;<span style="color:#0000CC;">$methodName</span><span style="color:#006600;">&#40;</span><span style="color:#006600;">&#41;</span>;<span style="color:#F27900;">// $obj-&gt;method(); </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>staticメソッドを呼ぶ</h3>
<p>インスタンスメソッドと若干異なります。</p>
<div class="igBar"><span id="lphp-44"><a href="#" onclick="javascript:showCodeTxt('php-44'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-44">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">class</span> ClassA <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#008000;">function</span> method<span style="color:#006600;">&#40;</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <a href="http://www.php.net/print"><span style="color:#0000CC;">print</span></a> <span style="color:#990000;">'method'</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#F27900;">// 大文字小文字は区別しない</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$className</span> = <span style="color:#990000;">'classa'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$methodName</span> = <span style="color:#990000;">'method'</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000CC;">$className</span>::<span style="color:#0000CC;">$methodName</span><span style="color:#006600;">&#40;</span><span style="color:#006600;">&#41;</span>;<span style="color:#F27900;">// parse error</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/eval"><span style="color:#0000CC;">eval</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">"$className::$methodName();"</span><span style="color:#006600;">&#41;</span>;<span style="color:#F27900;">// evalを使えばOK</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/call_user_func"><span style="color:#0000CC;">call_user_func</span></a><span style="color:#006600;">&#40;</span><a href="http://www.php.net/array"><span style="color:#0000CC;">array</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$className</span>, <span style="color:#0000CC;">$methodName</span><span style="color:#006600;">&#41;</span><span style="color:#006600;">&#41;</span>;<span style="color:#F27900;">// こちらがベスト </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>まとめ</h3>
<p>いずれも非常に便利です。<br />
クラス名や関数名を文字列で登録しておくだけで実行できます。<br />
GDのバージョンによって、画像処理関数を切り替えたい時にも使えます。<br />
又、登録モード、削除モード、検索モードなど、モード毎に1つの関数を呼ぶ便利な使い方もできます。わざわざ、if(登録モードなら)なんて分岐せずに済みますね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mt312.com/php/37/feed/</wfw:commentRss>
		</item>
		<item>
		<title>メソッドのオーバーロード</title>
		<link>http://www.mt312.com/php/36/</link>
		<comments>http://www.mt312.com/php/36/#comments</comments>
		<pubDate>Wed, 09 May 2007 08:54:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.mt312.com/php/36/</guid>
		<description><![CDATA[PHP4ではメソッドのオーバーライドは出来るが、オーバーロードは出来ない。
PLAIN TEXT
PHP:




class Parent &#123;


&#160; function ride&#40;&#41; &#123;


&#160; &#160; print 'p_ride';


&#160; &#125;


&#160; function load&#40;&#41; &#123;


&#160; &#160; print 'p_load';


&#160; &#125;


&#125;


class Child extends Parent &#123;


&#160; function ride&#40;&#41; &#123;


&#160; &#160; print 'c_ride';


&#160; &#125;


&#160; function load&#40;$i&#41; &#123;


&#160; &#160; print 'c_load';


&#160; &#125;


&#125;


&#160;


$c = new Child&#40;&#41;;


$c-&#62;ride&#40;&#41;; // c_ride


$c-&#62;load&#40;1&#41;;// c_load


$c-&#62;load&#40;&#41;; // 引数ないぞエラー 






PHPでは同名メソッドの複数定義ができません。その代わり、引数のデフォルト値を設定できるので、一回の定義でオーバーロードのように振舞う事ができます。
function load($i=1) {}
複数の引数にデフォルト値が設定されている場合は、最後から順に省略できます。
function example($arg1, $arg2=1, $arg3=2)
example(2, 4, 6);
example(2, 4);
example(2);
]]></description>
			<content:encoded><![CDATA[<p>PHP4ではメソッドのオーバーライドは出来るが、オーバーロードは出来ない。</p>
<div class="igBar"><span id="lphp-46"><a href="#" onclick="javascript:showCodeTxt('php-46'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-46">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000;">class</span> Parent <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#008000;">function</span> ride<span style="color:#006600;">&#40;</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <a href="http://www.php.net/print"><span style="color:#0000CC;">print</span></a> <span style="color:#990000;">'p_ride'</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#006600;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#008000;">function</span> load<span style="color:#0066