<?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</title>
	<link>http://www.mt312.com</link>
	<description></description>
	<pubDate>Mon, 12 May 2008 02:56:06 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
	<language>ja</language>
			<item>
		<title>メールフォーム ES-FORM</title>
		<link>http://www.mt312.com/script/16/</link>
		<comments>http://www.mt312.com/script/16/#comments</comments>
		<pubDate>Mon, 31 Dec 2007 06:20:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.mt312.com/script/16/</guid>
		<description><![CDATA[特徴
複数のフォームを一括管理できるメールフォーム管理ウェアです。
ホームページ初心者でも簡単に作成できます。
簡単なフォームなら1分で完成。
複雑な注文フォームや簡単なアンケートフォームも作れます。
作成後のフォームの変更や並び替えも素早く行えます。
アップロード用のファイル選択フォームを複数配置する事も可能。
アップロードされたファイルはメールに添付して送信されます。 
機能

フォーム管理

複数のフォームを作成管理


フォーム要素管理

入力制限やサイズなどの詳細設定機能
送信控え設定
並び替え
グループ化


メール

複数のアドレスに送信可能
控えメール送信機能
添付メール送信機能
メール文面編集機能


テンプレート

フォーム毎にエラー画面、確認画面、フォーム画面を含んだテンプレートを自動構築
テンプレート編集機能
書き出されたテンプレートはWEB作成ソフトで編集可能 



推奨環境
PHP4.3以上推奨
マルチバイト関数が有効になっている事
サンプル
サンプル




ダウンロード
必ず利用規約を読んで、同意の上でダウンロードして下さい。
esform.lzh FAQ




内容、構成
public_html / index.html (トップページ)
     │
     └─── esform [707]
                 │
                 └─── app [707] [...]]]></description>
			<content:encoded><![CDATA[<h3>特徴</h3>
<p>複数のフォームを一括管理できるメールフォーム管理ウェアです。<br />
ホームページ初心者でも簡単に作成できます。<br />
簡単なフォームなら1分で完成。<br />
複雑な注文フォームや簡単なアンケートフォームも作れます。<br />
作成後のフォームの変更や並び替えも素早く行えます。<br />
アップロード用のファイル選択フォームを複数配置する事も可能。<br />
アップロードされたファイルはメールに添付して送信されます。 </p>
<h3>機能</h3>
<ul>
<li>フォーム管理
<ul>
<li>複数のフォームを作成管理</li>
</ul>
</li>
<li>フォーム要素管理
<ul>
<li>入力制限やサイズなどの詳細設定機能</li>
<li>送信控え設定</li>
<li>並び替え</li>
<li>グループ化</li>
</ul>
</li>
<li>メール
<ul>
<li>複数のアドレスに送信可能</li>
<li>控えメール送信機能</li>
<li>添付メール送信機能</li>
<li>メール文面編集機能</li>
</ul>
</li>
<li>テンプレート
<ul>
<li>フォーム毎にエラー画面、確認画面、フォーム画面を含んだテンプレートを自動構築</li>
<li>テンプレート編集機能</li>
<li>書き出されたテンプレートはWEB作成ソフトで編集可能 </li>
</ul>
</li>
</ul>
<h3>推奨環境</h3>
<p>PHP4.3以上推奨<br />
マルチバイト関数が有効になっている事</p>
<h3>サンプル</h3>
<p><a href="/mailform/sample.php">サンプル</a><br />
<script type="text/javascript"><!--
google_ad_client = "pub-5432031773928255";
/* mt312_contents_contents_468x60 */
google_ad_slot = "1698874565";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h3>ダウンロード</h3>
<p>必ず<a href="/about-script/1/">利用規約</a>を読んで、同意の上でダウンロードして下さい。<br />
<a href="/statistics/lime/lime.cgi?esform">esform.lzh</a> <a href="/about-script/4/">FAQ</a><br />
<script type="text/javascript"><!--
google_ad_client = "pub-5432031773928255";
/* mt312_contents_contents_468x60 */
google_ad_slot = "1698874565";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h3>内容、構成</h3>
<pre>public_html / index.html (トップページ)
     │
     └─── esform [707]
                 │
                 └─── app [707] アプリケーションディレクトリ
                           │
                           ├─── data [707] データディレクトリ
                           │
                           └─── tmp  [707] 一時ディレクトリ</pre>
<p>以上のディレクトリは書き込み処理をするので、権限（パーミッション）を変更して下さい。</p>
<h3>使用方法</h3>
<ol>
<li>解凍したファイルを全てアップロード。</li>
<li>上記ディレクトリの権限を変更。</li>
<li>転送先のindex.htmlへアクセス。</li>
</ol>
<h3>注意点</h3>
<p>本スクリプトにはPHPの設定を含んだ.htaccessとphp.iniを同梱しております。500エラーが出る場合は、サーバが推奨するどちらかのファイルをお使い下さい。ただし、サーバによっては、これらのファイルでは設定できない項目があるかもしれません。事前にサーバ運営会社の.htaccess、php.iniに関する説明を御一読下さい。</p>
<h3>ワンポイント</h3>
<dl>
<dt>携帯用として使いたい</dt>
<dd>ES-FORMはPCと携帯の振り分けを行いません。1設定1テンプレートとなっていますので、設定を共有したい場合でもPC用と携帯用の2つのフォームを作成して使い分けして下さい。</dd>
<dt>ある項目に2つ以上フォームを纏めて配置したい</dt>
<dd>フォームの個別設定にグループ化する設定があります。これにチェックを入れて構築すると上段の要素とグループ化されたテンプレートを作成できます。</dd>
</dl>
<h3>更新履歴</h3>
<table>
<tr>
<td>2008/03/19</td>
<td>控えメール文面に添付ヘッダが入ってしまうのを修正</td>
</tr>
<tr>
<td>2008/03/14</td>
<td>大文字拡張子のファイルが拒否されるのを修正</td>
</tr>
<tr>
<td>2008/02/28</td>
<td>ログ構成変更（以前のログと互換性がなくなりました。）</td>
</tr>
<tr>
<td>2008/02/15</td>
<td>メール文面のメールアドレスにmailto:追加</td>
</tr>
<tr>
<td>2008/01/26</td>
<td>インストーラ搭載</td>
</tr>
<tr>
<td>2008/01/23</td>
<td>送信ログを記録、日付の文字化けとfcloseの引数抜けを修正</td>
</tr>
<tr>
<td>2008/01/15</td>
<td>添付ファイルに対応、細かなバグフィクス</td>
</tr>
<tr>
<td style="width: 90px">2008/01/01</td>
<td>リリース</td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.mt312.com/script/16/feed/</wfw:commentRss>
		</item>
		<item>
		<title>製作依頼</title>
		<link>http://www.mt312.com/about-script/6/</link>
		<comments>http://www.mt312.com/about-script/6/#comments</comments>
		<pubDate>Sun, 16 Dec 2007 08:39:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[about script]]></category>

		<guid isPermaLink="false">http://www.mt312.com/about-script/6/</guid>
		<description><![CDATA[MT312では有料でプログラムの製作も行っております。
また、ご自身で設置が難しい場合は設置代行も承ります。
お気軽にお問い合わせ下さい。
製作依頼フォーム


設置代行
3,150円～


機能変更・追加
1項目10,500円～（内容によっては提示額より安くお受けできる場合もございます。）


新規製作
63,000円～（内容によっては提示額より安くお受けできる場合もございます。）


特定商取引法
http://www.mt312.com/about-script/3/


製作工程

製作依頼フォームより作成内容を送って頂き、お見積もりさせて頂きます。
メールにて打ち合わせをして仕様を決めます。
製作開始前に前金として半額を入金して頂きます。
作成後にプログラムの機能を確認して頂きます。
確認頂けたら残金を入金して頂きます。
プログラムをメールにてお渡し致します。

注意事項

プログラムを改造提供する場合でも著作権を放棄する訳ではありません。
作成したプログラムを配布する事はできません。
プログラムにはテンプレートが用意されているので、デザインが変更しやすくなっています。
新規に作成する場合、文字コードの希望がなければUTF-8で作成致します。
納期や金額、製作内容によってはお断りする場合もございます。

製作依頼フォーム
]]></description>
			<content:encoded><![CDATA[<p>MT312では有料でプログラムの製作も行っております。<br />
また、ご自身で設置が難しい場合は設置代行も承ります。<br />
お気軽にお問い合わせ下さい。</p>
<p><a href="/mailform/produce.php">製作依頼フォーム</a></p>
<table>
<tr>
<th style="width: 30%;">設置代行</th>
<td>3,150円～</td>
</tr>
<tr>
<th>機能変更・追加</th>
<td>1項目10,500円～<br />（内容によっては提示額より安くお受けできる場合もございます。）</td>
</tr>
<tr>
<th>新規製作</th>
<td>63,000円～<br />（内容によっては提示額より安くお受けできる場合もございます。）</td>
</tr>
<tr>
<th>特定商取引法</th>
<td><a href="http://www.mt312.com/about-script/3/">http://www.mt312.com/about-script/3/</a></td>
</tr>
</table>
<h3>製作工程</h3>
<ol>
<li><a href="/mailform/produce.php">製作依頼フォーム</a>より作成内容を送って頂き、お見積もりさせて頂きます。</li>
<li>メールにて打ち合わせをして仕様を決めます。</li>
<li>製作開始前に前金として半額を入金して頂きます。</li>
<li>作成後にプログラムの機能を確認して頂きます。</li>
<li>確認頂けたら残金を入金して頂きます。</li>
<li>プログラムをメールにてお渡し致します。</li>
</ol>
<h3>注意事項</h3>
<ul>
<li>プログラムを改造提供する場合でも著作権を放棄する訳ではありません。</li>
<li>作成したプログラムを配布する事はできません。</li>
<li>プログラムにはテンプレートが用意されているので、デザインが変更しやすくなっています。</li>
<li>新規に作成する場合、文字コードの希望がなければUTF-8で作成致します。</li>
<li>納期や金額、製作内容によってはお断りする場合もございます。</li>
</ul>
<p><a href="/mailform/produce.php">製作依頼フォーム</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mt312.com/about-script/6/feed/</wfw:commentRss>
		</item>
		<item>
		<title>正規表現メモ</title>
		<link>http://www.mt312.com/php/46/</link>
		<comments>http://www.mt312.com/php/46/#comments</comments>
		<pubDate>Mon, 01 Oct 2007 13:21:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.mt312.com/php/46/</guid>
		<description><![CDATA[パターン中のメタ文字を纏めてエスケープする
PHP4.3.3以降では、\Q～\Eで囲むとメタ文字を纏めてエスケープできます。
PLAIN TEXT
PHP:




preg_match&#40;'/^\Q(+*%&#38;)\E$/', '(+*%&#38;)'&#41;; 






部分的にオプションを変更する
(?オプション文字)を使うとオプションの設定と解除が可能です。
PLAIN TEXT
PHP:




// 設定


preg_match&#40;'/abc((?i)def)ghi/', 'abcDEFghi', $matches&#41;;


print_r&#40;$matches&#41;;


// Array ( [0] =&#62; abcDEFghi [1] =&#62; DEF )


&#160;


// 解除


preg_match&#40;'/abc((?-i)def)ghi/i', 'ABCdefGHI', $matches&#41;;


print_r&#40;$matches&#41;;


// Array ( [0] =&#62; ABCdefGHI [1] =&#62; def ) 






部分的にキャプチャを避ける
(?:)を使うとサブパターンがキャプチャされなくなります。
PLAIN TEXT
PHP:




preg_match&#40;'/(?:say) (hello)/', 'say hello', $matches&#41;;


print_r&#40;$matches&#41;;


// Array ( [0] =&#62; say hello [1] =&#62; hello ) 






キャプチャにキーを指定する
(?P&#60;キー名&#62;パターン)でキーを指定できます。
PLAIN TEXT
PHP:




preg_match&#40;'/say (?P&#60;key&#62;hello)/', 'say hello', $matches&#41;;


print_r&#40;$matches&#41;;


// Array ( [0] =&#62; [...]]]></description>
			<content:encoded><![CDATA[<h3>パターン中のメタ文字を纏めてエスケープする</h3>
<p>PHP4.3.3以降では、\Q～\Eで囲むとメタ文字を纏めてエスケープできます。</p>
<div class="igBar"><span id="lphp-8"><a href="#" onclick="javascript:showCodeTxt('php-8'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-8">
<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/preg_match"><span style="color:#0000CC;">preg_match</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'/^<span style="color:#990000;">\Q</span>(+*%&amp;)<span style="color:#990000;">\E</span>$/'</span>, <span style="color:#990000;">'(+*%&amp;)'</span><span style="color:#006600;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>部分的にオプションを変更する</h3>
<p>(?オプション文字)を使うとオプションの設定と解除が可能です。</p>
<div class="igBar"><span id="lphp-9"><a href="#" onclick="javascript:showCodeTxt('php-9'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-9">
<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;"><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;">'/abc((?i)def)ghi/'</span>, <span style="color:#990000;">'abcDEFghi'</span>, <span style="color:#0000CC;">$matches</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;"><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;">$matches</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;">// Array ( [0] =&gt; abcDEFghi [1] =&gt; DEF )</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;">// 解除</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/preg_match"><span style="color:#0000CC;">preg_match</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'/abc((?-i)def)ghi/i'</span>, <span style="color:#990000;">'ABCdefGHI'</span>, <span style="color:#0000CC;">$matches</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;">$matches</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; ABCdefGHI [1] =&gt; def ) </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>部分的にキャプチャを避ける</h3>
<p>(?:)を使うとサブパターンがキャプチャされなくなります。</p>
<div class="igBar"><span id="lphp-10"><a href="#" onclick="javascript:showCodeTxt('php-10'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-10">
<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/preg_match"><span style="color:#0000CC;">preg_match</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'/(?:say) (hello)/'</span>, <span style="color:#990000;">'say hello'</span>, <span style="color:#0000CC;">$matches</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;">$matches</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; say hello [1] =&gt; hello ) </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>キャプチャにキーを指定する</h3>
<p>(?P&lt;キー名&gt;パターン)でキーを指定できます。</p>
<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;"><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;">'/say (?P&lt;key&gt;hello)/'</span>, <span style="color:#990000;">'say hello'</span>, <span style="color:#0000CC;">$matches</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;">$matches</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; say hello [key] =&gt; hello [1] =&gt; hello ) </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>先読み言明</h3>
<p>ある文字の直後を限定します。<br />
言明パターンはキャプチャされません。</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:#F27900;">// 肯定: 直後がbarのfoo</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/preg_match"><span style="color:#0000CC;">preg_match</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'/foo(?=bar)/'</span>, <span style="color:#990000;">'foobar'</span>, <span style="color:#0000CC;">$matches</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;"><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;">$matches</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;">// Array ( [0] =&gt; foo )</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;">// 否定: 直後がvaa以外のfoo</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/preg_match"><span style="color:#0000CC;">preg_match</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'/foo(?!vaa)/'</span>, <span style="color:#990000;">'foobar'</span>, <span style="color:#0000CC;">$matches</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;">$matches</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; foo ) </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>戻り読み言明</h3>
<p>ある文字の直前を限定します。<br />
言明パターンはキャプチャされません。</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;">// 肯定: 直前がfooのbar</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/preg_match"><span style="color:#0000CC;">preg_match</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'/(?&lt;=foo)bar/'</span>, <span style="color:#990000;">'foobar'</span>, <span style="color:#0000CC;">$matches</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;"><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;">$matches</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;">// Array ( [0] =&gt; bar )</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;">// 否定: 直前がhoo以外のbar</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/preg_match"><span style="color:#0000CC;">preg_match</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'/(?&lt;!hoo)bar/'</span>, <span style="color:#990000;">'foobar'</span>, <span style="color:#0000CC;">$matches</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;">$matches</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; bar ) </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>繰り返し指定の再試行をキャンセル</h3>
<p>サブパターン中に*、+、{}によって繰り返しが指定されている場合、その続きのマッチングに失敗すると、繰り返し部分の桁が調整され、再度マッチングが行われます。この繰り返しが無駄だと分かっている場合には、再試行無しのサブパターン(?>)を使ってキャンセルできます。<br />
このパターンもキャプチャされません。</p>
<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:#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;"><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;">'/(<span style="color:#990000;">\d</span>+)bar/'</span>, <span style="color:#990000;">'0123456789foo'</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;">// 再試行なし</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/preg_match"><span style="color:#0000CC;">preg_match</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'/(?&gt;<span style="color:#990000;">\d</span>+)bar/'</span>, <span style="color:#990000;">'0123456789foo'</span><span style="color:#006600;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>参考文献</h3>
<p><a href="http://jp.php.net/manual/ja/reference.pcre.pattern.syntax.php">PHPパターン構文</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mt312.com/php/46/feed/</wfw:commentRss>
		</item>
		<item>
		<title>携帯端末番号（個体識別番号）判別</title>
		<link>http://www.mt312.com/php/45/</link>
		<comments>http://www.mt312.com/php/45/#comments</comments>
		<pubDate>Fri, 21 Sep 2007 18:06:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.mt312.com/php/45/</guid>
		<description><![CDATA[携帯の端末番号の取得方法を紹介します。こういった携帯にまつわる問題は各社仕様がバラバラで面倒です。とにかく簡単に済ませたいもんです。
方法
DoCoMoとSoftBankはユーザーエージェントに番号が含まれますので、これを解析すればすぐにわかります。AUはユーザーエージェントには含まれず$_SERVER['HTTP_X_UP_SUBNO'];に格納されています。この特殊な変数があれば、ほぼ端末番号であると分かる訳ですが、ログとして保存したい場合には個別に保存項目が必要になりやっかいです。そこで前の番号部分を抜いてユーザーエージェントに連結させます。これで大手三社の番号をユーザーエージェントだけで確認できます。
DoCoMo

// MOVA
DoCoMo/1.0/X503i/c10/ser12345678901
serの後に11桁英数字

// FOMA
DoCoMo/2.0 N2001(c10;ser12345678901;
icc12345678901234567890)
serの後に15桁英数字
iccの後に20桁英数字
改行が含まれます。

PLAIN TEXT
PHP:




// ser以降で判別


$agent = $_SERVER&#91;'HTTP_USER_AGENT'&#93;;


$hasSubno = preg_match&#40;'/ser[0-9A-Za-z]{11,15}/', $agent&#41;; 






SoftBank

// Vodafone
Vodafone/1.0/V802SH/SHJ002/SN123456789012345 Browser/UP.Browser/7.0.2.1 Profile/
MIDP-2.0 Configuration/CLDC-1.1 Ext-J-Pr

// SoftBank
SoftBank/1.0/705P/PJP10/SN123456789012345 Browser/Teleca-Browser/3.1 Profile/
MIDP-2.0 Configuration/CLDC-1.1

いずれも/SNの後に15桁英数字

PLAIN TEXT
PHP:




// /SN以降で判別


$agent = $_SERVER&#91;'HTTP_USER_AGENT'&#93;;


$hasSubno = preg_match&#40;'/\/SN[0-9A-Za-z]{15}/', $agent&#41;; 






AU
AUの場合だけ先にユーザーエージェントに番号を付けます。
PLAIN TEXT
PHP:




// 05051234567890_ae.ezweb.ne.jp


// 4桁地域コードと10桁端末コード


$subno = $_SERVER&#91;'HTTP_X_UP_SUBNO'&#93;;


// KDDI-CA23 UP.Browser/5.1 (GUI) MMP/2.0/SUB05051234567890_ae


$_SERVER&#91;'HTTP_USER_AGENT'&#93; .= '/SUB'.substr&#40;$subno, 0, -12&#41;; 






PLAIN TEXT
PHP:




// 連結した末尾で判別


$agent = $_SERVER&#91;'HTTP_USER_AGENT'&#93;;


$hasSubno = preg_match&#40;'/\/SUB0\d0\d\d{10}_[a-z\d]{2}$/', $agent&#41;; 






まとめ
これで端末番号を送信しているかどうかユーザーエージェントだけで判断できるし、特定の端末番号を拒否する事もできます。今回は省略しましたが、以前の携帯判別のコードと合わせれば便利に書けるかもしれません。
ユーザーエージェント携帯判別
注意
これらの環境変数($_SERVER)は信用してはいけません。保存したり、ページへ出力させる場合にはどんな文字が入っていても問題ない様にしましょう。
]]></description>
			<content:encoded><![CDATA[<p>携帯の端末番号の取得方法を紹介します。こういった携帯にまつわる問題は各社仕様がバラバラで面倒です。とにかく簡単に済ませたいもんです。</p>
<h3>方法</h3>
<p>DoCoMoとSoftBankはユーザーエージェントに番号が含まれますので、これを解析すればすぐにわかります。AUはユーザーエージェントには含まれず$_SERVER['HTTP_X_UP_SUBNO'];に格納されています。この特殊な変数があれば、ほぼ端末番号であると分かる訳ですが、ログとして保存したい場合には個別に保存項目が必要になりやっかいです。そこで前の番号部分を抜いてユーザーエージェントに連結させます。これで大手三社の番号をユーザーエージェントだけで確認できます。</p>
<h3>DoCoMo</h3>
<pre>
// MOVA
DoCoMo/1.0/X503i/c10/ser12345678901
serの後に11桁英数字

// FOMA
DoCoMo/2.0 N2001(c10;ser12345678901;
icc12345678901234567890)
serの後に15桁英数字
iccの後に20桁英数字
改行が含まれます。
</pre>
<div class="igBar"><span id="lphp-19"><a href="#" onclick="javascript:showCodeTxt('php-19'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-19">
<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;">// ser以降で判別</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;">$agent</span> = <span style="color:#0000CC;">$_SERVER</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_USER_AGENT'</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:#0000CC;">$hasSubno</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;">'/ser[0-9A-Za-z]{11,15}/'</span>, <span style="color:#0000CC;">$agent</span><span style="color:#006600;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>SoftBank</h3>
<pre>
// Vodafone
Vodafone/1.0/V802SH/SHJ002/SN123456789012345 Browser/UP.Browser/7.0.2.1 Profile/
MIDP-2.0 Configuration/CLDC-1.1 Ext-J-Pr

// SoftBank
SoftBank/1.0/705P/PJP10/SN123456789012345 Browser/Teleca-Browser/3.1 Profile/
MIDP-2.0 Configuration/CLDC-1.1

いずれも/SNの後に15桁英数字
</pre>
<div class="igBar"><span id="lphp-20"><a href="#" onclick="javascript:showCodeTxt('php-20'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-20">
<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;">// /SN以降で判別</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;">$agent</span> = <span style="color:#0000CC;">$_SERVER</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_USER_AGENT'</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:#0000CC;">$hasSubno</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;">'/<span style="color:#990000;">\/</span>SN[0-9A-Za-z]{15}/'</span>, <span style="color:#0000CC;">$agent</span><span style="color:#006600;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>AU</h3>
<p>AUの場合だけ先にユーザーエージェントに番号を付けます。</p>
<div class="igBar"><span id="lphp-21"><a href="#" onclick="javascript:showCodeTxt('php-21'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-21">
<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;">// 05051234567890_ae.ezweb.ne.jp</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;">// 4桁地域コードと10桁端末コード</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;">$subno</span> = <span style="color:#0000CC;">$_SERVER</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_X_UP_SUBNO'</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:#F27900;">// KDDI-CA23 UP.Browser/5.1 (GUI) MMP/2.0/SUB05051234567890_ae</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;">$_SERVER</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_USER_AGENT'</span><span style="color:#006600;">&#93;</span> .= <span style="color:#990000;">'/SUB'</span>.<a href="http://www.php.net/substr"><span style="color:#0000CC;">substr</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$subno</span>, <span style="color:#CC66CC;color:#800000;">0</span>, -<span style="color:#CC66CC;color:#800000;">12</span><span style="color:#006600;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<div class="igBar"><span id="lphp-22"><a href="#" onclick="javascript:showCodeTxt('php-22'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-22">
<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;">$agent</span> = <span style="color:#0000CC;">$_SERVER</span><span style="color:#006600;">&#91;</span><span style="color:#990000;">'HTTP_USER_AGENT'</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:#0000CC;">$hasSubno</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;">'/<span style="color:#990000;">\/</span>SUB0<span style="color:#990000;">\d</span>0<span style="color:#990000;">\d</span><span style="color:#990000;">\d</span>{10}_[a-z<span style="color:#990000;">\d</span>]{2}$/'</span>, <span style="color:#0000CC;">$agent</span><span style="color:#006600;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>まとめ</h3>
<p>これで端末番号を送信しているかどうかユーザーエージェントだけで判断できるし、特定の端末番号を拒否する事もできます。今回は省略しましたが、以前の携帯判別のコードと合わせれば便利に書けるかもしれません。<br />
<a href="http://www.mt312.com/php/33/">ユーザーエージェント携帯判別</a></p>
<h3>注意</h3>
<p>これらの環境変数($_SERVER)は信用してはいけません。保存したり、ページへ出力させる場合にはどんな文字が入っていても問題ない様にしましょう。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mt312.com/php/45/feed/</wfw:commentRss>
		</item>
		<item>
		<title>$fpが権限を握るflockによるファイルロック</title>
		<link>http://www.mt312.com/php/44/</link>
		<comments>http://www.mt312.com/php/44/#comments</comments>
		<pubDate>Wed, 19 Sep 2007 19:15:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.mt312.com/php/44/</guid>
		<description><![CDATA[果たして、この記事が役に立つか疑問ですが、私の様にポカをする人がいないとも限りませんし、忘備録的に書いてみます。
先日カウンターのログが頻繁に壊れると指摘があり、原因が分からず2日程考えていた時、ふと疑問が。テストしてみると、全くロックできていない。実はこう書いていました。
PLAIN TEXT
PHP:




function lock&#40;&#41; &#123;


&#160; $fp = fopen&#40;'./lock', 'w'&#41;;


&#160; return $fp &#38;&#38; flock&#40;$fp, LOCK_EX&#41;;


&#125;


if&#40;!lock&#40;&#41;&#41; &#123;


&#160; // ロック失敗で終了


&#125;


// ログ保存


$fp = fopen&#40;LOG_FILE, 'wb'&#41;;


fwrite&#40;$fp, $lines&#41;;


fclose&#40;$fp&#41;; 






自分では正しいと思っていたんですけど、実はlock()はtrueしか返さず、後にロックが外れます。どうなっているかと言うと、lcok()と同時にロックされ真が返りますが、$fpがローカル変数で既に用済みな為、ロックが外れてしまうのです。flockによるファイルロックは$fpが生きている必要があります。つまり、以下でもロックが外れます。
PLAIN TEXT
PHP:




$fp = fopen&#40;'./lock', 'w'&#41;;


flock&#40;$fp, LOCK_EX&#41;;


unset&#40;$fp&#41;; 






よって、こう書いて解決。
関数にしなきゃいいだけの話。
PLAIN TEXT
PHP:




// ファイル生成可能で空にするコストがないaを指定


$l_fp = fopen&#40;'./lock', 'a+'&#41;;


$locked = $l_fp &#38;&#38; flock&#40;$l_fp, LOCK_EX&#41;;


if&#40;!$locked&#41; &#123;


&#160; // ロック失敗で終了


&#125;


// ログ保存


$fp = fopen&#40;LOG_FILE, 'wb'&#41;;


fwrite&#40;$fp, $lines&#41;;


fclose&#40;$fp&#41;; 






上の例と違い、ログファイルを追記モードで扱う場合はロックファイルを用意する必要はありません。また、追記モードで書込モードの様に空にしてから書き込む事もできます。
PLAIN TEXT
PHP:




// ファイルがなければ生成


$fp = fopen&#40;LOG_FILE, 'a+b'&#41;;


// ロックしてファイルを空にする


$prepared = $fp [...]]]></description>
			<content:encoded><![CDATA[<p>果たして、この記事が役に立つか疑問ですが、私の様にポカをする人がいないとも限りませんし、忘備録的に書いてみます。</p>
<p>先日カウンターのログが頻繁に壊れると指摘があり、原因が分からず2日程考えていた時、ふと疑問が。テストしてみると、全くロックできていない。実はこう書いていました。</p>
<div class="igBar"><span id="lphp-27"><a href="#" onclick="javascript:showCodeTxt('php-27'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-27">
<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;">function</span> lock<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; <span style="color:#0000CC;">$fp</span> = <a href="http://www.php.net/fopen"><span style="color:#0000CC;">fopen</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'./lock'</span>, <span style="color:#990000;">'w'</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; <span style="color:#008000;">return</span> <span style="color:#0000CC;">$fp</span> &amp;&amp; <a href="http://www.php.net/flock"><span style="color:#0000CC;">flock</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$fp</span>, LOCK_EX<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;">&#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:#008000;">if</span><span style="color:#006600;">&#40;</span>!lock<span style="color:#006600;">&#40;</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; <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;"><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:#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;"><span style="color:#0000CC;">$fp</span> = <a href="http://www.php.net/fopen"><span style="color:#0000CC;">fopen</span></a><span style="color:#006600;">&#40;</span>LOG_FILE, <span style="color:#990000;">'wb'</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/fwrite"><span style="color:#0000CC;">fwrite</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$fp</span>, <span style="color:#0000CC;">$lines</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;"><a href="http://www.php.net/fclose"><span style="color:#0000CC;">fclose</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$fp</span><span style="color:#006600;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
自分では正しいと思っていたんですけど、実はlock()はtrueしか返さず、後にロックが外れます。どうなっているかと言うと、lcok()と同時にロックされ真が返りますが、$fpがローカル変数で既に用済みな為、ロックが外れてしまうのです。flockによるファイルロックは$fpが生きている必要があります。つまり、以下でもロックが外れます。</p>
<div class="igBar"><span id="lphp-28"><a href="#" onclick="javascript:showCodeTxt('php-28'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-28">
<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;">$fp</span> = <a href="http://www.php.net/fopen"><span style="color:#0000CC;">fopen</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'./lock'</span>, <span style="color:#990000;">'w'</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/flock"><span style="color:#0000CC;">flock</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$fp</span>, LOCK_EX<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;"><a href="http://www.php.net/unset"><span style="color:#0000CC;">unset</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$fp</span><span style="color:#006600;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
よって、こう書いて解決。<br />
関数にしなきゃいいだけの話。</p>
<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:#F27900;">// ファイル生成可能で空にするコストがない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:#0000CC;">$l_fp</span> = <a href="http://www.php.net/fopen"><span style="color:#0000CC;">fopen</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'./lock'</span>, <span style="color:#990000;">'a+'</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;">$locked</span> = <span style="color:#0000CC;">$l_fp</span> &amp;&amp; <a href="http://www.php.net/flock"><span style="color:#0000CC;">flock</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$l_fp</span>, LOCK_EX<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>!<span style="color:#0000CC;">$locked</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; <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:#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:#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;">$fp</span> = <a href="http://www.php.net/fopen"><span style="color:#0000CC;">fopen</span></a><span style="color:#006600;">&#40;</span>LOG_FILE, <span style="color:#990000;">'wb'</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;"><a href="http://www.php.net/fwrite"><span style="color:#0000CC;">fwrite</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$fp</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;"><a href="http://www.php.net/fclose"><span style="color:#0000CC;">fclose</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$fp</span><span style="color:#006600;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
上の例と違い、ログファイルを追記モードで扱う場合はロックファイルを用意する必要はありません。また、追記モードで書込モードの様に空にしてから書き込む事もできます。</p>
<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:#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;">$fp</span> = <a href="http://www.php.net/fopen"><span style="color:#0000CC;">fopen</span></a><span style="color:#006600;">&#40;</span>LOG_FILE, <span style="color:#990000;">'a+b'</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;">// ロックしてファイルを空にする</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;">$prepared</span> = <span style="color:#0000CC;">$fp</span> &amp;&amp; <a href="http://www.php.net/flock"><span style="color:#0000CC;">flock</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$fp</span>, LOCK_EX<span style="color:#006600;">&#41;</span> &amp;&amp; <a href="http://www.php.net/ftruncate"><span style="color:#0000CC;">ftruncate</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$fp</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:#008000;">if</span><span style="color:#006600;">&#40;</span>!<span style="color:#0000CC;">$prepared</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; <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;"><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;"><a href="http://www.php.net/fwrite"><span style="color:#0000CC;">fwrite</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$fp</span>, <span style="color:#0000CC;">$lines</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;"><a href="http://www.php.net/fclose"><span style="color:#0000CC;">fclose</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000CC;">$fp</span><span style="color:#006600;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
この場合、fclose($fp);する前にflock($fp, LOCK_UN);でロックを解除すると閉じる前に他の書き込みが割り込む可能性があり、好ましくありません。ロックはfclose()で解除されますし、fclose()は記述がなければスクリプト終了時にコールされます。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mt312.com/php/44/feed/</wfw:commentRss>
		</item>
		<item>
		<title>DoCoMo絵文字データ保存方法</title>
		<link>http://www.mt312.com/php/43/</link>
		<comments>http://www.mt312.com/php/43/#comments</comments>
		<pubDate>Fri, 10 Aug 2007 04:00:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.mt312.com/php/43/</guid>
		<description><![CDATA[携帯から入力された絵文字の判定を簡単に行う方法があるようです。mb_substitute_character();を使って存在しない文字コードを炙り出します。
携帯端末からの投稿を保存
PLAIN TEXT
PHP:




// 出力文字エンコーディングに文字コードが存在しない場合の代替文字を指定


mb_substitute_character&#40;'long'&#41;;


&#160;


// 太陽絵文字入り文字列


$str = '今日も暑いですね・';


// 強制的に絵文字部分がBAD+16進コードに変換される


$str = mb_convert_encoding&#40;$str, mb_internal_encoding&#40;&#41;&#41;;


// 絵文字を[d:絵文字コード]に変換して保存


$str = preg_replace&#40;'/BAD\+(F[89][0-F]{2})/', '[d:$1]', $str&#41;; 






こうしておけば[d:～]を探して変換すれば、PCには絵文字画像、携帯には直接絵文字を表示させる事ができる。記事の修正が必要になっても絵文字を意識しなくて済みます。
保存ログを携帯端末へ出力
PLAIN TEXT
PHP:




$str = '今日も暑いですね[d:F8A0]';


$str = preg_replace&#40;'/\[d:(F[89][0-F]{2})\]/e', "pack('H*', $1)", $str&#41;;


print $str; 






まとめ
BAD+からF3、F4、F6、F7で始まる文字列を調査すれはAU絵文字も判別可能らしい。めちゃくちゃ楽だな、これ。
参考文献
絵文字の抽出をPHPで最も簡単にする方法 ぎじゅっやさん
]]></description>
			<content:encoded><![CDATA[<p>携帯から入力された絵文字の判定を簡単に行う方法があるようです。mb_substitute_character();を使って存在しない文字コードを炙り出します。</p>
<h3>携帯端末からの投稿を保存</h3>
<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;">// 出力文字エンコーディングに文字コードが存在しない場合の代替文字を指定</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/mb_substitute_character"><span style="color:#0000CC;">mb_substitute_character</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'long'</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;">// 太陽絵文字入り文字列</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;">'今日も暑いですね・'</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;">// 強制的に絵文字部分がBAD+16進コードに変換される</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> = <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;">$str</span>, <a href="http://www.php.net/mb_internal_encoding"><span style="color:#0000CC;">mb_internal_encoding</span></a><span style="color:#006600;">&#40;</span><span style="color:#006600;">&#41;</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;">// 絵文字を[d:絵文字コード]に変換して保存</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> = <a href="http://www.php.net/preg_replace"><span style="color:#0000CC;">preg_replace</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'/BAD<span style="color:#990000;">\+</span>(F[89][0-F]{2})/'</span>, <span style="color:#990000;">'[d:$1]'</span>, <span style="color:#0000CC;">$str</span><span style="color:#006600;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>こうしておけば[d:～]を探して変換すれば、PCには絵文字画像、携帯には直接絵文字を表示させる事ができる。記事の修正が必要になっても絵文字を意識しなくて済みます。</p>
<h3>保存ログを携帯端末へ出力</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:#0000CC;">$str</span> = <span style="color:#990000;">'今日も暑いですね[d:F8A0]'</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> = <a href="http://www.php.net/preg_replace"><span style="color:#0000CC;">preg_replace</span></a><span style="color:#006600;">&#40;</span><span style="color:#990000;">'/<span style="color:#990000;">\[</span>d:(F[89][0-F]{2})<span style="color:#990000;">\]</span>/e'</span>, <span style="color:#990000;">"pack('H*', $1)"</span>, <span style="color:#0000CC;">$str</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;"><a href="http://www.php.net/print"><span style="color:#0000CC;">print</span></a> <span style="color:#0000CC;">$str</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>まとめ</h3>
<p>BAD+からF3、F4、F6、F7で始まる文字列を調査すれはAU絵文字も判別可能らしい。めちゃくちゃ楽だな、これ。</p>
<h3>参考文献</h3>
<p><a href="http://hain.jp/index.php/tech-j/2006/09/11/%E6%90%BA%E5%B8%AF%E7%B5%B5%E6%96%87%E5%AD%97">絵文字の抽出をPHPで最も簡単にする方法 ぎじゅっやさん</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mt312.com/php/43/feed/</wfw:commentRss>
		</item>
		<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-36"><a href="#" onclick="javascript:showCodeTxt('html-36'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">HTML:</span>
<div id="html-36">
<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-45"><a href="#" onclick="javascript:showCodeTxt('php-45'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-45">
<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-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:#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-47"><a href="#" onclick="javascript:showCodeTxt('php-47'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-47">
<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-48"><a href="#" onclick="javascript:showCodeTxt('php-48'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-48">
<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-49"><a href="#" onclick="javascript:showCodeTxt('php-49'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-49">
<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-50"><a href="#" onclick="javascript:showCodeTxt('php-50'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-50">
<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-51"><a href="#" onclick="javascript:showCodeTxt('php-51'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-51">
<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-52"><a href="#" onclick="javascript:showCodeTxt('php-52'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-52">
<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-62"><a href="#" onclick="javascript:showCodeTxt('html-62'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">HTML:</span>
<div id="html-62">
<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-63"><a href="#" onclick="javascript:showCodeTxt('php-63'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-63">
<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-64"><a href="#" onclick="javascript:showCodeTxt('php-64'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-64">
<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-65"><a href="#" onclick="javascript:showCodeTxt('php-65'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-65">
<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-66"><a href="#" onclick="javascript:showCodeTxt('php-66'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-66">
<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-67"><a href="#" onclick="javascript:showCodeTxt('php-67'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-67">
<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-68"><a href="#" onclick="javascript:showCodeTxt('php-68'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-68">
<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-69"><a href="#" onclick="javascript:showCodeTxt('php-69'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-69">
<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-70"><a href="#" onclick="javascript:showCodeTxt('php-70'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-70">
<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