<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;A0QDQnY8fyp7ImA9WhRRFE4.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603</id><updated>2011-11-28T09:16:13.877+09:00</updated><category term="メモリ" /><category term="wiki_encode" /><category term="SpiderMonkey" /><category term="SQL" /><category term="ECMA" /><category term="文字" /><category term="どうしたらいいんだろ" /><category term="PDO" /><category term="array_pop" /><category term="公開" /><category term="String" /><category term="SQLite" /><category term="Windows" /><category term="gz" /><category term="encodeURI" /><category term="開発" /><category term="htdocs" /><category term="PHP4" /><category term="lastIndexOf" /><category term="ロック" /><category term="など" /><category term="test" /><category term="xampp" /><category term="standAlone" /><category term="posql" /><category term="file_line_util" /><category term="SELECT" /><category term="js" /><category term="なりました" /><category term="解凍" /><category term="しよう" /><category term="EUC" /><category term="unescape" /><category term="使用例" /><category term="Page" /><category term="関数" /><category term="高速化" /><category term="FireFox" /><category term="CakePHP" /><category term="POST" /><category term="encodeURIComponent" /><category term="array_shift" /><category term="メモリコスト" /><category term="バグフィックス" /><category term="そこで" /><category term="lock" /><category term="段階" /><category term="してみました" /><category term="sourceforge" /><category term="Opera" /><category term="EXISTS" /><category term="getPager" /><category term="mkdir" /><category term="じゃないけど" /><category term="かかっていました" /><category term="PEAR" /><category term="英語版" /><category term="DBO" /><category term="escape" /><category term="Posql_Pager" /><category term="プロファイラ" /><category term="わかってます" /><category term="あわせて" /><category term="サブクエリ" /><category term="JavaScript" /><category term="JP" /><category term="DBMS" /><category term="MDB2" /><category term="OS" /><category term="そんな" /><category term="みなして" /><category term="AlphamericHTML" /><category term="extract" /><category term="セッション" /><category term="SJIS" /><category term="Posql_Archive" /><category term="互換実装" /><category term="排他処理" /><category term="GoogleAdWords" /><category term="ストレス" /><category term="なる" /><category term="flock" /><category term="しようかな" /><category term="Posql_ECMA" /><category term="BY" /><category term="Version" /><category term="アルゴリズム" /><category term="for" /><category term="Chrome" /><category term="取得" /><category term="きます" /><category term="クエリーキャッシュ" /><category term="PHPDoc" /><category term="GROUP" /><category term="csv" /><category term="hoge" /><category term="圧縮" /><category term="ベンチマーク" /><category term="debug" /><category term="あまり" /><category term="拡張" /><category term="decodeURIComponent" /><category term="安定版" /><category term="開発中" /><category term="って" /><category term="先週" /><category term="原因" /><category term="わかります" /><category term="WordPress" /><category term="ならないよ" /><category term="Project" /><category term="decodeURI" /><category term="ページャー" /><category term="API" /><category term="tar" /><category term="実装" /><category term="PHP" /><category term="きた" /><category term="stack" /><category term="簡単" /><category term="なっていて" /><category term="なって" /><category term="更新" /><category term="感想" /><category term="なん" /><category term="ピュアPHP" /><category term="IE" /><category term="すが" /><category term="PHP5" /><category term="くれる" /><category term="zip" /><title>Posql開発ブログ</title><subtitle type="html">ピュアPHPのライブラリ系DBMS「&lt;a href="http://sourceforge.jp/projects/posql/" title="Posql Project Page"&gt;Posql&lt;/a&gt;」の開発記録をだらだらと残すつもり</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://polygon-blog.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Posql" /><feedburner:info uri="posql" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DUQMSX45eCp7ImA9Wx5WFUU.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-7144540304385194770</id><published>2010-09-27T20:36:00.000+09:00</published><updated>2010-09-27T20:36:28.020+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-27T20:36:28.020+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GoogleAdWords" /><title>Google AdWords 無料お試し券 使い切った</title><content type="html">Google AdWords 無料お試し券、&lt;br /&gt;
使い切ったので停止しました。&lt;br /&gt;
&lt;br /&gt;
まだ少し残高残ってたけど、&lt;br /&gt;
停止してから 1時間はかかるらしいから早めにきりあげた。&lt;br /&gt;
&lt;br /&gt;
なんとなく気になるのは、&lt;br /&gt;
本当に停止したの？って思ってしまうこと。&lt;br /&gt;
&lt;br /&gt;
停止(キャンセル)の方法は、&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://the-fool.me/web/webtool/adwords-coupon-3.html"&gt;アドワーズの無料お試し券を使いきったので停止、果たして効果は？&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://the-fool.me/web/webtool/adwords-coupon-3.html"&gt;&lt;/a&gt;↑でわかりやすく解説されてます。&lt;br /&gt;
&lt;br /&gt;
結果だけど、&lt;br /&gt;
クリック率がものすごい低かった。 &lt;br /&gt;
&lt;br /&gt;
反省点:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;日本語で作ったのに「すべての地域(世界中)」で表示させてた(数日経って気付いて直した)。&lt;/li&gt;
&lt;li&gt;日本語で作ったのに「すべての言語(世界中)」で表示させてた(同上)。&lt;/li&gt;
&lt;li&gt;広告の文言が下手だった。&lt;/li&gt;
&lt;li&gt;ドメインとってからにしたかった。 &lt;/li&gt;
&lt;/ul&gt;なんというか、いろいろと学びました。&lt;br /&gt;
広告って難しいなぁ。&lt;br /&gt;
&lt;br /&gt;
注意点としては、&lt;br /&gt;
一度広告を作ると文言の変更は作り直しと同じようなものってことと、&lt;br /&gt;
たとえ無料券でも自動的に終わらないから(一応終了日の設定は可能)&lt;br /&gt;
特に個人が利用する場合は、まめに残高チェックしたほうがいい。&lt;br /&gt;
&lt;br /&gt;
気を抜くことができない数日でした。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
あんまりクリックされてないけど、&lt;br /&gt;
Posql 使ってくれる人 増えたら嬉しいです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-7144540304385194770?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9e_PS74l2nj2JaCcixKJC61APZQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9e_PS74l2nj2JaCcixKJC61APZQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9e_PS74l2nj2JaCcixKJC61APZQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9e_PS74l2nj2JaCcixKJC61APZQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/AskoAs6VOck" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/7144540304385194770/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/09/google-adwords_27.html#comment-form" title="5 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/7144540304385194770?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/7144540304385194770?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/AskoAs6VOck/google-adwords_27.html" title="Google AdWords 無料お試し券 使い切った" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/09/google-adwords_27.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cNRXo-fyp7ImA9Wx5WEk8.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-7312986328682214006</id><published>2010-09-23T14:51:00.000+09:00</published><updated>2010-09-23T14:51:34.457+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-23T14:51:34.457+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="開発中" /><category scheme="http://www.blogger.com/atom/ns#" term="posql" /><category scheme="http://www.blogger.com/atom/ns#" term="WordPress" /><title>次バージョン開発中</title><content type="html">半年ほど開発止まっちゃってたけど、&lt;br /&gt;
現在 Version 2.18 に向けて開発中です。&lt;br /&gt;
&lt;br /&gt;
Version 2.17 で かなり安定してたけど、&lt;br /&gt;
いくつかバグ報告もあって自分でもバグ見つけたりして&lt;br /&gt;
修正とかやってます。&lt;br /&gt;
&lt;br /&gt;
あとコメントいただいた WordPress の件もどうにかしたい。&lt;br /&gt;
&lt;br /&gt;
バグに限らず、要望とか「こういう機能あったらいい」とかあったら&lt;br /&gt;
どんどんコメントください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-7312986328682214006?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xJr3FmJFnuw5b5VM1jcxxTtS6tQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xJr3FmJFnuw5b5VM1jcxxTtS6tQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xJr3FmJFnuw5b5VM1jcxxTtS6tQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xJr3FmJFnuw5b5VM1jcxxTtS6tQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/GImB-lJ5ay8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/7312986328682214006/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/09/blog-post.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/7312986328682214006?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/7312986328682214006?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/GImB-lJ5ay8/blog-post.html" title="次バージョン開発中" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/09/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQCQnc4eSp7ImA9Wx5WEk8.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-6702430784566896845</id><published>2010-09-23T14:39:00.000+09:00</published><updated>2010-09-23T14:39:23.931+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-23T14:39:23.931+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GoogleAdWords" /><category scheme="http://www.blogger.com/atom/ns#" term="posql" /><title>Google AdWords 無料お試し券 試してみた</title><content type="html">Googleからアドワーズの「無料お試し券」5000円分。&lt;br /&gt;
届いてたの忘れてて、&lt;br /&gt;
今月30日までなのでせっかくだから試してみた(お試し中)。&lt;br /&gt;
&lt;br /&gt;
設定とか注意点がいくつかあるけど、&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://the-fool.me/web/webtool/adwords-coupon.html"&gt;Googleからアドワーズ「無料お試し券」が届いたので試してみる&lt;/a&gt;&lt;br /&gt;
↑を参考にさせていただきました。&lt;br /&gt;
&lt;br /&gt;
せっかくだから Posql 用の広告にしてみました。&lt;br /&gt;
&lt;br /&gt;
まだ半日くらいしかたってないけど、&lt;br /&gt;
なぜかステータスが「審査待ち」から変わらない…。&lt;br /&gt;
調べたら時間がかかるみたいだけど&lt;br /&gt;
無料分が5日分くらいしかないからなぁ。&lt;br /&gt;
&lt;br /&gt;
でも掲載されてるらしいから&lt;br /&gt;
これを機に Posql 使ってくれる人が増えたらいいな。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-6702430784566896845?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4f9PV6c298XTByfty3cnF7s70Rk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4f9PV6c298XTByfty3cnF7s70Rk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4f9PV6c298XTByfty3cnF7s70Rk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4f9PV6c298XTByfty3cnF7s70Rk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/6P72H4VN_BQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/6702430784566896845/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/09/google-adwords.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/6702430784566896845?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/6702430784566896845?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/6P72H4VN_BQ/google-adwords.html" title="Google AdWords 無料お試し券 試してみた" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/09/google-adwords.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EFQHc7cSp7ImA9WxFRF0o.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-295402557018076253</id><published>2010-04-03T04:18:00.004+09:00</published><updated>2010-05-02T12:40:11.909+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T12:40:11.909+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="encodeURIComponent" /><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><category scheme="http://www.blogger.com/atom/ns#" term="IE" /><category scheme="http://www.blogger.com/atom/ns#" term="unescape" /><category scheme="http://www.blogger.com/atom/ns#" term="encodeURI" /><category scheme="http://www.blogger.com/atom/ns#" term="JP" /><category scheme="http://www.blogger.com/atom/ns#" term="SJIS" /><category scheme="http://www.blogger.com/atom/ns#" term="Chrome" /><category scheme="http://www.blogger.com/atom/ns#" term="EUC" /><category scheme="http://www.blogger.com/atom/ns#" term="なっていて" /><category scheme="http://www.blogger.com/atom/ns#" term="posql" /><category scheme="http://www.blogger.com/atom/ns#" term="decodeURI" /><category scheme="http://www.blogger.com/atom/ns#" term="Opera" /><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="js" /><category scheme="http://www.blogger.com/atom/ns#" term="escape" /><category scheme="http://www.blogger.com/atom/ns#" term="decodeURIComponent" /><category scheme="http://www.blogger.com/atom/ns#" term="FireFox" /><category scheme="http://www.blogger.com/atom/ns#" term="なりました" /><title>PHPでJavaScriptのescape/unescape,encodeURI/decodeURI,encodeURIComponent/decodeURIComponentを実装してみたよ</title><content type="html">結局、実装したものはクラスにまとめて Posql ライブラリ内に収めました。&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;escape/unescape&lt;/li&gt;
&lt;li&gt;encodeURI/decodeURI&lt;/li&gt;
&lt;li&gt;encodeURIComponent/decodeURIComponent&lt;/li&gt;
&lt;/ul&gt;それぞれの使い方の詳細は、&lt;br /&gt;
&lt;a href="http://feel.happy.nu/doc/posql/posql.api.manual.html#ecma_escape"&gt;Posql API リファレンス#escape&lt;/a&gt; あたりを参照ください。&lt;br /&gt;
&lt;br /&gt;
互換がとれているかサンプル書いてみました。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="php" name="code" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: #333333; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; margin: 4px; padding: 4px;"&gt;&amp;lt;?php
error_reporting(E_ALL);

// 文字コードを設定
$charset = 'UTF-8';

if (extension_loaded('mbstring')) {
  mb_internal_encoding($charset);
}
if (extension_loaded('iconv')) {
  iconv_set_encoding('internal_encoding', $charset);
}
@ini_set('default_charset', $charset);
header('Content-Type: text/html; charset:' . $charset);

$posql = new Posql;

// Posql の内部文字コードを設定
$posql-&amp;gt;setCharset($charset);

// 対象の文字列
$string = '~@()*&amp;amp;=%$_あいうえお～表示漢字';

?&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta http-equiv="content-type" content="text/html; charset=&amp;lt;?php
 echo $charset ?&amp;gt;"&amp;gt;
&amp;lt;title&amp;gt;Posql - with JavaScript encode/decode functions Test&amp;lt;/title&amp;gt;
&amp;lt;style&amp;gt;
dt {font-weight: bold}
&amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;h1&amp;gt;Posql - with JavaScript encode/decode functions Test&amp;lt;/h1&amp;gt;
&amp;lt;p&amp;gt;charset=&amp;lt;?php echo $charset ?&amp;gt;

&amp;lt;script type="text/javascript"&amp;gt;

function echo(s){
  document.write(s);
}

// 対象の文字列
var string = "&amp;lt;?php echo $string ?&amp;gt;";

// PHP と JavaScript の実行結果
var results = {
  // JavaScript でエンコード
  js: {
    escape: escape(string),
    encodeURI: encodeURI(string),
    encodeURIComponent: encodeURIComponent(string)
  },
  // Posqlの各メソッドを使ってエンコード
  php: {
    escape: "&amp;lt;?php
      echo $posql-&amp;gt;ecma-&amp;gt;escape($string) ?&amp;gt;",
    encodeURI: "&amp;lt;?php
      echo $posql-&amp;gt;ecma-&amp;gt;encodeURI($string) ?&amp;gt;",
    encodeURIComponent: "&amp;lt;?php
      echo $posql-&amp;gt;ecma-&amp;gt;encodeURIComponent($string) ?&amp;gt;"
  }
}

// PHP でエンコードしたものを JavaScript でデコード
var php2js = {
  unescape: unescape(results.php.escape),
  decodeURI: decodeURI(results.php.encodeURI),
  decodeURIComponent: decodeURIComponent(results.php.encodeURIComponent)
}

echo("&amp;lt;dl&amp;gt;");

// escape
echo("&amp;lt;div&amp;gt;&amp;lt;hr /&amp;gt;&amp;lt;/div&amp;gt;");
echo("&amp;lt;dt&amp;gt;[JavaScript]escape&amp;lt;/dt&amp;gt;");
echo("&amp;lt;dd&amp;gt;" + results.js.escape + "&amp;lt;/dd&amp;gt;");
echo("&amp;lt;dt&amp;gt;[PHP]escape&amp;lt;/dt&amp;gt;");
echo("&amp;lt;dd&amp;gt;" + results.php.escape + "&amp;lt;/dd&amp;gt;");
echo("&amp;lt;dt&amp;gt;[Compare] js === php &amp;lt;/dt&amp;gt;");
echo("&amp;lt;dd&amp;gt;" + (results.js.escape === results.php.escape) + "&amp;lt;/dd&amp;gt;");
echo("&amp;lt;dt&amp;gt;unescape&amp;lt;/dt&amp;gt;");
echo("&amp;lt;dd&amp;gt;" + php2js.unescape + "&amp;lt;/dd&amp;gt;");

// encodeURI
echo("&amp;lt;div&amp;gt;&amp;lt;hr /&amp;gt;&amp;lt;/div&amp;gt;");
echo("&amp;lt;dt&amp;gt;[JavaScript]encodeURI&amp;lt;/dt&amp;gt;");
echo("&amp;lt;dd&amp;gt;" + results.js.encodeURI + "&amp;lt;/dd&amp;gt;");
echo("&amp;lt;dt&amp;gt;[PHP]encodeURI&amp;lt;/dt&amp;gt;");
echo("&amp;lt;dd&amp;gt;" + results.php.encodeURI + "&amp;lt;/dd&amp;gt;");
echo("&amp;lt;dt&amp;gt;[Compare] js === php &amp;lt;/dt&amp;gt;");
echo("&amp;lt;dd&amp;gt;" + (results.js.encodeURI === results.php.encodeURI) + "&amp;lt;/dd&amp;gt;");
echo("&amp;lt;dt&amp;gt;decodeURI&amp;lt;/dt&amp;gt;");
echo("&amp;lt;dd&amp;gt;" + php2js.decodeURI + "&amp;lt;/dd&amp;gt;");

// encodeURIComponent
echo("&amp;lt;div&amp;gt;&amp;lt;hr /&amp;gt;&amp;lt;/div&amp;gt;");
echo("&amp;lt;dt&amp;gt;[JavaScript]encodeURIComponent&amp;lt;/dt&amp;gt;");
echo("&amp;lt;dd&amp;gt;" + results.js.encodeURIComponent + "&amp;lt;/dd&amp;gt;");
echo("&amp;lt;dt&amp;gt;[PHP]encodeURIComponent&amp;lt;/dt&amp;gt;");
echo("&amp;lt;dd&amp;gt;" + results.php.encodeURIComponent + "&amp;lt;/dd&amp;gt;");
echo("&amp;lt;dt&amp;gt;[Compare] js === php &amp;lt;/dt&amp;gt;");
echo("&amp;lt;dd&amp;gt;" + (results.js.encodeURIComponent === results.php.encodeURIComponent) + "&amp;lt;/dd&amp;gt;");
echo("&amp;lt;dt&amp;gt;decodeURIComponent&amp;lt;/dt&amp;gt;");
echo("&amp;lt;dd&amp;gt;" + php2js.decodeURIComponent + "&amp;lt;/dd&amp;gt;");

echo("&amp;lt;/dl&amp;gt;");

&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
実行結果:&lt;br /&gt;
&lt;div style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: rgb(255, 255, 255) none repeat scroll 0% 0%; border: 2px solid rgb(51, 51, 51); color: #333333; padding: 4px;"&gt;charset=UTF-8&lt;br /&gt;
&lt;dl&gt;&lt;dt&gt;[JavaScript]escape&lt;/dt&gt;
&lt;dd&gt;%7E@%28%29*%26%3D%25%24_%u3042%u3044%u3046%u3048%u304A%uFF5E%u8868%u793A%u6F22%u5B57&lt;/dd&gt;
&lt;dt&gt;[PHP]escape&lt;/dt&gt;
&lt;dd&gt;%7E@%28%29*%26%3D%25%24_%u3042%u3044%u3046%u3048%u304A%uFF5E%u8868%u793A%u6F22%u5B57&lt;/dd&gt;
&lt;dt&gt;[Compare] js === php &lt;/dt&gt;
&lt;dd&gt;&lt;big style="color: blue;"&gt;true&lt;/big&gt;&lt;/dd&gt;
&lt;dt&gt;unescape&lt;/dt&gt;
&lt;dd&gt;~@()*&amp;amp;=%$_あいうえお～表示漢字&lt;/dd&gt;        &lt;div&gt;&lt;hr /&gt;&lt;/div&gt;&lt;dt&gt;[JavaScript]encodeURI&lt;/dt&gt;
&lt;dd&gt;~@()*&amp;amp;=%25$_%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A%EF%BD%9E%E8%A1%A8%E7%A4%BA%E6%BC%A2%E5%AD%97&lt;/dd&gt;
&lt;dt&gt;[PHP]encodeURI&lt;/dt&gt;
&lt;dd&gt;~@()*&amp;amp;=%25$_%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A%EF%BD%9E%E8%A1%A8%E7%A4%BA%E6%BC%A2%E5%AD%97&lt;/dd&gt;
&lt;dt&gt;[Compare] js === php &lt;/dt&gt;
&lt;dd&gt;&lt;big style="color: blue;"&gt;true&lt;/big&gt;&lt;/dd&gt;
&lt;dt&gt;decodeURI&lt;/dt&gt;
&lt;dd&gt;~@()*&amp;amp;=%$_あいうえお～表示漢字&lt;/dd&gt;        &lt;div&gt;&lt;hr /&gt;&lt;/div&gt;&lt;dt&gt;[JavaScript]encodeURIComponent&lt;/dt&gt;
&lt;dd&gt;~%40()*%26%3D%25%24_%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A%EF%BD%9E%E8%A1%A8%E7%A4%BA%E6%BC%A2%E5%AD%97&lt;/dd&gt;
&lt;dt&gt;[PHP]encodeURIComponent&lt;/dt&gt;
&lt;dd&gt;~%40()*%26%3D%25%24_%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A%EF%BD%9E%E8%A1%A8%E7%A4%BA%E6%BC%A2%E5%AD%97&lt;/dd&gt;
&lt;dt&gt;[Compare] js === php &lt;/dt&gt;
&lt;dd&gt;&lt;big style="color: blue;"&gt;true&lt;/big&gt;&lt;/dd&gt;
&lt;dt&gt;decodeURIComponent&lt;/dt&gt;
&lt;dd&gt;~@()*&amp;amp;=%$_あいうえお～表示漢字&lt;/dd&gt;&lt;/dl&gt;&lt;/div&gt;&lt;br /&gt;
この結果は、&lt;br /&gt;
IE、FireFox、Opera、Chrome で試した結果です (すべて同じでした)。&lt;br /&gt;
&lt;br /&gt;
[JavaScript] と [PHP] が同じ結果になっていて、&lt;br /&gt;
[Compare] (比較結果) が &lt;b&gt;&lt;span style="color: blue;"&gt;true&lt;/span&gt;&lt;/b&gt; になっているのがわかると思います。&lt;br /&gt;
&lt;br /&gt;
PHP で エンコードして JavaScript に受け渡した結果も一致しています。&lt;br /&gt;
&lt;br /&gt;
なお、このテスト結果の文字コードは UTF-8 ですが、&lt;br /&gt;
EUC-JP、 SJIS 共に同じ結果になりました。&lt;br /&gt;
&lt;br /&gt;
文字コードを変更する場合は、&lt;br /&gt;
&lt;pre class="php" name="code" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: #333333; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; margin: 4px; padding: 4px;"&gt;$posql-&amp;gt;setCharset('UTF-8');
&lt;/pre&gt;のようにして内部エンコーディングを設定するとよいです。&lt;br /&gt;
&lt;br /&gt;
Posql API を使うことで JavaScript と PHP の連携がお手軽簡単になると思います。&lt;br /&gt;
機会あれば遊んでみてください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-295402557018076253?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/e1WF1t96yQJVIR5904LT38zVYKs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e1WF1t96yQJVIR5904LT38zVYKs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/e1WF1t96yQJVIR5904LT38zVYKs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e1WF1t96yQJVIR5904LT38zVYKs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/T0NEDj_F99E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/295402557018076253/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/04/phpjavascriptescapeunescapeencodeuridec.html#comment-form" title="2 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/295402557018076253?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/295402557018076253?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/T0NEDj_F99E/phpjavascriptescapeunescapeencodeuridec.html" title="PHPでJavaScriptのescape/unescape,encodeURI/decodeURI,encodeURIComponent/decodeURIComponentを実装してみたよ" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/04/phpjavascriptescapeunescapeencodeuridec.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04NQHk8cSp7ImA9WxFRF0k.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-961611599654728569</id><published>2010-03-28T23:59:00.001+09:00</published><updated>2010-05-02T04:26:31.779+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T04:26:31.779+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="更新" /><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><category scheme="http://www.blogger.com/atom/ns#" term="API" /><category scheme="http://www.blogger.com/atom/ns#" term="クエリーキャッシュ" /><category scheme="http://www.blogger.com/atom/ns#" term="関数" /><category scheme="http://www.blogger.com/atom/ns#" term="互換実装" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="posql" /><category scheme="http://www.blogger.com/atom/ns#" term="Version" /><title>Posql 2.17リリース。SELECTの速度が約80%向上</title><content type="html">Posql Version 2.17 リリースしました。&lt;br /&gt;
&lt;br /&gt;
Version 2.17 は、&lt;br /&gt;
SELECT の速度が 約 80% 向上したという劇的な改善がされています。&lt;br /&gt;
&lt;br /&gt;
また、JavaScript の関数&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;escape/unescape&lt;/li&gt;
&lt;li&gt;encodeURI/decodeURI&lt;/li&gt;
&lt;li&gt;encodeURIComponent/decodeURIComponent&lt;/li&gt;
&lt;/ul&gt;が互換実装され、&lt;br /&gt;
PHP と JavaScript 間の連携をとる際に&lt;br /&gt;
有用かつ便利なライブラリとして扱えます。&lt;br /&gt;
&lt;br /&gt;
あと、クエリーキャッシュ機能も実装しました。&lt;br /&gt;
&lt;a href="http://feel.happy.nu/doc/posql/posql.api.manual.html"&gt;API リファレンス&lt;/a&gt; で解説されていますが、&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="php" name="code" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: #333333; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; margin: 4px; padding: 4px;"&gt;&amp;lt;?php
$posql = new Posql('my_database');
$posql-&amp;gt;setUseQueryCache(true); // クエリキャッシュを有効化
$posql-&amp;gt;query("SELECT * FROM my_table");
...
?&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
上のように setUseQueryCache(true or false); をコールすることによって、&lt;br /&gt;
SQL クエリをキャッシュし&lt;br /&gt;
高速に結果セットが得られる仕組みになっています。&lt;br /&gt;
&lt;br /&gt;
メソッドについての詳細は&lt;br /&gt;
&lt;a href="http://feel.happy.nu/doc/posql/posql.api.manual.html"&gt;Posql - API Reference - クラスメソッド リファレンス&lt;/a&gt; &lt;br /&gt;
で更新していますので参照ください。&lt;br /&gt;
&lt;br /&gt;
JavaScript 関数の互換実装 (Posql_ECMA) の詳細も更新されています。&lt;br /&gt;
&lt;br /&gt;
詳しいことは &lt;a href="http://sourceforge.jp/projects/posql/" title="Posql Project Page"&gt;Posql Project Page&lt;/a&gt; を参照してください。&lt;br /&gt;
SQL リファレンスやドキュメントは &lt;a href="http://feel.happy.nu/doc/posql/" title="Posql Index Catalog"&gt;Posql パッケージ一覧&lt;/a&gt; から参照してください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-961611599654728569?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OYc4mCW_-yV9C8cRjnA80-_sRDA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OYc4mCW_-yV9C8cRjnA80-_sRDA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OYc4mCW_-yV9C8cRjnA80-_sRDA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OYc4mCW_-yV9C8cRjnA80-_sRDA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/WEOZWJf82ic" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/961611599654728569/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/03/posql-217select80.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/961611599654728569?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/961611599654728569?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/WEOZWJf82ic/posql-217select80.html" title="Posql 2.17リリース。SELECTの速度が約80%向上" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/03/posql-217select80.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QFR3syeyp7ImA9WxFRF0o.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-8626008902722117817</id><published>2010-03-24T08:10:00.003+09:00</published><updated>2010-05-02T12:35:16.593+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T12:35:16.593+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="高速化" /><category scheme="http://www.blogger.com/atom/ns#" term="array_pop" /><category scheme="http://www.blogger.com/atom/ns#" term="プロファイラ" /><category scheme="http://www.blogger.com/atom/ns#" term="そんな" /><category scheme="http://www.blogger.com/atom/ns#" term="array_shift" /><category scheme="http://www.blogger.com/atom/ns#" term="posql" /><category scheme="http://www.blogger.com/atom/ns#" term="わかります" /><category scheme="http://www.blogger.com/atom/ns#" term="stack" /><category scheme="http://www.blogger.com/atom/ns#" term="してみました" /><category scheme="http://www.blogger.com/atom/ns#" term="ベンチマーク" /><category scheme="http://www.blogger.com/atom/ns#" term="メモリコスト" /><category scheme="http://www.blogger.com/atom/ns#" term="そこで" /><category scheme="http://www.blogger.com/atom/ns#" term="かかっていました" /><category scheme="http://www.blogger.com/atom/ns#" term="メモリ" /><title>10000レコードあたりから遅く重くなる理由:array_shiftが遅いためだった(ベンチマーク比較)</title><content type="html">Posql で 10000 レコードあたりから処理速度がかなり遅くなります。&lt;br /&gt;
&lt;br /&gt;
プロファイラで調べてみたところ、&lt;br /&gt;
巨大な配列を array_shift() でループしてるところでかなり時間がかかっていました。&lt;br /&gt;
&lt;br /&gt;
今まで気づかなかったのがアホなのですが、、&lt;br /&gt;
ためしに&lt;br /&gt;
&lt;pre class="php" name="code" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: #333333; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; margin: 4px; padding: 4px;"&gt;$row = array_shift($rows);
// (処理)
$new_row[] = $row;
&lt;/pre&gt;としていたのを&lt;br /&gt;
&lt;pre class="php" name="code" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: #333333; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; margin: 4px; padding: 4px;"&gt;$row = $rows[$i++];
// (処理) 
$new_row[] = $row;
&lt;/pre&gt;に変えてみたら、ビックリするくらい速くなりました。&lt;br /&gt;
&lt;br /&gt;
でも これではメモリがどんどん食われていきます。&lt;br /&gt;
そこで、&lt;br /&gt;
以下のようにシフトする代わりに null で埋めていく処理にしてみました。&lt;br /&gt;
&lt;pre class="php" name="code" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: #333333; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; margin: 4px; padding: 4px;"&gt;$row = $rows[$i];
$rows[$i] = null;
$i++;
// (処理) 
$new_row[] = $row;
&lt;/pre&gt;結果として、array_shift() とメモリコストはほぼ同じで高速化できました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
そんなに違うの？と疑問かと思うのでベンチマークとってみました。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="php" name="code" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: #333333; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; margin: 4px; padding: 4px;"&gt;&amp;lt;?php
// 配列を作成
$array = array();

// ベンチマークタイマー読み込み
require_once 'Benchmark/Timer.php';
$bench = new Benchmark_Timer;

$bench-&amp;gt;start();
// -------------- array_shift --------------
// 10000 のアイテムを持つ連想配列を作成
for ($i = 0; $i &amp;lt; 10000; $i++) {
  $array[] = array('key' =&amp;gt; 'value' . $i);
}
// array_shift() で空になるまでシフト
while (--$i &amp;gt;= 0) {
  $shift = array_shift($array);
}
$bench-&amp;gt;setMarker('array_shift');

// --------------- null fill ---------------
// 同じく 10000 の連想配列を作成
for ($i = 0; $i &amp;lt; 10000; $i++) {
  $array[] = array('key' =&amp;gt; 'value' . $i);
}
// array_shift() の代わりに null で埋める
$j = 0;
while (--$i &amp;gt;= 0) {
  $shift = $array[$j];
  $array[$j] = null;
  $j++;
}
// 結果的に同じになるよう初期化
$array = array();

$bench-&amp;gt;setMarker('null fill');
// -----------------------------------------
$bench-&amp;gt;stop();
$bench-&amp;gt;display();
?&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;style&gt;
#benchmarkResult,#benchmarkResult td {border:2px groove #333; border-collapse: collapse; padding:4px;color:#333;background:#fff;}#benchmarkResult tr.total td{background:#ccc;}
&lt;/style&gt;&lt;br /&gt;
結果:&lt;br /&gt;
&lt;table border="1" id="benchmarkResult"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td align="center"&gt;&lt;b&gt;time index&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&lt;b&gt;ex time&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&lt;b&gt;%&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;Start&lt;/b&gt;&lt;/td&gt;&lt;td&gt;1269384227.24003700&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td align="right"&gt;0.00%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;array_shift&lt;/b&gt;&lt;/td&gt;&lt;td&gt;1269384227.95581800&lt;/td&gt;&lt;td&gt;0.715781&lt;/td&gt;&lt;td align="right"&gt;97.70%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;null fill&lt;/b&gt;&lt;/td&gt;&lt;td&gt;1269384227.97259900&lt;/td&gt;&lt;td&gt;0.016781&lt;/td&gt;&lt;td align="right"&gt;2.29%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;Stop&lt;/b&gt;&lt;/td&gt;&lt;td&gt;1269384227.97264300&lt;/td&gt;&lt;td&gt;0.000044&lt;/td&gt;&lt;td align="right"&gt;0.01%&lt;/td&gt;&lt;/tr&gt;
&lt;tr class="total"&gt;&lt;td&gt;&lt;b&gt;total&lt;/b&gt;&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;0.732606&lt;/td&gt;&lt;td&gt;100.00%&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
10000 ループだけでもここまで違いがわかります。&lt;br /&gt;
圧倒的に &lt;b&gt;null で埋めるほうが速い&lt;/b&gt; &lt;br /&gt;
もっと早く気付けばよかった。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-8626008902722117817?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qU6JDEQQbCvKWb3YMiuH6zc9WQU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qU6JDEQQbCvKWb3YMiuH6zc9WQU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qU6JDEQQbCvKWb3YMiuH6zc9WQU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qU6JDEQQbCvKWb3YMiuH6zc9WQU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/PkpMbTFzBSs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/8626008902722117817/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/03/10000arrayshift.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/8626008902722117817?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/8626008902722117817?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/PkpMbTFzBSs/10000arrayshift.html" title="10000レコードあたりから遅く重くなる理由:array_shiftが遅いためだった(ベンチマーク比較)" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/03/10000arrayshift.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQERX88fyp7ImA9WxFRF0k.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-2253765028362946768</id><published>2010-03-17T03:58:00.004+09:00</published><updated>2010-05-02T04:31:44.177+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T04:31:44.177+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="csv" /><category scheme="http://www.blogger.com/atom/ns#" term="file_line_util" /><category scheme="http://www.blogger.com/atom/ns#" term="posql" /><title>ファイルの行番号を指定して文字列を「追加」「挿入」「置換」できるクラス関数を作ってみた</title><content type="html">ファイルの行番号を指定して任意の文字列を&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;追加&lt;/li&gt;
&lt;li&gt;挿入&lt;/li&gt;
&lt;li&gt;置換&lt;/li&gt;
&lt;/ul&gt;できる関数 (クラス) を作ってみました。&lt;br /&gt;
&lt;br /&gt;
次のバージョンの Posql で使用する予定です。&lt;br /&gt;
便利かと思うので クラス化してみました。&lt;br /&gt;
&lt;br /&gt;
file_line_util.class.php&lt;br /&gt;
&lt;pre class="php" name="code" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: #333333; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; margin: 4px; padding: 4px;"&gt;&amp;lt;?php
/**
 * @name File_Line_Util
 *
 * PHP versions 4 and 5
 *
 * @author    polygon planet
 * @link      http://polygon-blog.blogspot.com/
 * @license   Dual licensed under the MIT and GPL licenses
 * @copyright Copyright (c) 2010 polygon planet
 * @version   1.00 2010/03/17 02:10:00
 */
class File_Line_Util {

/**
 * Appends given string into the file with the specified line number
 *
 * @param  string   filename
 * @param  mixed    string or array to append
 * @param  number   line number to insert which starts from 1
 * @param  string   the string glue to join array
 * @return number   the number of bytes written
 * @access public
 */
 function appendFileLine($filename, $append_data, $line_number, $glue = ''){
   $result = 0;
   if (is_numeric($line_number)) {
     $line_number = $line_number - 0;
     $appends = array();
     if ($append_data === null || is_scalar($append_data)) {
       $appends = array((string)$append_data);
     } else {
       if (!is_array($append_data)) {
         $append_data = (array)$append_data;
       }
       if (empty($append_data)) {
         $append_data = array(null);
       }
       $appends = array_map('strval', $append_data);
     }
     if ($fp = @fopen($filename, 'rb')) {
       $i = 1;
       $nl = '';
       while (!feof($fp)) {
         if ($i == $line_number) {
           $buffer = fgets($fp);
           if ($nl == null) {
             $nl = substr($buffer, -2);
             if (trim($nl) != null) {
               $nl = substr($nl, -1);
             }
             if (trim($nl) != null) {
               $nl = '';
             }
           }
           $buffer = substr($buffer, 0, -strlen($nl));
           if (count($appends) &amp;gt; 1) {
             $nl = '';
           }
           reset($appends);
           $key = key($appends);
           $appends[$key] = $buffer . $appends[$key] . $nl;
           break;
         } else {
           if ($i === 1) {
             $buffer = fgets($fp);
             $nl = substr($buffer, -2);
             if (trim($nl) != null) {
               $nl = substr($nl, -1);
             }
             if (trim($nl) != null) {
               $nl = '';
             }
             unset($buffer);
           } else {
             fgets($fp);
           }
         }
         $i++;
       }
       fclose($fp);
       $result = File_Line_Util::_replaceFileLine($filename, $appends,
                                                  $line_number, $glue);
     }
   }
   return $result;
 }

/**
 * Insert given string into the file with the specified line number
 *
 * @param  string   filename
 * @param  mixed    string or array to insert
 * @param  number   line number to insert which starts from 1
 * @param  string   the string glue to join array
 * @return number   the number of bytes written
 * @access public
 */
 function insertFileLine($filename, $insert_data, $line_number, $glue = ''){
   $result = 0;
   if (is_numeric($line_number)) {
     $line_number = $line_number - 0;
     $inserts = array();
     if ($insert_data === null || is_scalar($insert_data)) {
       $inserts = array((string)$insert_data);
     } else {
       if (!is_array($insert_data)) {
         $insert_data = (array)$insert_data;
       }
       if (empty($insert_data)) {
         $insert_data = array(null);
       }
       $inserts = array_map('strval', $insert_data);
     }
     if ($fp = @fopen($filename, 'rb')) {
       $i = 1;
       $nl = '';
       while (!feof($fp)) {
         if ($i == $line_number) {
           $buffer = fgets($fp);
           if ($nl == null) {
             $nl = substr($buffer, -2);
             if (trim($nl) != null) {
               $nl = substr($nl, -1);
             }
             if (trim($nl) != null) {
               $nl = '';
             }
           }
           if (count($inserts) &amp;gt; 1) {
             $buffer = substr($buffer, 0, -strlen($nl));
           }
           end($inserts);
           $key = key($inserts);
           $inserts[$key] .= $nl . $buffer;
           break;
         } else {
           if ($i === 1) {
             $buffer = fgets($fp);
             $nl = substr($buffer, -2);
             if (trim($nl) != null) {
               $nl = substr($nl, -1);
             }
             if (trim($nl) != null) {
               $nl = '';
             }
             unset($buffer);
           } else {
             fgets($fp);
           }
         }
         $i++;
       }
       fclose($fp);
       $result = File_Line_Util::_replaceFileLine($filename, $inserts,
                                                  $line_number, $glue);
     }
   }
   return $result;
 }

/**
 * Replaces to given string into the file with the specified line number
 *
 * @param  string   filename
 * @param  mixed    replacement as string or array
 * @param  number   line number to replace which starts from 1
 * @param  string   the string glue to join array
 * @return number   the number of bytes written
 * @access public
 */
 function replaceFileLine($filename, $replacement, $line_number, $glue = ''){
   $result = 0;
   if (is_numeric($line_number)) {
     $line_number = $line_number - 0;
     $replacements = array();
     if ($replacement === null || is_scalar($replacement)) {
       $replacements = array((string)$replacement);
     } else {
       if (!is_array($replacement)) {
         $replacement = (array)$replacement;
       }
       if (empty($replacement)) {
         $replacement = array(null);
       }
       $replacements = array_map('strval', $replacement);
     }
     unset($replacement);
     $nl = '';
     if ($fp = @fopen($filename, 'rb')) {
       $buffer = fgets($fp);
       fclose($fp);
       $nl = substr($buffer, -2);
       unset($buffer);
       if (trim($nl) != null) {
         $nl = substr($nl, -1);
       }
       if (trim($nl) != null) {
         $nl = '';
       }
       if (count($replacements) &amp;gt; 1) {
         $nl = '';
       }
       end($replacements);
       $key = key($replacements);
       $replacements[$key] .= $nl;
       $result = File_Line_Util::_replaceFileLine($filename, $replacements,
                                                  $line_number, $glue);
     }
   }
   return $result;
 }

/**
 * Replaces to given string into the file with the specified line number
 *
 * @param  string   filename
 * @param  mixed    replacement as string or array
 * @param  number   line number to replace which starts from 1
 * @param  string   the string glue to join array
 * @return number   the number of bytes written
 * @access private
 */
 function _replaceFileLine($filename, $replacement, $line_number, $glue = ''){
   $result = 0;
   if (is_numeric($line_number)) {
     $line_number = $line_number - 0;
     $replacements = array();
     if ($replacement === null || is_scalar($replacement)) {
       $replacements = array((string)$replacement);
     } else {
       if (!is_array($replacement)) {
         $replacement = (array)$replacement;
       }
       if (empty($replacement)) {
         $replacement = array(null);
       }
       $replacements = array_map('strval', $replacement);
     }
     $replacement = '';
     if (is_array($replacements)) {
       $count = count($replacements);
       if ($count === 1) {
         $replacement = array_shift($replacements);
       } else {
         while (--$count &amp;gt;= 0) {
           $replacement .= array_shift($replacements) . $glue;
         }
       }
       $written_bytes = 0;
       $length = strlen($replacement);
       $buffer_size = 0x2000;
       if ($rp = @fopen($filename, 'rb')) {
         if ($wp = @fopen($filename, 'r+b')) {
           $i = 1;
           while (!feof($rp)) {
             if ($i == $line_number) {
               fgets($rp);
               $buffers = array();
               $buffers[] = fread($rp, $length);
               $written_bytes = fwrite($wp, $replacement,
                                            strlen($replacement));
               $buffer_size += $length;
               if (!feof($rp)) {
                 do {
                   $buffers[] = fread($rp, $buffer_size);
                   $put = array_shift($buffers);
                   fwrite($wp, $put, strlen($put));
                 } while (!feof($rp));
               }
               $put = array_shift($buffers);
               fwrite($wp, $put, strlen($put));
               $org_user_abort = ignore_user_abort(1);
               ftruncate($wp, ftell($wp));
               ignore_user_abort($org_user_abort);
               $result = $written_bytes;
               break;
             } else {
               $put = fgets($rp);
               fwrite($wp, $put, strlen($put));
             }
             unset($put);
             $i++;
           }
           fclose($wp);
         }
         fclose($rp);
       }
     }
   }
   return $result;
 }
}

?&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;使い方&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style="font-size: x-small;"&gt;int&lt;/span&gt;&lt;/i&gt; &lt;b&gt;File_Line_Util::appendFileLine&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ($filename, $append_data, $line_number, $glue = '');&lt;br /&gt;
文字列をファイルの任意の行に追加 &lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style="font-size: x-small;"&gt;int&lt;/span&gt;&lt;/i&gt; &lt;b&gt;File_Line_Util::insertFileLine&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ($filename, $insert_data, $line_number, $glue = '');&lt;br /&gt;
文字列をファイルの任意の行に挿入 &lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style="font-size: x-small;"&gt;int&lt;/span&gt;&lt;/i&gt; &lt;b&gt;File_Line_Util::replaceFileLine&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ($filename, $replacement, $line_number, $glue = '');&lt;br /&gt;
ファイルの任意の行の文字列を置換&lt;br /&gt;
&lt;br /&gt;
引数：&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;string&lt;/span&gt;&lt;/i&gt; $filename:&lt;br /&gt;
対象のファイル名&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;mixed&lt;/span&gt;&lt;/i&gt; $append_data / $insert_data / $replacement&lt;br /&gt;
追加/挿入/置換する文字列 もしくは配列&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;int&lt;/span&gt;&lt;/i&gt; $line_number&lt;br /&gt;
変換対象の行番号 (1 から始まります = 最初の行は 1)&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;string&lt;/span&gt;&lt;/i&gt; $glue&lt;br /&gt;
配列を渡した場合の連結する文字 (例: "\n") デフォルト = '' (空文字)&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
使用例：&lt;br /&gt;
&lt;br /&gt;
以下のような test.csv という csv ファイルがあったとします。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="html" name="code" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: #333333; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; margin: 4px; padding: 4px;"&gt;1,1020072,東京都,千代田区,飯田橋
2,1020082,東京都,千代田区,一番町
3,1010032,東京都,千代田区,岩本町
4,1010047,東京都,千代田区,内神田
5,1000011,東京都,千代田区,内幸町
&lt;/pre&gt;&lt;br /&gt;
これをそれぞれのメソッドで変換してみます。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="php" name="code" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: #333333; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; margin: 4px; padding: 4px;"&gt;&amp;lt;?php

// クラスを読み込み
require_once 'file_line_util.class.php';

// ファイル名を設定
$filename = 'test.csv';

// 元のファイルを出力
echo '&amp;lt;div&amp;gt;original file:&amp;lt;/div&amp;gt;';
echo '&amp;lt;pre&amp;gt;', file_get_contents($filename), '&amp;lt;/pre&amp;gt;';

// ----------------------------------------------------
// replace (置換)
// ----------------------------------------------------

// 置換する文字列
$string = '2行目のデータ(置換)';

// 置換する行番号
$line_number = 2;

// 2 行目を置換
$written_bytes = File_Line_Util::replaceFileLine(
  $filename,
  $string,
  $line_number
);

printf('&amp;lt;div&amp;gt;replaceFileLine(%s, %s, %d):&amp;lt;/div&amp;gt;',
  $filename,
  $string,
  $line_number
);
echo '&amp;lt;pre&amp;gt;', file_get_contents($filename), '&amp;lt;/pre&amp;gt;';

// ----------------------------------------------------
// append (追加)
// ----------------------------------------------------

// 追加する文字列
$string = '3行目のデータ(追加)';

// 追加する行番号
$line_number = 3;

// 3 行目にデータを追加
$written_bytes = File_Line_Util::appendFileLine(
  $filename,
  $string,
  $line_number
);

printf('&amp;lt;div&amp;gt;appendFileLine(%s, %s, %d):&amp;lt;/div&amp;gt;',
  $filename,
  $string,
  $line_number
);
echo '&amp;lt;pre&amp;gt;', file_get_contents($filename), '&amp;lt;/pre&amp;gt;';

// ----------------------------------------------------
// insert (挿入)
// ----------------------------------------------------

// 挿入する文字列
$string = '5行目のデータ(挿入)';

// 挿入する行番号
$line_number = 5;

// 5 行目にデータを挿入
$written_bytes = File_Line_Util::insertFileLine(
  $filename,
  $string,
  $line_number
);

printf('&amp;lt;div&amp;gt;insertFileLine(%s, %s, %d):&amp;lt;/div&amp;gt;',
  $filename,
  $string,
  $line_number
);
echo '&amp;lt;pre&amp;gt;', file_get_contents($filename), '&amp;lt;/pre&amp;gt;';

?&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
実行結果：&lt;br /&gt;
&lt;div style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: rgb(255, 255, 255) none repeat scroll 0% 0%; border: 2px solid rgb(51, 51, 51); color: #333333; padding: 4px;"&gt;&lt;div&gt;original file:&lt;/div&gt;&lt;pre style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: rgb(255, 255, 255) none repeat scroll 0% 0%; border: 2px solid rgb(51, 51, 51); color: #333333;"&gt;1,1020072,東京都,千代田区,飯田橋
2,1020082,東京都,千代田区,一番町
3,1010032,東京都,千代田区,岩本町
4,1010047,東京都,千代田区,内神田
5,1000011,東京都,千代田区,内幸町
&lt;/pre&gt;&lt;div&gt;replaceFileLine(test.csv, 2行目のデータ(置換), 2):&lt;/div&gt;&lt;pre style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: rgb(255, 255, 255) none repeat scroll 0% 0%; border: 2px solid rgb(51, 51, 51); color: #333333;"&gt;1,1020072,東京都,千代田区,飯田橋
2行目のデータ(置換)
3,1010032,東京都,千代田区,岩本町
4,1010047,東京都,千代田区,内神田
5,1000011,東京都,千代田区,内幸町
&lt;/pre&gt;&lt;div&gt;appendFileLine(test.csv, 3行目のデータ(追加), 3):&lt;/div&gt;&lt;pre style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: rgb(255, 255, 255) none repeat scroll 0% 0%; border: 2px solid rgb(51, 51, 51); color: #333333;"&gt;1,1020072,東京都,千代田区,飯田橋
2行目のデータ(置換)
3,1010032,東京都,千代田区,岩本町3行目のデータ(追加)
4,1010047,東京都,千代田区,内神田
5,1000011,東京都,千代田区,内幸町
&lt;/pre&gt;&lt;div&gt;insertFileLine(test.csv, 5行目のデータ(挿入), 5):&lt;/div&gt;&lt;pre style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: rgb(255, 255, 255) none repeat scroll 0% 0%; border: 2px solid rgb(51, 51, 51); color: #333333;"&gt;1,1020072,東京都,千代田区,飯田橋
2行目のデータ(置換)
3,1010032,東京都,千代田区,岩本町3行目のデータ(追加)
4,1010047,東京都,千代田区,内神田
5行目のデータ(挿入)
5,1000011,東京都,千代田区,内幸町
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
ソースを見て、遠回りなロジックと思う方もいるかもしれません。&lt;br /&gt;
なぜなら、&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;file_get_contents/file&lt;/li&gt;
&lt;li&gt;str_replace/preg_replace&lt;/li&gt;
&lt;li&gt;file_put_contents&lt;/li&gt;
&lt;/ol&gt;上の 3 回の操作だけで実装できるからです。&lt;br /&gt;
&lt;br /&gt;
しかし、もしファイルが 250MB あったらそれは難しくなります。&lt;br /&gt;
ini_set('memory_limit', '250M'); とすれば うまくいくかもしれませんが、&lt;br /&gt;
あまり現実的ではないです。&lt;br /&gt;
&lt;br /&gt;
File_Line_Util クラスは、巨大なファイルでもメモリコストを抑えて実装しています。&lt;br /&gt;
仮に 250MB のファイルでも処理は成功します。&lt;br /&gt;
&lt;br /&gt;
拡張すれば正規表現で任意の行を変換などもできると思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-2253765028362946768?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/x9qL4pBThHYH-bWLQ1mAAgT83qw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x9qL4pBThHYH-bWLQ1mAAgT83qw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/x9qL4pBThHYH-bWLQ1mAAgT83qw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x9qL4pBThHYH-bWLQ1mAAgT83qw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/mUONIh0c5KU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/2253765028362946768/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/03/blog-post.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/2253765028362946768?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/2253765028362946768?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/mUONIh0c5KU/blog-post.html" title="ファイルの行番号を指定して文字列を「追加」「挿入」「置換」できるクラス関数を作ってみた" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/03/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYMSH84eCp7ImA9WxFRF0k.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-5360083022468184282</id><published>2010-03-06T00:54:00.001+09:00</published><updated>2010-05-02T04:29:49.130+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T04:29:49.130+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQLite" /><category scheme="http://www.blogger.com/atom/ns#" term="段階" /><category scheme="http://www.blogger.com/atom/ns#" term="PHP4" /><category scheme="http://www.blogger.com/atom/ns#" term="PHP5" /><category scheme="http://www.blogger.com/atom/ns#" term="for" /><category scheme="http://www.blogger.com/atom/ns#" term="文字" /><category scheme="http://www.blogger.com/atom/ns#" term="公開" /><category scheme="http://www.blogger.com/atom/ns#" term="posql" /><category scheme="http://www.blogger.com/atom/ns#" term="WordPress" /><title>Posql for WordPress まだできない</title><content type="html">WordPress を Posql で動かそうという&lt;br /&gt;
「Posql for WordPress」プラグインの開発ですが、&lt;br /&gt;
いちおう PHP4, PHP5 で動くようになりました。&lt;br /&gt;
&lt;br /&gt;
でも、まだ脆弱性とかたくさんあります。&lt;br /&gt;
バックスラッシュを含む文字を投稿するとエラーになったりします。&lt;br /&gt;
&lt;br /&gt;
SQLite プラグインをモデルにしてるので、&lt;br /&gt;
文字のエスケープが微妙に異なるのが難点です。&lt;br /&gt;
&lt;br /&gt;
ソースを見てて思ったのですが、&lt;br /&gt;
そもそも SQLite プラグインは大丈夫なのかと。&lt;br /&gt;
&lt;br /&gt;
あと、自動で「データベースのアップグレード」ページに行ってしまうことがあり&lt;br /&gt;
開発側としては非常に困るところです。。&lt;br /&gt;
&lt;br /&gt;
少なくともエスケープができないうちは、&lt;br /&gt;
まだ公開する段階でないので もう少しがんばってみます。&lt;br /&gt;
&lt;br /&gt;
今の段階でもいいという方がいたらコメントかメールください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-5360083022468184282?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/W-GyGEzo2Djnux3qP15L9HbkIu0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/W-GyGEzo2Djnux3qP15L9HbkIu0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/W-GyGEzo2Djnux3qP15L9HbkIu0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/W-GyGEzo2Djnux3qP15L9HbkIu0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/Yn7VfFpxg1o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/5360083022468184282/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/03/posql-for-wordpress.html#comment-form" title="3 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/5360083022468184282?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/5360083022468184282?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/Yn7VfFpxg1o/posql-for-wordpress.html" title="Posql for WordPress まだできない" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/03/posql-for-wordpress.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUARnw5cCp7ImA9WxFRF0k.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-2580899945032294671</id><published>2010-02-28T14:28:00.005+09:00</published><updated>2010-05-02T04:30:47.228+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T04:30:47.228+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Posql_Pager" /><category scheme="http://www.blogger.com/atom/ns#" term="取得" /><category scheme="http://www.blogger.com/atom/ns#" term="PEAR" /><category scheme="http://www.blogger.com/atom/ns#" term="簡単" /><category scheme="http://www.blogger.com/atom/ns#" term="ページャー" /><category scheme="http://www.blogger.com/atom/ns#" term="posql" /><category scheme="http://www.blogger.com/atom/ns#" term="使用例" /><category scheme="http://www.blogger.com/atom/ns#" term="Version" /><category scheme="http://www.blogger.com/atom/ns#" term="getPager" /><title>Posql内蔵のページャーPosql_Pagerを使ってみる</title><content type="html">Posql Version 2.16 から、&lt;br /&gt;
デフォルトで Posql_Pager というクラスが組み込まれています。&lt;br /&gt;
&lt;br /&gt;
Posql_Pager は簡易ページャークラスです。&lt;br /&gt;
&lt;br /&gt;
getPager() というメソッドで取得・設定できます。&lt;br /&gt;
&lt;br /&gt;
使用例:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://feel.happy.nu/doc/posql/pager/index.php" target="_blank" title="別ウィンドウで開きます"&gt;デモページ&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;デモページのコード (ほとんどそのまま):&lt;br /&gt;
&lt;pre class="php" name="code" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: #333333; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; margin: 4px; padding: 4px;"&gt;&amp;lt;?php
require_once 'posql-2.16/posql.php';
$posql = new Posql('pager_sample');
$sql = "CREATE TABLE IF NOT EXISTS pages (
  id  INTEGER PRIMARY KEY,
  msg TEXT
)";
$posql-&amp;gt;exec($sql);
$stmt = $posql-&amp;gt;query("SELECT COUNT(*) FROM pages");
$count = $stmt-&amp;gt;fetchColumn(0);
if (!$count) {
  // 1000 件インサート
  $data = array();
  for ($i = 1; $i &amp;lt;= 1000; $i++) {
    $data[] = array(
      'msg' =&amp;gt; sprintf('current page is %d.', $i)
    );
  }
  $count = $posql-&amp;gt;insert('pages', $data);
}
$curpage = 1;
if (isset($_GET['page']) &amp;amp;&amp;amp; is_numeric($_GET['page'])) {
  $curpage = $_GET['page'];
}
// 1 ページに表示する件数
$perpage = 5;

// ページ内のリンクの個数
$range = 10;

// ページャーを生成
$pager = $posql-&amp;gt;getPager($count, $curpage, $perpage, $range);

// データを取得
$sql = "SELECT * FROM pages LIMIT ? OFFSET ?";
$stmt = $posql-&amp;gt;prepare($sql);
$stmt-&amp;gt;execute(array($pager-&amp;gt;limit, $pager-&amp;gt;offset));
$stmt-&amp;gt;setFetchMode('assoc');
?&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta http-equiv="content-type" content="text/html; charset=UTF-8"&amp;gt;
&amp;lt;title&amp;gt;Posql Pager Sample&amp;lt;/title&amp;gt;
&amp;lt;style&amp;gt;
* {
  font-family: verdana;
}
.pager li {
  display: block;
  float: left;
  margin: 5px;
  padding: 0;
  border: 1px solid #999;
}

.pager a {
  display: block;
  margin: 0;
  padding: 4px 8px;
  font-size: x-small;
  text-decoration : none;
  color: #333;
}

.pager a:hover {
  color: #333;
  background: #ccccff;
  text-decoration: none;
}
&amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;h1&amp;gt;Posql Pager Sample&amp;lt;/h1&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;?php while ($row = $stmt-&amp;gt;fetch()): ?&amp;gt;
&amp;lt;div&amp;gt;
  &amp;lt;?php printf('id:%d msg:%s', $row['id'], $row['msg']) ?&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;?php endwhile; ?&amp;gt;

&amp;lt;?php /* ここからページャー */ ?&amp;gt;
&amp;lt;ul class="pager"&amp;gt;

&amp;lt;?php if ($pager-&amp;gt;currentPage != 1): ?&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;a href="index.php?page=1"&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;?php endif; ?&amp;gt;

&amp;lt;?php if ($pager-&amp;gt;prev): ?&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;a href="index.php?page=&amp;lt;?php echo $pager-&amp;gt;prev ?&amp;gt;"&amp;gt;&amp;amp;lt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;?php endif; ?&amp;gt;

&amp;lt;?php foreach ($pager-&amp;gt;pages as $page): ?&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;a href="index.php?page=&amp;lt;?php echo $page?&amp;gt;"&amp;gt;&amp;lt;?php echo $page?&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;?php endforeach; ?&amp;gt;

&amp;lt;?php if ($pager-&amp;gt;next): ?&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;a href="index.php?page=&amp;lt;?php echo $pager-&amp;gt;next ?&amp;gt;"&amp;gt;&amp;amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;?php endif; ?&amp;gt;

&amp;lt;?php if ($pager-&amp;gt;currentPage != $pager-&amp;gt;totalPages): ?&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;a href="index.php?page=&amp;lt;?php echo $pager-&amp;gt;totalPages ?&amp;gt;"&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;?php endif; ?&amp;gt;

&amp;lt;/ul&amp;gt;
&amp;lt;?php /* ここまでページャー */ ?&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
PEAR 等使わなくても簡単なものならデフォルトで使えます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-2580899945032294671?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/J7Rp8X53CzZFCeY4DBwUawH16hQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/J7Rp8X53CzZFCeY4DBwUawH16hQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/J7Rp8X53CzZFCeY4DBwUawH16hQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/J7Rp8X53CzZFCeY4DBwUawH16hQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/aYtXPBzVMTw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/2580899945032294671/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/02/posqlposqlpager.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/2580899945032294671?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/2580899945032294671?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/aYtXPBzVMTw/posqlposqlpager.html" title="Posql内蔵のページャーPosql_Pagerを使ってみる" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/02/posqlposqlpager.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQNSH8yeSp7ImA9WxFRF0k.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-767030094173632544</id><published>2010-02-28T09:12:00.003+09:00</published><updated>2010-05-02T04:33:19.191+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T04:33:19.191+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gz" /><category scheme="http://www.blogger.com/atom/ns#" term="extract" /><category scheme="http://www.blogger.com/atom/ns#" term="PHP4" /><category scheme="http://www.blogger.com/atom/ns#" term="PHP5" /><category scheme="http://www.blogger.com/atom/ns#" term="for" /><category scheme="http://www.blogger.com/atom/ns#" term="BY" /><category scheme="http://www.blogger.com/atom/ns#" term="posql" /><category scheme="http://www.blogger.com/atom/ns#" term="GROUP" /><category scheme="http://www.blogger.com/atom/ns#" term="WordPress" /><category scheme="http://www.blogger.com/atom/ns#" term="Version" /><title>Posql Version 2.16 リリース</title><content type="html">Posql Version 2.16 をリリースしました。 &lt;br /&gt;
&lt;br /&gt;
ダウンロード：&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://sourceforge.jp/projects/posql/downloads/46121/posql-2.16.zip"&gt;posql-2.16.zip&lt;/a&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://sourceforge.jp/projects/posql/downloads/46121/posql-2.16.tar.gz"&gt;posql-2.16.tar.gz&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
2.16 では、&lt;br /&gt;
GROUP BY 句に複数の「評価式」が指定できるようになりました。&lt;br /&gt;
&lt;br /&gt;
あと、日時を扱う strftime(), extract() 関数を実装しました。&lt;br /&gt;
&lt;br /&gt;
そして、有名なブログシステム WordPress を Posql で動かそうという&lt;br /&gt;
「Posql for WordPress」 プラグインを開発中です。&lt;br /&gt;
&lt;br /&gt;
今のところ&lt;br /&gt;
PHP5 → 動いた&lt;br /&gt;
PHP4 → 動かない&lt;br /&gt;
&lt;br /&gt;
ので、PHP4 の調整中です。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-767030094173632544?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zfPPVW4a4V9Ku0Kr4QobNivWyeM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zfPPVW4a4V9Ku0Kr4QobNivWyeM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zfPPVW4a4V9Ku0Kr4QobNivWyeM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zfPPVW4a4V9Ku0Kr4QobNivWyeM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/wg1SkwZtgKs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/767030094173632544/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/02/posql-version-216.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/767030094173632544?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/767030094173632544?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/wg1SkwZtgKs/posql-version-216.html" title="Posql Version 2.16 リリース" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/02/posql-version-216.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMGQH87cCp7ImA9WxFRF0k.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-2431354583865100696</id><published>2010-02-25T16:04:00.002+09:00</published><updated>2010-05-02T04:33:41.108+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T04:33:41.108+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQLite" /><category scheme="http://www.blogger.com/atom/ns#" term="for" /><category scheme="http://www.blogger.com/atom/ns#" term="BY" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="posql" /><category scheme="http://www.blogger.com/atom/ns#" term="GROUP" /><category scheme="http://www.blogger.com/atom/ns#" term="WordPress" /><category scheme="http://www.blogger.com/atom/ns#" term="PDO" /><title>複数の順序付きGROUP BYアルゴリズム</title><content type="html">実は、WordPress を Posql で動かそうとしています。&lt;br /&gt;
&lt;br /&gt;
SQLite で動かせる &lt;a href="http://wordpress.org/extend/plugins/pdo-for-wordpress/"&gt;PDO (SQLite) For Wordpress&lt;/a&gt; を参考にしていますが、&lt;br /&gt;
new PDO 等の文字列を単に new Posql といった感じに変換していくだけでも&lt;br /&gt;
ある程度は動くようになります(エラー制御が必要)。&lt;br /&gt;
&lt;br /&gt;
WordPress の バージョンは 2.9.2 です。&lt;br /&gt;
そして、はまったところは&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;wordpress/wp-includes/general-template.php &lt;/li&gt;
&lt;/ul&gt;&lt;pre class="php:firstline[806]" name="code" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: #333333; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; margin: 4px; padding: 4px;"&gt;$query = "SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, count(ID) as posts FROM $wpdb-&amp;gt;posts $join $where GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC $limit";
&lt;/pre&gt;&lt;br /&gt;
v2.9.2 現在の 806 行目のこの SQL。&lt;br /&gt;
GROUP BY に複数のフィールド。&lt;br /&gt;
さらにそれが評価式。&lt;br /&gt;
&lt;br /&gt;
Posql 2.15 では、GROUP BY 句に単一のカラム名しかサポートしていません。&lt;br /&gt;
&lt;br /&gt;
サブクエリでごにょごにょやろうとも思いましたが、&lt;br /&gt;
今後のためにも 複数可能な評価式をサポートすることにしました。&lt;br /&gt;
&lt;br /&gt;
ちなみにこの SQL で表示する部分は「アーカイブ」です。&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;2010 (2)&lt;/li&gt;
&lt;li&gt;2009 (12)&lt;/li&gt;
&lt;/ul&gt;↑ みたいなやつです。&lt;br /&gt;
&lt;br /&gt;
実装メモ:&lt;br /&gt;
&amp;nbsp;複数の順序がある GROUP BY アルゴリズムは、&lt;br /&gt;
&amp;nbsp;グループ化カラムによって順序付けされた入力を読み込みます(IN)。&lt;br /&gt;
&amp;nbsp;各列は、読み込むたび(LOOP) 前の列と比較します。&lt;br /&gt;
&amp;nbsp;グループ化カラムが一致すると、現在のグループを更新します。&lt;br /&gt;
&amp;nbsp;それ以外の場合は、現在のグループを出力し 新しいグループを開始します。&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;つまり、コントロールブレイク処理。&lt;br /&gt;
&lt;br /&gt;
ある程度まとまったら 次バージョンをリリースする予定です。&lt;br /&gt;
&amp;nbsp;「&lt;b&gt;WordPress for Posql&lt;/b&gt;」できたらいいなぁ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-2431354583865100696?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qxQzIGTjqq3Nr6U6aoVjuRV4drI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qxQzIGTjqq3Nr6U6aoVjuRV4drI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qxQzIGTjqq3Nr6U6aoVjuRV4drI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qxQzIGTjqq3Nr6U6aoVjuRV4drI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/qDW-IlaG5oA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/2431354583865100696/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/02/group-by.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/2431354583865100696?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/2431354583865100696?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/qDW-IlaG5oA/group-by.html" title="複数の順序付きGROUP BYアルゴリズム" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/02/group-by.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMMQn05fip7ImA9WxFRF0k.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-1747668074868949534</id><published>2010-02-14T19:37:00.002+09:00</published><updated>2010-05-02T04:34:43.326+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T04:34:43.326+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Posql_Archive" /><category scheme="http://www.blogger.com/atom/ns#" term="AlphamericHTML" /><category scheme="http://www.blogger.com/atom/ns#" term="アルゴリズム" /><category scheme="http://www.blogger.com/atom/ns#" term="Posql_ECMA" /><category scheme="http://www.blogger.com/atom/ns#" term="POST" /><category scheme="http://www.blogger.com/atom/ns#" term="解凍" /><category scheme="http://www.blogger.com/atom/ns#" term="圧縮" /><category scheme="http://www.blogger.com/atom/ns#" term="SpiderMonkey" /><category scheme="http://www.blogger.com/atom/ns#" term="lastIndexOf" /><title>AlphamericHTMLをPHPで実装してみた</title><content type="html">&lt;a href="http://nurucom-archives.hp.infoseek.co.jp/digital/Alphameric-HTML.html"&gt;AlphamericHTML&lt;/a&gt; を PHP で実装してみました。&lt;br /&gt;
&lt;br /&gt;
Unicode で処理しなきゃいけないので Posql_Unicode を使用しています。&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://polygon-blog.blogspot.com/2010/02/posql-version-215-union.html"&gt;前のPOST&lt;/a&gt; でも書きましたが、 &lt;br /&gt;
結局、JavaScript の String オブジェクト関数のほとんどを 完全互換で実装しました。&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://mxr.mozilla.org/mozilla/source/js/src/jsstr.c"&gt;SpiderMonkey&lt;/a&gt; のソースを参考にさせていただきました。&lt;br /&gt;
lastIndexOf とか、アルゴリズムがすごいです。&lt;br /&gt;
&lt;br /&gt;
各メソッドは Posql_ECMA クラスに集約しています。&lt;br /&gt;
以下がそのメソッドたち。 &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;charAt&lt;/li&gt;
&lt;li&gt;charCodeAt&lt;/li&gt;
&lt;li&gt;fromCharCode&lt;/li&gt;
&lt;li&gt;indexOf&lt;/li&gt;
&lt;li&gt; lastIndexOf&lt;/li&gt;
&lt;li&gt;length &lt;span style="font-size: xx-small;"&gt;&lt;span style="color: #cc0000;"&gt;*1&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt; slice&lt;/li&gt;
&lt;li&gt;split&lt;/li&gt;
&lt;li&gt;substr&lt;/li&gt;
&lt;li&gt;substring&lt;/li&gt;
&lt;li&gt;toLowerCase&lt;/li&gt;
&lt;li&gt;toUpperCase&lt;/li&gt;
&lt;li&gt;toString &lt;/li&gt;
&lt;/ul&gt;&lt;span style="color: #cc0000; font-size: xx-small;"&gt;*1&lt;/span&gt; length はプロパティですが関数化しました&lt;br /&gt;
&lt;br /&gt;
これらは Posql 2.15 で実装できてるものです。&lt;br /&gt;
今後、増えるかもしれないです。&lt;br /&gt;
&lt;br /&gt;
Posql_ECMA クラスの使い方は &lt;a href="http://polygon-blog.blogspot.com/2010/02/posql-version-215-union.html"&gt;前のPOST&lt;/a&gt; を参考にしてみてください。&lt;br /&gt;
&lt;br /&gt;
今回は Posql_Archive で実装された、&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;encodeAlphamericString&lt;/li&gt;
&lt;li&gt;decodeAlphamericString&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;この 2 つのメソッドを使う方法です。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="php" name="code" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: #333333; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; margin: 4px; padding: 4px;"&gt;&amp;lt;?php
require_once 'posql.php';

$posql = new Posql;

// 適当な日本語の文字列
$string = 'こんにちは。こんにちは。どなたかいませんか。おーい';
var_dump($string);

// エンコード (圧縮)
$encode = $posql-&amp;gt;archive-&amp;gt;encodeAlphamericString($string);
var_dump($encode);

// デコード (解凍)
$decode = $posql-&amp;gt;archive-&amp;gt;decodeAlphamericString($encode);

// 元の文字列と比較
var_dump($decode === $string);
?&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
Posql_Archive オブジェクトは archive からアクセスできます。&lt;br /&gt;
&lt;br /&gt;
AlphamericHTML は、LZ77圧縮アルゴリズムを採用しているので&lt;br /&gt;
連続した文字列が多ければ多いほど圧縮率は高くなります。&lt;br /&gt;
&lt;br /&gt;
&lt;div style="background-color: white; border: 2px solid black; color: black; padding: 4px;"&gt;&lt;pre class="xdebug-var-dump" dir="ltr"&gt;&lt;small&gt;string&lt;/small&gt; &lt;span style="color: #cc0000;"&gt;'こんにちは。こんにちは。どなたかいませんか。おーい'&lt;/span&gt;&lt;i&gt;&lt;small&gt;(length=75)&lt;/small&gt;&lt;/i&gt;
&lt;/pre&gt;&lt;pre class="xdebug-var-dump" dir="ltr"&gt;&lt;small&gt;string&lt;/small&gt; &lt;span style="color: #cc0000;"&gt;'cJeJdB1Fa2_v4d9AcVB4dUcReJcBa2cAhSc4'&lt;/span&gt;&lt;i&gt;&lt;small&gt;(length=36)&lt;/small&gt;&lt;/i&gt;
&lt;/pre&gt;&lt;pre class="xdebug-var-dump" dir="ltr"&gt;&lt;small&gt;boolean&lt;/small&gt; &lt;span style="color: #75507b;"&gt;true&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
出力はこんな感じになりました。&lt;br /&gt;
文字コードは UTF-8 です。&lt;br /&gt;
length を見るとわかるように、半分以下のバイト数に圧縮されています。&lt;br /&gt;
そしてさらに、&lt;br /&gt;
文字列を英数字 [0-9A-Za-z_] のみからなる文字列 （AlphamericString） に変換しています。&lt;br /&gt;
&lt;br /&gt;
無事、解凍された文字列は元通りなんですが&lt;br /&gt;
実はこれ、ものすごいどころじゃくなく遅いです。&lt;br /&gt;
&lt;br /&gt;
一応、実装できたからいいかー。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-1747668074868949534?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HbLzXtymEhYRvpjHmU7sjTz6tHI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HbLzXtymEhYRvpjHmU7sjTz6tHI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HbLzXtymEhYRvpjHmU7sjTz6tHI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HbLzXtymEhYRvpjHmU7sjTz6tHI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/r22Hhcu59Q0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/1747668074868949534/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/02/alphamerichtmlphp.html#comment-form" title="8 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/1747668074868949534?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/1747668074868949534?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/r22Hhcu59Q0/alphamerichtmlphp.html" title="AlphamericHTMLをPHPで実装してみた" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>8</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/02/alphamerichtmlphp.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIFQHg4eCp7ImA9WxFRF0k.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-4632458069858158073</id><published>2010-02-14T15:41:00.004+09:00</published><updated>2010-05-02T04:35:11.630+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T04:35:11.630+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="Posql_Archive" /><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><category scheme="http://www.blogger.com/atom/ns#" term="AlphamericHTML" /><category scheme="http://www.blogger.com/atom/ns#" term="Posql_ECMA" /><category scheme="http://www.blogger.com/atom/ns#" term="関数" /><category scheme="http://www.blogger.com/atom/ns#" term="ECMA" /><category scheme="http://www.blogger.com/atom/ns#" term="posql" /><category scheme="http://www.blogger.com/atom/ns#" term="String" /><title>Posql Version 2.15 リリース。UNION実装</title><content type="html">Posql Version 2.15 をリリースしました。 &lt;br /&gt;
&lt;br /&gt;
ダウンロード：&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://sourceforge.jp/projects/posql/downloads/45964/posql-2.15.zip"&gt;posql-2.15.zip&lt;/a&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://sourceforge.jp/projects/posql/downloads/45964/posql-2.15.tar.gz"&gt;posql-2.15.tar.gz&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Version 2.15 は色々と面白い実装してます。&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;UNION, INTERSECT, EXCEPT [ALL] 演算子の実装。&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
サブクエリ内でも UNION できます。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: #333333; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; margin: 4px; padding: 4px;"&gt;SELECT 1 A, 2 B, 3 C
UNION 
SELECT 4, 5, 6 
UNION
SELECT 7, 8, 9
EXCEPT 
SELECT 4, 5, 6;
/*
結果: A  B  C
      1, 2, 3
      7, 8, 9
*/
&lt;/pre&gt;&lt;br /&gt;
とかもできます。&lt;br /&gt;
&lt;br /&gt;
あと、今まではエイリアス名を指定する演算子が AS のみだったのを改善して、&lt;br /&gt;
ホワイトスペース区切りでも適応可能になりました。&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Posql_ECMA クラスは JavaScript の String オブジェクト関数の殆どを互換実装。&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
新しいクラスも実装されています。&lt;br /&gt;
Posql_ECMA クラスは、ECMA/JavaScript における&lt;br /&gt;
String オブジェクトが持つ関数の殆どを&lt;br /&gt;
ピュア PHP で実装しています。&lt;br /&gt;
Posql_Unicode を適応してるので 内部文字コードも JavaScript と同じです。 &lt;br /&gt;
&lt;br /&gt;
Posql_ECMA は まだ実装のみでロジック内に取り入れていませんが、&lt;br /&gt;
今後の評価エンジンに採用する予定です。&lt;br /&gt;
ライブラリとして利用する場合は、&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="php" name="code" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: #333333; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; margin: 4px; padding: 4px;"&gt;&amp;lt;?php
$posql = new Posql;
$code = $posql-&amp;gt;ecma-&amp;gt;charCodeAt("あいうえお", 2);
echo $code; // output: 12358
$char = $posql-&amp;gt;ecma-&amp;gt;fromCharCode($code);
echo $char; // output: 'う'
?&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
↑みたいなことができます。 ecma プロパティからアクセスできます。&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;AlphamericHTMLをPHPに移植したクラス Posql_Archive&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Posql_Archive クラスでは、Lz77 圧縮アルゴリズムを用いた、&lt;br /&gt;
日本語に特化したエンコード・デコード関数を実装しています。&lt;br /&gt;
&lt;br /&gt;
JavaScript ライブラリ「&lt;a href="http://nurucom-archives.hp.infoseek.co.jp/digital/Alphameric-HTML.html"&gt;AlphamericHTML&lt;/a&gt;」を PHP で実装してしまいました。&lt;br /&gt;
使い方とかは &lt;a href="http://polygon-blog.blogspot.com/2010/02/alphamerichtmlphp.html"&gt;次のPOST&lt;/a&gt; を参考にしてみてください。&lt;br /&gt;
&lt;br /&gt;
その他、いくつかのバグを修正しました。&lt;br /&gt;
LIKE に バグがあったのは恥ずかしいです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-4632458069858158073?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JmTGDgk7jvEhh3p1aLuD9gqavtQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JmTGDgk7jvEhh3p1aLuD9gqavtQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JmTGDgk7jvEhh3p1aLuD9gqavtQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JmTGDgk7jvEhh3p1aLuD9gqavtQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/Ppin241vf8E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/4632458069858158073/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/02/posql-version-215-union.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/4632458069858158073?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/4632458069858158073?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/Ppin241vf8E/posql-version-215-union.html" title="Posql Version 2.15 リリース。UNION実装" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/02/posql-version-215-union.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8CQn05cSp7ImA9WxBWFE0.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-862184205045653571</id><published>2010-02-06T05:00:00.004+09:00</published><updated>2010-02-06T05:14:23.329+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-06T05:14:23.329+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="セッション" /><title>session_set_save_handlerを使ったセッションクラス作ってみた</title><content type="html">Posql データベースを用いて、&lt;br /&gt;
ユーザー定義のセッションハンドラクラスを作ってみました。&lt;br /&gt;
&lt;br /&gt;
以下みたいに使えます。 &lt;br /&gt;
&lt;pre class="php" name="code" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: #333333; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; margin: 4px; padding: 4px;"&gt;&amp;lt;?php
// Posql データベース クラスを読み込み
require_once 'posql.php';

// セッションクラスを読み込み
require_once 'posqlsession.php';

// データベースのパスを設定
session_save_path('./posql_session_counter.php');

// セッションスタート
Posql_Session::start();

// カウンターをインクリメント
if (empty($_SESSION['counter'])) {
    $_SESSION['counter'] = 1;
} else {
    $_SESSION['counter']++;
}

// 出力
header('Content-Type: text/plain;');

printf('session_id: %s', session_id());
print "\n";
printf('counter: %d', $_SESSION['counter']);

?&amp;gt;
&lt;/pre&gt;session_save_path() でデータベースのファイルパスを設定します。&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://feel.happy.nu/doc/posql/session/0.01/example.php"&gt;動作サンプルはここ&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://feel.happy.nu/doc/posql/session/0.01/posql-session-0.01.zip"&gt;ダウンロードはこちら&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
動作確認： PHP 4 / PHP 5&lt;br /&gt;
&lt;br /&gt;
こんどはこれ使って何かWebアプリ作ってみたいなぁ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-862184205045653571?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/diYlRADixJ8l3xWYruMOd9HmXuA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/diYlRADixJ8l3xWYruMOd9HmXuA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/diYlRADixJ8l3xWYruMOd9HmXuA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/diYlRADixJ8l3xWYruMOd9HmXuA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/5aWO4-_sVkg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/862184205045653571/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/02/sessionsetsavehandler.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/862184205045653571?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/862184205045653571?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/5aWO4-_sVkg/sessionsetsavehandler.html" title="session_set_save_handlerを使ったセッションクラス作ってみた" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/02/sessionsetsavehandler.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkINSHczfip7ImA9WxFRF0o.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-5439748412702413469</id><published>2010-01-31T22:14:00.001+09:00</published><updated>2010-05-02T12:23:19.986+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T12:23:19.986+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="きます" /><category scheme="http://www.blogger.com/atom/ns#" term="gz" /><category scheme="http://www.blogger.com/atom/ns#" term="tar" /><category scheme="http://www.blogger.com/atom/ns#" term="Project" /><category scheme="http://www.blogger.com/atom/ns#" term="Page" /><category scheme="http://www.blogger.com/atom/ns#" term="zip" /><category scheme="http://www.blogger.com/atom/ns#" term="安定版" /><category scheme="http://www.blogger.com/atom/ns#" term="バグフィックス" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="posql" /><category scheme="http://www.blogger.com/atom/ns#" term="Version" /><title>Posql Version 2.14 リリース。</title><content type="html">Posql Version 2.14 リリースしました。&lt;br /&gt;
&lt;br /&gt;
Version 2.14 は、バグフィックスが中心で 安定版です。&lt;br /&gt;
&lt;br /&gt;
ダウンロード：&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://sourceforge.jp/projects/posql/downloads/45690/posql-2.14.zip"&gt;posql-2.14.zip&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://sourceforge.jp/projects/posql/downloads/45690/posql-2.14.tar.gz"&gt;posql-2.14.tar.gz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
詳しいことは &lt;a href="http://sourceforge.jp/projects/posql/"&gt;Posql Project Page&lt;/a&gt; を参照してください。&lt;br /&gt;
&lt;br /&gt;
SQL リファレンスやドキュメントは &lt;a href="http://feel.happy.nu/doc/posql/"&gt;Posql パッケージ一覧&lt;/a&gt; から参照できます。&lt;br /&gt;
&lt;br /&gt;
なんだか今月はリリースラッシュだったなぁ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-5439748412702413469?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aetPbOgpP-EKdK_5MRKx0o_mWDo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aetPbOgpP-EKdK_5MRKx0o_mWDo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aetPbOgpP-EKdK_5MRKx0o_mWDo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aetPbOgpP-EKdK_5MRKx0o_mWDo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/yIgZt-EsOoo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/5439748412702413469/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/01/posql-version-214.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/5439748412702413469?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/5439748412702413469?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/yIgZt-EsOoo/posql-version-214.html" title="Posql Version 2.14 リリース。" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/01/posql-version-214.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEARno7cCp7ImA9WxFRF0o.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-5910255528434092807</id><published>2010-01-24T18:31:00.001+09:00</published><updated>2010-05-02T12:24:07.408+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T12:24:07.408+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tar" /><category scheme="http://www.blogger.com/atom/ns#" term="実装" /><category scheme="http://www.blogger.com/atom/ns#" term="Project" /><category scheme="http://www.blogger.com/atom/ns#" term="きた" /><category scheme="http://www.blogger.com/atom/ns#" term="posql" /><category scheme="http://www.blogger.com/atom/ns#" term="Version" /><category scheme="http://www.blogger.com/atom/ns#" term="gz" /><category scheme="http://www.blogger.com/atom/ns#" term="きます" /><category scheme="http://www.blogger.com/atom/ns#" term="くれる" /><category scheme="http://www.blogger.com/atom/ns#" term="すが" /><category scheme="http://www.blogger.com/atom/ns#" term="先週" /><category scheme="http://www.blogger.com/atom/ns#" term="Page" /><category scheme="http://www.blogger.com/atom/ns#" term="サブクエリ" /><category scheme="http://www.blogger.com/atom/ns#" term="など" /><category scheme="http://www.blogger.com/atom/ns#" term="zip" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="感想" /><title>Posql Version 2.13 リリース。安定版。</title><content type="html">Posql Version 2.13 リリースしました。&lt;br /&gt;
先週もリリースしたばかりですが…。&lt;br /&gt;
サブクエリも実装できたので、バグや不具合をとことん修正する方向です。&lt;br /&gt;
&lt;br /&gt;
詳しいことは &lt;a href="http://sourceforge.jp/projects/posql/"&gt;Posql Project Page&lt;/a&gt; を参照してください。&lt;br /&gt;
&lt;br /&gt;
SQL リファレンスやドキュメントは &lt;a href="http://feel.happy.nu/doc/posql/"&gt;Posql パッケージ一覧&lt;/a&gt; から参照できます。&lt;br /&gt;
&lt;br /&gt;
ダウンロード：&lt;br /&gt;
&lt;a href="http://sourceforge.jp/projects/posql/downloads/45592/posql-2.13.zip"&gt;posql-2.13.zip&lt;/a&gt; &lt;br /&gt;
&lt;a href="http://sourceforge.jp/projects/posql/downloads/45592/posql-2.13.tar.gz"&gt;posql-2.13.tar.gz &lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
遊んでくれると嬉しいです。&lt;br /&gt;
感想・バグ報告などもあればコメントください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-5910255528434092807?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rGzu2JqTXVOiuh31XY0ROH8aUsQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rGzu2JqTXVOiuh31XY0ROH8aUsQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rGzu2JqTXVOiuh31XY0ROH8aUsQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rGzu2JqTXVOiuh31XY0ROH8aUsQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/Y6uLK_xdx8o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/5910255528434092807/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/01/posql-version-213.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/5910255528434092807?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/5910255528434092807?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/Y6uLK_xdx8o/posql-version-213.html" title="Posql Version 2.13 リリース。安定版。" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/01/posql-version-213.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IHR30zeCp7ImA9WxBQF04.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-7207849624645375025</id><published>2010-01-17T22:38:00.000+09:00</published><updated>2010-01-17T22:38:56.380+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-17T22:38:56.380+09:00</app:edited><title>Posql Version 2.12 リリース。安定版のつもり</title><content type="html">Posql Version 2.12 をリリースしちゃいました。&lt;br /&gt;
先週 2.11 リリースしたばかりですが…。&lt;br /&gt;
今回はバグ修正のみです。&lt;br /&gt;
&lt;br /&gt;
不正な結合 (JOIN) の結果や、エイリアス名の解決、&lt;br /&gt;
その他 評価式での演算が失敗するバグが修正されています。&lt;br /&gt;
&lt;br /&gt;
詳しい変更点については&lt;a href="http://sourceforge.jp/projects/posql/"&gt;プロジェクトページ&lt;/a&gt;を参照してください。&lt;br /&gt;
&lt;br /&gt;
ドキュメント類は&lt;a href="http://feel.happy.nu/doc/posql/"&gt;パッケージカタログ&lt;/a&gt;を参照ください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
お手軽なデータベースPosqlで、ぜひ遊んでみてください。&lt;br /&gt;
バグ報告や要望もお待ちしてます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-7207849624645375025?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/H0bHYure14yN5SXddn_PPZQwbv0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/H0bHYure14yN5SXddn_PPZQwbv0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/H0bHYure14yN5SXddn_PPZQwbv0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/H0bHYure14yN5SXddn_PPZQwbv0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/N5j9b85sXNk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/7207849624645375025/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/01/posql-version-212.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/7207849624645375025?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/7207849624645375025?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/N5j9b85sXNk/posql-version-212.html" title="Posql Version 2.12 リリース。安定版のつもり" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/01/posql-version-212.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIHR3w8eCp7ImA9Wx5UF0g.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-3728447219577143341</id><published>2010-01-16T14:27:00.020+09:00</published><updated>2010-10-22T21:28:56.270+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-22T21:28:56.270+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><category scheme="http://www.blogger.com/atom/ns#" term="htdocs" /><category scheme="http://www.blogger.com/atom/ns#" term="wiki_encode" /><category scheme="http://www.blogger.com/atom/ns#" term="hoge" /><category scheme="http://www.blogger.com/atom/ns#" term="debug" /><category scheme="http://www.blogger.com/atom/ns#" term="関数" /><category scheme="http://www.blogger.com/atom/ns#" term="拡張" /><category scheme="http://www.blogger.com/atom/ns#" term="xampp" /><category scheme="http://www.blogger.com/atom/ns#" term="posql" /><title>便利で最高のデバッグ関数を目指して</title><content type="html">&lt;div style="text-align: center;"&gt;&lt;div style="background: none repeat scroll 0% 0% rgb(242, 209, 198); border: 2px solid rgb(216, 104, 76); color: #d8684c; margin: 8px; padding: 10px;"&gt;&lt;b&gt;新しいバージョンの debug 関数を &lt;a href="http://polygon-planet.blogspot.com/2010/10/vardumpprintrdebug.html"&gt;こっちのブログ&lt;/a&gt; で公開しています。&lt;br /&gt;
この記事の debug 関数は古いのでおすすめはしません。&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;PHPで開発時にデバッグするとき、&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;var_dump で十分な気もしますが&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;ちょっと足りないときもあります。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;Posql 開発時によく使っているデバッグ関数を公開します。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;Posql のソース中に debug($args); なんて記述が残ってたりします。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;debug&lt;/span&gt;&lt;br /&gt;
&lt;pre class="php" name="code" style="-moz-background-inline-policy: continuous; background: none repeat scroll 0% 0% white; border: 1px solid gray; color: #333333; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; margin: 4px; padding: 4px;"&gt;&amp;lt;?php
/**
 * It aims at the most best debugging function
 *
 * @param   mixed   the value of target
 * @param   string  optionally, the subtitle into the LEGEND tags
 * @return  mixed   the value of the first argument as it is returned
 * @version 1.09
 * @access  public
 * @static
 */
function debug($value, $title = ''){
 static $defaults = array(
   'args'     =&amp;gt; array(),
   'class'    =&amp;gt; '',
   'file'     =&amp;gt; '',
   'function' =&amp;gt; '',
   'line'     =&amp;gt; 0,
   'type'     =&amp;gt; '',
   'object'   =&amp;gt; null
 );
 $trace = function_exists('debug_backtrace') ? @debug_backtrace() : $defaults;
 $shift = ((array)array_shift($trace)) + $defaults;
 $trace = ((array)array_shift($trace)) + $defaults;
 $caller = '';
 if ($trace['type'] &amp;amp;&amp;amp; $trace['class'] &amp;amp;&amp;amp; $trace['function']) {
   $caller = $trace['class'] . $trace['type'] . $trace['function'];
 } else if ($trace['function']) {
   $caller = $trace['function'];
 }
 $trace = (is_array($trace) ? $trace : $shift) + $defaults;
 
 if (is_scalar($title)) {
   if (function_exists('wiki_encode')) {
     $title = wiki_encode($title);
   } else {
     $title = htmlspecialchars($title);
   }
 } else {
   $title = htmlspecialchars(var_export($title, true));
 }
 
 $file = $shift['file'];
 $line = $shift['line'];
 
 if ($file &amp;amp;&amp;amp; $line &amp;amp;&amp;amp; ($fp = @fopen($file, 'rb'))) {
   $buffer = '';
   $found  = false;
   $multi  = false;
   $retry  = false;
   $i = $line;
   while (!feof($fp)) {
     $found = false;
     $gets = fgets($fp);
     if (!--$i) {
       $buffer = $gets;
       if (preg_match('{debug\s*(\(.+\))[^;]*;}is', $gets, $match)) {
         $buffer = $match[1];
         $found = true;
         break;
       } else if (!$retry) {
         $retry = true;
         rewind($fp);
         $i = $line - 10;
         if ($i &amp;lt; 1) {
           $i = 1;
         }
         $buffer = '';
         continue;
       }
     } else if ($i &amp;lt; 0) {
       $buffer .= $gets;
       $pos = strpos(strtolower($buffer), 'debug');
       if ($pos !== false) {
         $buffer = substr($buffer, $pos);
       }
       if ($pos !== false 
        &amp;amp;&amp;amp; preg_match('{\(((?&amp;gt;[^()]+)|(?R))*\)(?=[^;]*;)}', $buffer, $match)) {
         $buffer = trim($match[0]);
         $buffer = preg_replace('&amp;lt;^[()]&amp;gt;', '', $buffer);
         $found = true;
         $multi = true;
         break;
       }
       if (strlen($buffer) &amp;gt; 0x10000) {
         break;
       }
     }
   }
   fclose($fp);
   if (!$found) {
     $title .= sprintf(' &amp;lt;strong&amp;gt;Not found the point of called!&amp;lt;/strong&amp;gt;');
   } else {
     if ($multi 
      &amp;amp;&amp;amp; preg_match('{^[^()]*?\(((?&amp;gt;[^()]+)|(?R))*\)}', $buffer, $match)) {
       $replace = strtr($match[0],
         array(
           '(' =&amp;gt; "\x01",
           ')' =&amp;gt; "\x02",
           ',' =&amp;gt; "\x03"
         )
       );
       $buffer = str_replace($match[0], $replace, $buffer);
     } else {
       $multi = false;
     }
     $buffer = preg_replace('{^\(|(?:,(?=[()])(?!\s*[$]\w).+|\))$|}s', 
                            '', $buffer);
     if ($title) {
       $buffer = preg_replace('{,\s*([\'"])?(?(1).*?\1|(?!\s*[$]\w).*)$}ms', 
                              '', $buffer);
     }
     if ($multi) {
       $buffer = strtr($buffer,
         array(
           "\x01" =&amp;gt; '(',
           "\x02" =&amp;gt; ')',
           "\x03" =&amp;gt; ','
         )
       );
     }
     $title = sprintf('%s &amp;lt;em&amp;gt;(%s)&amp;lt;/em&amp;gt;',
                      $title, htmlspecialchars($buffer));
   }
   unset($gets, $buffer);
 } else {
   $var = array_search($value, $GLOBALS);
   if ($value &amp;amp;&amp;amp; $var) {
     $var = '$' . $var;
   }
   if ($var) {
     $title = sprintf('%s &amp;lt;em&amp;gt;(%s)&amp;lt;/em&amp;gt;', $title, $var);
   }
 }
 
 ob_start();
 var_dump($value);
 $dump = str_replace('&amp;amp;apos;', '&amp;amp;#x27;', ob_get_contents());
 ob_end_clean();
 $node = extension_loaded('xdebug') ? 'div' : 'pre';
 printf(implode("\n",
     array(
       '&amp;lt;fieldset style="border:2px solid;padding-left:5px"&amp;gt;',
         '&amp;lt;legend style="font:x-small verdana;"&amp;gt;',
           '%s&amp;lt;small&amp;gt;@%s[%s#%u]&amp;lt;/small&amp;gt;',
         '&amp;lt;/legend&amp;gt;',
         '&amp;lt;%s&amp;gt;%s&amp;lt;/%s&amp;gt;',
       '&amp;lt;/fieldset&amp;gt;'
     )
   ),
   $title,
   htmlspecialchars($caller),
   htmlspecialchars(strtr($file, '\\', '/')),
   $line,
   $node,
   $dump,
   $node
 );
 flush();
 return $value;
}
?&amp;gt;
&lt;/pre&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;内部で wiki_encode という関数があれば使う仕様になっています。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;wiki_encode&lt;/span&gt;&lt;br /&gt;
&lt;pre class="php" name="code" style="-moz-background-inline-policy: continuous; background: none repeat scroll 0% 0% white; border: 1px solid gray; color: #333333; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; margin: 4px; padding: 4px;"&gt;&amp;lt;?php
/**
 * Replace simple wiki syntax with html
 *
 * @example  '**hoge**'
 * @results  '&amp;lt;em&amp;gt;hoge&amp;lt;/em&amp;gt;'
 *
 * @example  '***hoge***'
 * @results  '&amp;lt;strong&amp;gt;hoge&amp;lt;/strong&amp;gt;'
 *
 * @example  '*****hoge*****'
 * @results  '&amp;lt;strong&amp;gt;&amp;lt;em&amp;gt;hoge&amp;lt;/em&amp;gt;&amp;lt;/strong&amp;gt;'
 *
 * @example  '--hoge--'
 * @results  '&amp;lt;del&amp;gt;hoge&amp;lt;/del&amp;gt;'
 *
 * @example  '___hoge___'
 * @results  '&amp;lt;u&amp;gt;hoge&amp;lt;/u&amp;gt;'
 *
 * @example  'color=red:hoge;'
 * @results  '&amp;lt;span style="color:red;"&amp;gt;hoge&amp;lt;/span&amp;gt;'
 *
 * @example  'size=26px:hoge;'
 * @results  '&amp;lt;span style="font-size:26px;"&amp;gt;hoge&amp;lt;/span&amp;gt;'
 *
 * @example  'color=#ff9900:**hoge**;'
 * @results  '&amp;lt;span style="color:#ff9900;"&amp;gt;&amp;lt;em&amp;gt;hoge&amp;lt;/em&amp;gt;&amp;lt;/span&amp;gt;'
 *
 * @param  string  wiki syntax string
 * @return string  replaced html string
 */
function wiki_encode($string){
 $string = htmlspecialchars($string);
 $patterns = array(
   '&amp;lt;([*]{5,})(.+?)\1&amp;gt;su'
     =&amp;gt; 
   '&amp;lt;strong&amp;gt;&amp;lt;em&amp;gt;$2&amp;lt;/em&amp;gt;&amp;lt;/strong&amp;gt;',
   '&amp;lt;([*]{3,4})(.+?)\1&amp;gt;su'
     =&amp;gt; 
   '&amp;lt;strong&amp;gt;$2&amp;lt;/strong&amp;gt;',
   '&amp;lt;([*]{2})(.+?)\1&amp;gt;su'
     =&amp;gt; 
   '&amp;lt;em&amp;gt;$2&amp;lt;/em&amp;gt;',
   '&amp;lt;(_{3,})(.+?)\1&amp;gt;su'
     =&amp;gt; 
   '&amp;lt;u&amp;gt;$2&amp;lt;/u&amp;gt;',
   '&amp;lt;([=-]{2,})(.+?)\1&amp;gt;su'
     =&amp;gt; 
   '&amp;lt;del&amp;gt;$2&amp;lt;/del&amp;gt;',
   '&amp;lt;([%/]{2,})(.+?)\1&amp;gt;su'
     =&amp;gt; 
   '&amp;lt;em&amp;gt;$2&amp;lt;/em&amp;gt;',
   '&amp;lt;color[:=]([#]?\w+)[:=](.+?)(?:;|$)&amp;gt;imsu'
     =&amp;gt;
   '&amp;lt;span style="color:$1;"&amp;gt;$2&amp;lt;/span&amp;gt;',
   '&amp;lt;size[:=](\d+)\w*?[:=](.+?)(?:;|$)&amp;gt;imsu' 
     =&amp;gt;
   '&amp;lt;span style="font-size:$1px;"&amp;gt;$2&amp;lt;/span&amp;gt;'
 );
 foreach ($patterns as $pattern =&amp;gt; $replace) {
   $string = preg_replace($pattern, $replace, $string);
 }
 return $string;
}
?&amp;gt;
&lt;/pre&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;例として適当なスクリプトを作ってみます。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;hoge.php&lt;/span&gt;&lt;br /&gt;
&lt;pre class="php" name="code" style="-moz-background-inline-policy: continuous; background: none repeat scroll 0% 0% white; border: 1px solid gray; color: #333333; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; margin: 4px; padding: 4px;"&gt;&amp;lt;?php
require_once 'debug.php'; // debug関数が定義してあるファイル

class Hoge {

    var $name;

    function Hoge(){
        $this-&amp;gt;name = 'Hoge';
        debug($this,'*****Hoge*****');
    }

    function getName(){
        return $this-&amp;gt;name;
    }
}

function test(){
  $hoge = new Hoge();
  debug($hoge-&amp;gt;getName());
}

test();

?&amp;gt;
&lt;/pre&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;実行結果は以下のようになります。&lt;/span&gt;&lt;br /&gt;
&lt;div style="-moz-background-inline-policy: continuous; background: none repeat scroll 0% 0% white; color: #333333; font-family: verdana; margin: 4px; padding: 4px;"&gt;&lt;fieldset style="border: 2px solid; padding-left: 5px;"&gt;&lt;legend style="font: x-small verdana;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;b&gt;&lt;i&gt;Hoge&lt;/i&gt;&lt;/b&gt; &lt;i&gt;($this)&lt;/i&gt;&lt;small&gt;@Hoge-&amp;gt;Hoge[C:/xampp/htdocs/hoge.php#10]&lt;/small&gt;&lt;/span&gt;&lt;/legend&gt;&lt;br /&gt;
&lt;div&gt;&lt;pre class="xdebug-var-dump" dir="ltr"&gt;&lt;span style="font-size: x-small;"&gt;&lt;b&gt;object&lt;/b&gt;(&lt;i&gt;Hoge&lt;/i&gt;)[&lt;i&gt;1&lt;/i&gt;] 
&lt;i&gt;public&lt;/i&gt; 'name' &lt;span style="color: #888a85;"&gt;=&amp;gt;&lt;/span&gt;&lt;small&gt;string&lt;/small&gt; &lt;span style="color: #cc0000;"&gt;'Hoge'&lt;/span&gt; &lt;i&gt;(length=4)&lt;/i&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/fieldset&gt;&lt;fieldset style="border: 2px solid; padding-left: 5px;"&gt;&lt;legend style="font: x-small verdana;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;i&gt;($hoge-&amp;gt;getName())&lt;/i&gt;&lt;small&gt;@test[C:/xampp/htdocs/hoge.php#20]&lt;/small&gt;&lt;/span&gt;&lt;/legend&gt;&lt;div&gt;&lt;pre class="xdebug-var-dump" dir="ltr"&gt;&lt;span style="font-size: x-small;"&gt;&lt;small&gt;string&lt;/small&gt; &lt;span style="color: #cc0000;"&gt;'Hoge'&lt;/span&gt; &lt;i&gt;(length=4)&lt;/i&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/fieldset&gt;&lt;/div&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;実行された行番号、引数、ファイル名などがわかるようになります。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;拡張モジュール "xdebug" が有効になっていると見栄えがさらによくなります。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;ご自由にお使いください。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;もっと便利な関数や拡張があればおしえてくだしあ &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;Syntax Highlighter 入れたよ。いい感じ&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-3728447219577143341?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cmx9MD9gHCPczVIM4ptlgrz8958/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cmx9MD9gHCPczVIM4ptlgrz8958/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cmx9MD9gHCPczVIM4ptlgrz8958/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cmx9MD9gHCPczVIM4ptlgrz8958/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/m9080heIBto" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/3728447219577143341/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/01/blog-post_16.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/3728447219577143341?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/3728447219577143341?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/m9080heIBto/blog-post_16.html" title="便利で最高のデバッグ関数を目指して" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/01/blog-post_16.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cHSHs-cCp7ImA9WxFRF0o.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-4927811000313733742</id><published>2010-01-13T20:57:00.001+09:00</published><updated>2010-05-02T12:30:39.558+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T12:30:39.558+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SELECT" /><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="DBO" /><category scheme="http://www.blogger.com/atom/ns#" term="posql" /><category scheme="http://www.blogger.com/atom/ns#" term="CakePHP" /><category scheme="http://www.blogger.com/atom/ns#" term="PHPDoc" /><category scheme="http://www.blogger.com/atom/ns#" term="MDB2" /><category scheme="http://www.blogger.com/atom/ns#" term="EXISTS" /><category scheme="http://www.blogger.com/atom/ns#" term="PEAR" /><category scheme="http://www.blogger.com/atom/ns#" term="API" /><category scheme="http://www.blogger.com/atom/ns#" term="sourceforge" /><category scheme="http://www.blogger.com/atom/ns#" term="サブクエリ" /><category scheme="http://www.blogger.com/atom/ns#" term="DBMS" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><title>Posql Version 2.11 リリース。サブクエリ実装</title><content type="html">以下、&lt;a href="http://sourceforge.jp/forum/forum.php?forum_id=21703"&gt;sourceforge.jp のニュース&lt;/a&gt;引用 &lt;br /&gt;
&lt;br /&gt;
ピュア PHP のデータベースエンジン (DBMS) &lt;br /&gt;
Posql Version 2.11 がリリースされました。&lt;br /&gt;
&lt;br /&gt;
Version 2.11 では、&lt;br /&gt;
要望の多かった SELECT サブクエリ (副問い合わせ) が実装されています。&lt;br /&gt;
サブクエリは SELECT, INSERT, UPDATE または DELETE &lt;br /&gt;
の各ステートメントの中の評価式など、&lt;br /&gt;
式が使えるところであればどこにでも使用できます。&lt;br /&gt;
それにあわせて EXISTS, ANY, SOME, ALL 演算子が実装されました。&lt;br /&gt;
&lt;br /&gt;
また、Windows 上で動作が遅くなる不具合が解消されています。&lt;br /&gt;
&lt;br /&gt;
データベースの書式についての変更点はありません。&lt;br /&gt;
&lt;br /&gt;
CakePHP フレームワーク用の DBO ドライバ、&lt;br /&gt;
PEAR::DB, PEAR::MDB2 各ドライバは、&lt;br /&gt;
いくつかのバグがフィックスされています。&lt;br /&gt;
&lt;br /&gt;
ご利用の際は最新バージョンにアップデートすることをお勧めします。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
なお、実装と変更にあわせてパッケージに同梱されている&lt;br /&gt;
SQL,API ドキュメント、マニュアル、サンプル等が更新されています。&lt;br /&gt;
&lt;br /&gt;
より詳しい変更点については更新履歴を参照してください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
参照リンク:&lt;br /&gt;
- Posql パッケージカタログ&lt;br /&gt;
&lt;a href="http://feel.happy.nu/doc/posql/"&gt;http://feel.happy.nu/doc/posql/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
- Posql の概要やパッケージの解説など&lt;br /&gt;
&lt;a href="http://feel.happy.nu/doc/posql/posql.cat.manual.html"&gt;http://feel.happy.nu/doc/posql/posql.cat.manual.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
- CakePHP で Posql を使うための手順&lt;br /&gt;
&lt;a href="http://feel.happy.nu/doc/posql/posql.cakephp.howto.html"&gt;http://feel.happy.nu/doc/posql/posql.cakephp.howto.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
- Posql が サポートしている SQL 文法 リファレンス&lt;br /&gt;
&lt;a href="http://feel.happy.nu/doc/posql/posql.sql.manual.html"&gt;http://feel.happy.nu/doc/posql/posql.sql.manual.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
- Posql の クラスメソッド API リファレンス&lt;br /&gt;
&lt;a href="http://feel.happy.nu/doc/posql/posql.api.manual.html"&gt;http://feel.happy.nu/doc/posql/posql.api.manual.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
- PHPDoc から生成された ソース ドキュメント(サイズが大きいので注意してください)&lt;br /&gt;
&lt;a href="http://feel.happy.nu/doc/posql/posql.src.manual.html"&gt;http://feel.happy.nu/doc/posql/posql.src.manual.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
- テスト稼動中のWebメモ帳(どなたでも書き込めます)&lt;br /&gt;
&lt;a href="http://feel.happy.nu/doc/posql/memo.php"&gt;http://feel.happy.nu/doc/posql/memo.php&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-4927811000313733742?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/V95rEZ2FiLHHdC5yqW0jaZYSdw0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V95rEZ2FiLHHdC5yqW0jaZYSdw0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/V95rEZ2FiLHHdC5yqW0jaZYSdw0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V95rEZ2FiLHHdC5yqW0jaZYSdw0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/YtZoiiBvHCg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/4927811000313733742/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/01/posql-version-211.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/4927811000313733742?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/4927811000313733742?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/YtZoiiBvHCg/posql-version-211.html" title="Posql Version 2.11 リリース。サブクエリ実装" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/01/posql-version-211.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MARXszfip7ImA9WxBRGUo.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-24071048989544679</id><published>2010-01-09T03:30:00.000+09:00</published><updated>2010-01-09T03:30:44.586+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-09T03:30:44.586+09:00</app:edited><title>ウイルス対策ソフト起動中はロック状態のままになる可能性がある</title><content type="html">&lt;span style="font-size: x-small;"&gt;Posql 新バージョン開発中です。 &lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;なんかデバッグ中にデッドロック状態が多すぎと思ったら、&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;a href="http://polygon-blog.blogspot.com/2010/01/posql209210.html"&gt;前の投稿でのロックのテスト&lt;/a&gt;みたいに&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;ものすごい勢いでファイルやディレクトリ消したり作ったりすると、&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;カスペルスキーとかavast! 等のウイルス対策ソフトが起動してる場合&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;ディレクトリ削除が無視されてデッドロックになってしまうようです。 &lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;Windowsで開発する場合、その現象になったら&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;ウイルススキャンを一時停止すると解消するかもしれないです。&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-24071048989544679?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Y-SyAl7NZOIM-7mGKOeV1CuFTvQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Y-SyAl7NZOIM-7mGKOeV1CuFTvQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Y-SyAl7NZOIM-7mGKOeV1CuFTvQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Y-SyAl7NZOIM-7mGKOeV1CuFTvQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/NW1FX1FKK8E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/24071048989544679/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/01/blog-post.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/24071048989544679?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/24071048989544679?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/NW1FX1FKK8E/blog-post.html" title="ウイルス対策ソフト起動中はロック状態のままになる可能性がある" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/01/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YCR3Y_cCp7ImA9WxFRF0o.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-2363859132390924244</id><published>2010-01-04T23:56:00.001+09:00</published><updated>2010-05-02T12:32:46.848+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T12:32:46.848+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="あまり" /><category scheme="http://www.blogger.com/atom/ns#" term="しようかな" /><category scheme="http://www.blogger.com/atom/ns#" term="みなして" /><category scheme="http://www.blogger.com/atom/ns#" term="ストレス" /><category scheme="http://www.blogger.com/atom/ns#" term="なって" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="ロック" /><category scheme="http://www.blogger.com/atom/ns#" term="mkdir" /><category scheme="http://www.blogger.com/atom/ns#" term="開発" /><category scheme="http://www.blogger.com/atom/ns#" term="じゃないけど" /><category scheme="http://www.blogger.com/atom/ns#" term="って" /><category scheme="http://www.blogger.com/atom/ns#" term="原因" /><category scheme="http://www.blogger.com/atom/ns#" term="standAlone" /><category scheme="http://www.blogger.com/atom/ns#" term="ならないよ" /><category scheme="http://www.blogger.com/atom/ns#" term="OS" /><category scheme="http://www.blogger.com/atom/ns#" term="なん" /><category scheme="http://www.blogger.com/atom/ns#" term="わかってます" /><category scheme="http://www.blogger.com/atom/ns#" term="なる" /><title>Windowsで2.10動かすと遅すぎる件</title><content type="html">&lt;span style="font-size: x-small;"&gt;2.10 になって排他ロックは問題なくなったけど、&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;Windows上で動かすとあまりにも遅すぎる。。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;とてもじゃないけど、&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;デバッグしながらローカル環境での開発でストレスになる。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt; 原因はわかってます。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;b&gt;mkdir()&lt;/b&gt; でロックしてるから。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;Windowsでのmkdirが遅すぎてお話にならないよ。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;なんとかしなきゃ。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;OSがWindowsだったらロックしないようにするとか…&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;じゃダメ。Windowsサーバー使う可能性もあるから。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;あまりやりたくなかったけど&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;setStandAloneMode(true);&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;という感じのメソッド作って、&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;true だったら他からアクセスしてこない環境とみなして&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;mkdirロックは行わない設定できるようにしようかな。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;でも、standAlone て&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;なんか意味が違う気がする。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;いいネーミングないかなぁ。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;setAutoLock(); なんか変？&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;なにかアイディアあったらお願いします。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-2363859132390924244?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DruBGYzyb1tCNYuiuXPrPBAfSbo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DruBGYzyb1tCNYuiuXPrPBAfSbo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DruBGYzyb1tCNYuiuXPrPBAfSbo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DruBGYzyb1tCNYuiuXPrPBAfSbo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/XmnbNOaFkc0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/2363859132390924244/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/01/windows210.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/2363859132390924244?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/2363859132390924244?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/XmnbNOaFkc0/windows210.html" title="Windowsで2.10動かすと遅すぎる件" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/01/windows210.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEINRX0_eSp7ImA9WxFRF0k.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-46145689550177007</id><published>2010-01-03T22:41:00.002+09:00</published><updated>2010-05-02T04:36:34.341+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T04:36:34.341+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><category scheme="http://www.blogger.com/atom/ns#" term="lock" /><category scheme="http://www.blogger.com/atom/ns#" term="排他処理" /><category scheme="http://www.blogger.com/atom/ns#" term="test" /><title>【Posql】排他ロックの強度を2.09と2.10で比較</title><content type="html">&lt;span style="font-size: x-small;"&gt;Posql 2.09 と 2.10 の排他ロックがどれくらい変わったのかテストしてみました。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;と言ってもテストしてたのは 2.10開発中の時のことで、この記事は まとめ みたいな感じです。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;まず以下のようなスクリプトを用意しました。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;b&gt;lock-test.php&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="php" name="code" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: black; font-family: 'MS Gothic',monospace; font-size: x-small; line-height: 100%; padding: 4px;"&gt;&amp;lt;?php
require_once 'posql-2.09/posql.php'; // Posql 2.09 でテスト

defined('E_STRICT') or define('E_STRICT', 2048);
error_reporting(E_ALL | E_STRICT);
header('Content-Type: text/html; charset:UTF-8');
ob_implicit_flush(1);
set_time_limit(300);

$method = 'INSERT';
//$method = 'UPDATE';
//$method = 'DELETE';
if (!empty($_GET['select'])) {
  $method = 'SELECT';
}
$limit = 500;
$msec = sprintf('%01.4f', array_sum(explode(' ', microtime())));
$uptime = empty($_GET['ajax']) ? $msec : $_GET['ajax'];
$path = 'C:/tmp/__posql_lock_test_';
$posql = new Posql($path);
$sql = "CREATE TABLE IF NOT EXISTS lock_test (
  id           INTEGER PRIMARY KEY,
  instance_id  VARCHAR(255),
  microtime    INTEGER
)";
$stmt = $posql-&amp;gt;prepare($sql);
$stmt-&amp;gt;execute();
$sql = "CREATE TABLE IF NOT EXISTS counter (
  count        INTEGER,
  data         TEXT
)";
$stmt = $posql-&amp;gt;prepare($sql);
$stmt-&amp;gt;execute();
if (empty($_GET)) {
  $sql = "INSERT INTO counter (count, data) VALUES (?, ?)";
  $stmt = $posql-&amp;gt;prepare($sql);
  $stmt-&amp;gt;execute(array(1, "test"));
}

if (!empty($_GET['transaction'])) {
  ?&amp;gt;
  &amp;lt;html&amp;gt;
  &amp;lt;head&amp;gt;
  &amp;lt;title&amp;gt;Transaction&amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
  &amp;lt;script&amp;gt;
  var end = false;
  onload = function(){ end = true };
  function scrollToBottom(){
    if (!end) {
      window.scrollTo(0, document.body.scrollHeight);
      if (!document.getElementById("endTrans")) {
        setTimeout(scrollToBottom, 10);
      }
    }
  }
  scrollToBottom();
  &amp;lt;/script&amp;gt;
  &amp;lt;?php
  printf('&amp;lt;h1&amp;gt;id: %s&amp;lt;/h1&amp;gt;', $posql-&amp;gt;getId());
  $begin = $posql-&amp;gt;beginTransaction();
  printf('&amp;lt;h2&amp;gt;Begin: %s&amp;lt;/h2&amp;gt;',
     $begin ? '&amp;lt;span style="color:blue"&amp;gt;true&amp;lt;/span&amp;gt;' 
            : '&amp;lt;span style="color:red"&amp;gt;false&amp;lt;/span&amp;gt;'
  );
  if (!$begin) {
    echo '&amp;lt;h1&amp;gt;Abort&amp;lt;/h1&amp;gt;';
    echo '&amp;lt;div&amp;gt;Error:&amp;lt;/div&amp;gt;';
    echo '&amp;lt;pre&amp;gt;';
    print_r($posql-&amp;gt;getErrors());
    echo '&amp;lt;/pre&amp;gt;';
    die;
  }
  printf('&amp;lt;ol&amp;gt;');
  for ($i = 0; $i &amp;lt; 100; $i++) {
    $sql = "INSERT INTO lock_test (instance_id, microtime) VALUES (?, ?)";
    $stmt = $posql-&amp;gt;prepare($sql);
    $time = sprintf('%01.4f', array_sum(explode(' ', microtime())));
    $stmt-&amp;gt;execute(array('transaction', $time));
    printf('&amp;lt;li&amp;gt;INSERT: microtime = %s&amp;lt;/li&amp;gt;', $time);
    $posql-&amp;gt;sleep();
  }
  printf('&amp;lt;/ol&amp;gt;');
  /*
  printf('&amp;lt;h2 id="endTrans"&amp;gt;Commit: %s&amp;lt;/h2&amp;gt;', 
    $posql-&amp;gt;commit() ? '&amp;lt;span style="color:blue"&amp;gt;true&amp;lt;/span&amp;gt;' 
                     : '&amp;lt;span style="color:red"&amp;gt;false&amp;lt;/span&amp;gt;'
  );
  */
  printf('&amp;lt;h2 id="endTrans"&amp;gt;RollBack: %s&amp;lt;/h2&amp;gt;',
    $posql-&amp;gt;rollBack() ? '&amp;lt;span style="color:blue"&amp;gt;true&amp;lt;/span&amp;gt;' 
                       : '&amp;lt;span style="color:red"&amp;gt;false&amp;lt;/span&amp;gt;'
  );
  ?&amp;gt;
  &amp;lt;/body&amp;gt;
  &amp;lt;/html&amp;gt;
  &amp;lt;?php
  exit;
}

switch ($method) {
  case 'INSERT':
      $limit = 500;
      $sql = "INSERT INTO lock_test (instance_id, microtime) VALUES (?, ?)";
      $stmt = $posql-&amp;gt;prepare($sql);
      $stmt-&amp;gt;execute(array($posql-&amp;gt;getId(), $msec));
      break;
  case 'UPDATE':
      $limit = 500;
      $sql = "UPDATE counter SET count = 1 + count WHERE data = ?";
      $stmt = $posql-&amp;gt;prepare($sql);
      $stmt-&amp;gt;execute(array("test"));
      break;
  case 'DELETE':
      $limit = 50;
      $sql = "DELETE FROM lock_test WHERE rowid = ?";
      $stmt = $posql-&amp;gt;prepare($sql);
      $stmt-&amp;gt;execute(array(substr($msec, -1)));
      break;
  case 'SELECT':
      $limit = 500;
      $sql = "SELECT * FROM lock_test WHERE rowid = ?";
      $stmt = $posql-&amp;gt;prepare($sql);
      $stmt-&amp;gt;execute(array(rand()));
      break;
}

if (empty($_GET['ajax'])) {
  ?&amp;gt;
  &amp;lt;html&amp;gt;
  &amp;lt;head&amp;gt;
  &amp;lt;title&amp;gt;&amp;lt;?php echo $method ?&amp;gt; - Posql Lock Test&amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
  &amp;lt;h1&amp;gt;&amp;lt;?php echo $method ?&amp;gt;&amp;lt;/h1&amp;gt;
  &amp;lt;ol id="result"&amp;gt;
    &amp;lt;li&amp;gt;
    &amp;lt;?php
    printf('%s: %01.4f', $method, $msec);
    if ($posql-&amp;gt;isError()) {
      printf('&amp;lt;div style="color:red"&amp;gt;%s&amp;lt;/div&amp;gt;', $posql-&amp;gt;lastError());
    }
    ?&amp;gt;
    &amp;lt;/li&amp;gt;
  &amp;lt;/ol&amp;gt;
  &amp;lt;script&amp;gt;
  (function(){
    var d = document, w = window, limit = Number("&amp;lt;?php echo $limit ?&amp;gt;") - 1;
    function ajax(){
      var x = w.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") :
                                new XMLHttpRequest(),
          url = "&amp;lt;?php echo $_SERVER['SCRIPT_NAME'] ?&amp;gt;" +
                  "?ajax=&amp;lt;?php echo $msec ?&amp;gt;" +
                  "&amp;amp;select=&amp;lt;?php echo $method == 'SELECT' ? 1 : 0 ?&amp;gt;";
      x.open("GET", url, true);
      x.onreadystatechange = function(){
        if (x.readyState == 4) {
          var li = d.createElement("li"), div = d.createElement("div");
          div.innerHTML = x.responseText;
          li.appendChild(div);
          d.getElementById("result").appendChild(li);
          w.scrollTo(0, d.body.scrollHeight);
        }
      };
      x.send("");
    }
    function run(){
      ajax();
      if (--limit &amp;gt; 0) {
        setTimeout(run, Math.random() * 10);
      }
    }
    run();
  })();
  &amp;lt;/script&amp;gt;
  &amp;lt;/body&amp;gt;
  &amp;lt;/html&amp;gt;
  &amp;lt;?php
} else {
  switch ($method) {
    case 'INSERT':
        printf('INSERT: %01.4f', $msec);
        break;
    case 'UPDATE':
        $stmt = $posql-&amp;gt;prepare("SELECT count FROM counter WHERE data = ?");
        $stmt-&amp;gt;execute(array("test"));
        printf('UPDATE: &amp;lt;strong&amp;gt;%s&amp;lt;/strong&amp;gt;', $stmt-&amp;gt;fetchColumn());
        break;
    case 'DELETE':
        printf('DELETE: rowid = %d', substr($msec, -1));
        break;
    case 'SELECT':
        echo '&amp;lt;pre&amp;gt;';
        print_r($stmt-&amp;gt;fetchAll('assoc'));
        echo '&amp;lt;/pre&amp;gt;';
        break;
  }
  if ($posql-&amp;gt;isError()) {
    printf('&amp;lt;div style="color:red"&amp;gt;%s&amp;lt;/div&amp;gt;', $posql-&amp;gt;lastError());
  }
}
exit;
?&amp;gt;
&lt;/pre&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
直接アクセスすると INSERT が 500回、Ajaxで自身にリクエストを発行します。&lt;br /&gt;
タブブラウザで INSERT, INSERT と2つのタブで開くと&lt;br /&gt;
合計1000列、それぞれ別プロセスでインサートされます。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;lock-test.php?select=1 でアクセスすると&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;SELECTを 500回、ランダムな rowid に対してAjaxでリクエストを発行します。&lt;/span&gt;&lt;br /&gt;
&lt;div style="color: #ff6633;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;b&gt;"SELECT * FROM lock_test WHERE rowid = ?"&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span style="font-size: x-small;"&gt;? は rand() によってランダムな数値になります。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;つまり上のスクリプトは、ミリ秒単位での同時アクセスを 500 回以上 実行することになります。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;さっそく実行してみます。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;まずSELECT を実行して…&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/_4TAXTQzJyY4/S0CBzIkYSkI/AAAAAAAAABQ/hS3xw_ttLSk/s1600-h/posql-lock-test-01-select.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_4TAXTQzJyY4/S0CBzIkYSkI/AAAAAAAAABQ/hS3xw_ttLSk/s200/posql-lock-test-01-select.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;すぐに、INSERT、INSERT と 500 x 2 の 1000 インサートを実行するようにします。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;1個目のタブ&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_4TAXTQzJyY4/S0CCRFn0BsI/AAAAAAAAABY/TKGtIIwd3Pk/s1600-h/posql-lock-test-01-insert01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_4TAXTQzJyY4/S0CCRFn0BsI/AAAAAAAAABY/TKGtIIwd3Pk/s200/posql-lock-test-01-insert01.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;2個目のタブ&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/_4TAXTQzJyY4/S0CCYHx7-DI/AAAAAAAAABg/IgI5up2av7g/s1600-h/posql-lock-test-01-insert02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_4TAXTQzJyY4/S0CCYHx7-DI/AAAAAAAAABg/IgI5up2av7g/s200/posql-lock-test-01-insert02.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;その間、SELECTを見ると&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/_4TAXTQzJyY4/S0CCoQrlrlI/AAAAAAAAABo/LaGsQ_ocZMI/s1600-h/posql-lock-test-01-select-tmp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/S0CCoQrlrlI/AAAAAAAAABo/LaGsQ_ocZMI/s200/posql-lock-test-01-select-tmp.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;ランダムな 数値がヒットした場合、結果が表示されます。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;そして全部実行されるのを待ちます。&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/_4TAXTQzJyY4/S0CDBalWBTI/AAAAAAAAABw/dAwBjwDhkYY/s1600-h/posql-lock-test-01-insert03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_4TAXTQzJyY4/S0CDBalWBTI/AAAAAAAAABw/dAwBjwDhkYY/s200/posql-lock-test-01-insert03.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;全てのタブが読み込み完了されたら、PosqlAdminで結果を確認してみます。&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_4TAXTQzJyY4/S0CKoifyItI/AAAAAAAAACI/kBYAfsn5diE/s1600-h/posql-lock-test-01-posqladmin-01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_4TAXTQzJyY4/S0CKoifyItI/AAAAAAAAACI/kBYAfsn5diE/s200/posql-lock-test-01-posqladmin-01.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;↓&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/_4TAXTQzJyY4/S0CK3bDpDzI/AAAAAAAAACQ/zAzQWkyjN50/s1600-h/posql-lock-test-01-posqladmin-02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/S0CK3bDpDzI/AAAAAAAAACQ/zAzQWkyjN50/s200/posql-lock-test-01-posqladmin-02.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/_4TAXTQzJyY4/S0COdVa1kzI/AAAAAAAAACo/_vLqQDRjl6g/s1600-h/posql-lock-test-01-posqladmin-03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/S0COdVa1kzI/AAAAAAAAACo/_vLqQDRjl6g/s200/posql-lock-test-01-posqladmin-03.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;そもそも結果が &lt;b&gt;998 rows &lt;/b&gt;と、 1000 じゃないのが変です。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;途中の列をよく見ると…&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/_4TAXTQzJyY4/S0CLUNIOtxI/AAAAAAAAACY/Ayis6QpgLUY/s1600-h/posql-lock-test-01-posqladmin-02-01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/S0CLUNIOtxI/AAAAAAAAACY/Ayis6QpgLUY/s200/posql-lock-test-01-posqladmin-02-01.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;赤で囲った部分の列が重複してるのがわかります。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;下のようにグループ化してみるとよくわかります。&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/_4TAXTQzJyY4/S0CLuI4qjOI/AAAAAAAAACg/jne422Jtwfc/s1600-h/posql-lock-test-01-posqladmin-02-group.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/S0CLuI4qjOI/AAAAAAAAACg/jne422Jtwfc/s200/posql-lock-test-01-posqladmin-02-group.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;id 732 なんて3つになっちゃってます。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;排他処理にて&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt; 2つのプロセス両方とも ロック取得に成功してしまってるのが原因です。&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;これでは同時アクセスに厳しいです。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt; &lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt; 続いて UPDATE を試してみます。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;lock-test.phpのコメントアウトを修正して実行します。&lt;/span&gt;&lt;br /&gt;
&lt;pre style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: black; font-family: monospace; font-size: x-small; line-height: 100%; padding: 4px;"&gt;&amp;lt;?php
require_once 'posql-2.09/posql.php'; // Posql 2.09 でテスト

...

//$method = 'INSERT';
$method = 'UPDATE';
//$method = 'DELETE';

...

?&amp;gt;
&lt;/pre&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt; INSERTと同じ要領で実行します。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;1番目のタブ &lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://4.bp.blogspot.com/_4TAXTQzJyY4/S0CTnINl0bI/AAAAAAAAACw/DIkqrMIZ0WQ/s1600-h/posql-lock-test-01-update-01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_4TAXTQzJyY4/S0CTnINl0bI/AAAAAAAAACw/DIkqrMIZ0WQ/s200/posql-lock-test-01-update-01.png" /&gt;&lt;/a&gt; &lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;2番目のタブ&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/_4TAXTQzJyY4/S0CT6Y7ibwI/AAAAAAAAAC4/9VC6c_Lt2uk/s1600-h/posql-lock-test-01-update-02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_4TAXTQzJyY4/S0CT6Y7ibwI/AAAAAAAAAC4/9VC6c_Lt2uk/s200/posql-lock-test-01-update-02.png" /&gt;&lt;/a&gt;&amp;nbsp; &lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;うまくいってるかと思いきや…&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/_4TAXTQzJyY4/S0CUDEneQfI/AAAAAAAAADA/AFakT1YRJj4/s1600-h/posql-lock-test-01-update-03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/S0CUDEneQfI/AAAAAAAAADA/AFakT1YRJj4/s200/posql-lock-test-01-update-03.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;途中で結果が表示されなくなってしまいました。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;PosqlAdminで確認すると…&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://4.bp.blogspot.com/_4TAXTQzJyY4/S0CUOz0GDnI/AAAAAAAAADI/4VQWTxVHHEk/s1600-h/posql-lock-test-01-update-posqladmin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_4TAXTQzJyY4/S0CUOz0GDnI/AAAAAAAAADI/4VQWTxVHHEk/s200/posql-lock-test-01-update-posqladmin.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;結果セットが空になってしまいました。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;列が何らかのタイミングで壊れてしまったようです。&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;これでは排他処理に弱すぎます。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;そして、修正された 最新バージョン 2.10 で同じテストを行います。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;lock-test.php を修正。 &lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;pre style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: black; font-family: monospace; font-size: x-small; line-height: 100%; padding: 4px;"&gt;&amp;lt;?php
require_once 'posql-2.10/posql.php'; // Posql 2.10 でテスト
...
$method = 'INSERT';
//$method = 'UPDATE';
//$method = 'DELETE';
...
?&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;同じやり方で INSERT から行います。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/_4TAXTQzJyY4/S0CWp67dwRI/AAAAAAAAADQ/3KTDx39Tt4k/s1600-h/posql-lock-test-02-insert01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_4TAXTQzJyY4/S0CWp67dwRI/AAAAAAAAADQ/3KTDx39Tt4k/s200/posql-lock-test-02-insert01.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;3つのタブで同じように INSERT, INSERT, SELECT を同時実行します。&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;2.10 は Windows で実行する場合、&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;mkdir() ロックの関係で速度が遅いと感じるかもしれません。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;これは UNIX系などの Windows以外のサーバーなら速度に支障はありません。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/_4TAXTQzJyY4/S0CY-vT8abI/AAAAAAAAADY/rZACwDDYu3c/s1600-h/posql-lock-test-02-insert02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/S0CY-vT8abI/AAAAAAAAADY/rZACwDDYu3c/s200/posql-lock-test-02-insert02.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;全てのタブが完了してから、PosqlAdminで確認します。&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/_4TAXTQzJyY4/S0CZNtEcZfI/AAAAAAAAADg/YwufQtUmegM/s1600-h/posql-lock-test-02-insert03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/S0CZNtEcZfI/AAAAAAAAADg/YwufQtUmegM/s200/posql-lock-test-02-insert03.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;ぴったり &lt;b&gt;1000 rows &lt;/b&gt;になっています。&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/_4TAXTQzJyY4/S0CZhaCLV0I/AAAAAAAAADo/1x6_4npfkuo/s1600-h/posql-lock-test-02-insert04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_4TAXTQzJyY4/S0CZhaCLV0I/AAAAAAAAADo/1x6_4npfkuo/s200/posql-lock-test-02-insert04.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;重複もなく、最後の id も 1000 になっています。 &lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;続いてUPDATE。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;lock-test.php を UPDATEに修正します。 &lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;pre style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white none repeat scroll 0% 0%; border: 1px solid gray; color: black; font-family: monospace; font-size: x-small; line-height: 100%; padding: 4px;"&gt;&amp;lt;?php
require_once 'posql-2.10/posql.php'; // Posql 2.10 でテスト
...
//$method = 'INSERT';
$method = 'UPDATE';
//$method = 'DELETE';
...
?&amp;gt;
&lt;/pre&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;そしてSELECTタブ、UPDATEタブ(1)、UPDATEタブ(2) の順で実行。&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/_4TAXTQzJyY4/S0CbjMhMNaI/AAAAAAAAADw/SOZp8LHVZ-0/s1600-h/posql-lock-test-02-update-01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_4TAXTQzJyY4/S0CbjMhMNaI/AAAAAAAAADw/SOZp8LHVZ-0/s200/posql-lock-test-02-update-01.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;なお、途中でトランザクションを実行してみました。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;このスクリプトは&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;lock-test.php?transaction=1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;とアクセスするとトランザクションを開始して100回インサート後、&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;コミットまたはロールバックします。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;今回はロールバックしてみました。&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/_4TAXTQzJyY4/S0CcCuL5ugI/AAAAAAAAAD4/akF7KSep5J0/s1600-h/posql-lock-test-02-transaction-01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_4TAXTQzJyY4/S0CcCuL5ugI/AAAAAAAAAD4/akF7KSep5J0/s200/posql-lock-test-02-transaction-01.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;トランザクションの開始と同時に、&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;他の3つのタブ（UPDATE、UPDATE、SELECT） はその時点で停止（sleep）します。&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/_4TAXTQzJyY4/S0CccAqAgtI/AAAAAAAAAEA/mE9V6xPJx3U/s1600-h/posql-lock-test-02-transaction-02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_4TAXTQzJyY4/S0CccAqAgtI/AAAAAAAAAEA/mE9V6xPJx3U/s200/posql-lock-test-02-transaction-02.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;ロールバックが成功したようです。&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;他のタブはまた処理を再開しています。&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/_4TAXTQzJyY4/S0CdMgRMhdI/AAAAAAAAAEI/P7CeqjYxBq8/s1600-h/posql-lock-test-02-update-02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/S0CdMgRMhdI/AAAAAAAAAEI/P7CeqjYxBq8/s200/posql-lock-test-02-update-02.png" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;処理が終了すると、&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;カウントはぴったり 1001 （1000 + 1） になりました。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;Posql バージョン 2.10 で修正された排他ロックにより、&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;同時アクセスが起きてもデータが壊れたりしないで&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;正常に更新できることが確認できました。&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;長くなりました…。&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;最後まで見てくれた方ありがとうです。 &lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-46145689550177007?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9nyu1kn_A7TR4ZyiP8XPOfJLncw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9nyu1kn_A7TR4ZyiP8XPOfJLncw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9nyu1kn_A7TR4ZyiP8XPOfJLncw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9nyu1kn_A7TR4ZyiP8XPOfJLncw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/vY0nHhUVh6k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/46145689550177007/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2010/01/posql209210.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/46145689550177007?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/46145689550177007?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/vY0nHhUVh6k/posql209210.html" title="【Posql】排他ロックの強度を2.09と2.10で比較" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_4TAXTQzJyY4/S0CBzIkYSkI/AAAAAAAAABQ/hS3xw_ttLSk/s72-c/posql-lock-test-01-select.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2010/01/posql209210.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAESXk5eSp7ImA9WxFRF0o.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-3000449784688060979</id><published>2009-12-29T23:21:00.004+09:00</published><updated>2010-05-02T12:25:08.721+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T12:25:08.721+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="しよう" /><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><category scheme="http://www.blogger.com/atom/ns#" term="あわせて" /><category scheme="http://www.blogger.com/atom/ns#" term="ピュアPHP" /><category scheme="http://www.blogger.com/atom/ns#" term="posql" /><category scheme="http://www.blogger.com/atom/ns#" term="DBMS" /><category scheme="http://www.blogger.com/atom/ns#" term="英語版" /><title>Posql Version 2.10 リリースしました</title><content type="html">ピュアPHPのDBMS「Posql」です。&lt;br /&gt;
英語版もあわせて &lt;b&gt;2.10&lt;/b&gt; リリースしました。&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://sourceforge.jp/forum/forum.php?forum_id=21545"&gt;http://sourceforge.jp/forum/forum.php?forum_id=21545&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
ご飯にしよう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-3000449784688060979?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PZg4Wk9Eh0HIVE_n63yMGn8i9Nk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PZg4Wk9Eh0HIVE_n63yMGn8i9Nk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PZg4Wk9Eh0HIVE_n63yMGn8i9Nk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PZg4Wk9Eh0HIVE_n63yMGn8i9Nk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/lfw_Q8ec1c4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/3000449784688060979/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2009/12/posql-version-210.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/3000449784688060979?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/3000449784688060979?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/lfw_Q8ec1c4/posql-version-210.html" title="Posql Version 2.10 リリースしました" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2009/12/posql-version-210.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEDQX8zfyp7ImA9WxFRF0o.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-1543776911753647406</id><published>2009-12-27T23:44:00.006+09:00</published><updated>2010-05-02T12:24:30.187+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T12:24:30.187+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="どうしたらいいんだろ" /><category scheme="http://www.blogger.com/atom/ns#" term="flock" /><title>排他ロック</title><content type="html">ぜったい壊れないロジック組み込み中。&lt;br /&gt;
排他ロックはflock()じゃダメみたい。&lt;br /&gt;
&lt;br /&gt;
ソースコード貼るにはどうしたらいいんだろ(･_･?)&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: rgb(255, 255, 255) none repeat scroll 0% 0%; border: 1px solid gray; color: #333333;"&gt;&lt;b&gt; &amp;lt;?php
&lt;/b&gt;&lt;span style="color: blue;"&gt;  print&lt;/span&gt; &lt;span style="color: #cc0000;"&gt;"Hello World"&lt;/span&gt;; &lt;span style="color: #999999;"&gt;// こんな感じ…ｶﾅ&lt;/span&gt;
&lt;b&gt; &lt;b&gt;?&amp;gt;&lt;/b&gt;
&lt;/b&gt;&lt;/pre&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;手書きめんどいよ…&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;あとで調べよう&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-1543776911753647406?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ahe6aWUlQkDX1fYbseGJwPiaBdc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ahe6aWUlQkDX1fYbseGJwPiaBdc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ahe6aWUlQkDX1fYbseGJwPiaBdc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ahe6aWUlQkDX1fYbseGJwPiaBdc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/OQGrVF7N9Ag" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/1543776911753647406/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2009/12/blog-post.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/1543776911753647406?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/1543776911753647406?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/OQGrVF7N9Ag/blog-post.html" title="排他ロック" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2009/12/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQNQXs5cCp7ImA9WxBSGEU.&quot;"><id>tag:blogger.com,1999:blog-6593358586491599603.post-7109766268900916789</id><published>2009-12-27T12:09:00.002+09:00</published><updated>2009-12-27T12:09:50.528+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-27T12:09:50.528+09:00</app:edited><title /><content type="html">test2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6593358586491599603-7109766268900916789?l=polygon-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aTKuL45xQCtPlHFrYbvw2E1dLXM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aTKuL45xQCtPlHFrYbvw2E1dLXM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aTKuL45xQCtPlHFrYbvw2E1dLXM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aTKuL45xQCtPlHFrYbvw2E1dLXM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Posql/~4/bAUtU3bEOUc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://polygon-blog.blogspot.com/feeds/7109766268900916789/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://polygon-blog.blogspot.com/2009/12/test2.html#comment-form" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/7109766268900916789?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6593358586491599603/posts/default/7109766268900916789?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Posql/~3/bAUtU3bEOUc/test2.html" title="" /><author><name>polygon</name><uri>http://www.blogger.com/profile/13448806743097583559</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_4TAXTQzJyY4/TQnbruwHPeI/AAAAAAAAAJk/0ycMXsHzXjE/S220/polygon_tribe_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://polygon-blog.blogspot.com/2009/12/test2.html</feedburner:origLink></entry></feed>

