<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>『株式会社シンプル・アイ』 ブログ</title>
	<atom:link href="http://blog.simple-eye.com/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.simple-eye.com</link>
	<description>PHP+MySQLのWEBシステム開発の現場からお届け</description>
	<lastBuildDate>Sat, 10 Jul 2010 10:36:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>rpmファイルはここで取得できますね</title>
		<link>http://blog.simple-eye.com/archives/346</link>
		<comments>http://blog.simple-eye.com/archives/346#comments</comments>
		<pubDate>Sat, 10 Jul 2010 10:36:13 +0000</pubDate>
		<dc:creator>シンプル・アイ社長</dc:creator>
				<category><![CDATA[サーバ・ネットワーク]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[サーバ]]></category>

		<guid isPermaLink="false">http://blog.simple-eye.com/?p=346</guid>
		<description><![CDATA[各種OSのパッケージ等はここで取得できますね。
ftp://ftp.riken.jp/
CentOSなら、Linux　＝＞　centos　と進めばいい。
]]></description>
			<content:encoded><![CDATA[<p>各種OSのパッケージ等はここで取得できますね。</p>
<p><a href="ftp://ftp.riken.jp/" target="_blank">ftp://ftp.riken.jp/</a></p>
<p>CentOSなら、Linux　＝＞　centos　と進めばいい。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.simple-eye.com/archives/346/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>64bitサーバのCentOS5.3にyumをインストールする</title>
		<link>http://blog.simple-eye.com/archives/341</link>
		<comments>http://blog.simple-eye.com/archives/341#comments</comments>
		<pubDate>Sat, 10 Jul 2010 08:47:08 +0000</pubDate>
		<dc:creator>シンプル・アイ社長</dc:creator>
				<category><![CDATA[サーバ・ネットワーク]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[yum]]></category>
		<category><![CDATA[インストール]]></category>
		<category><![CDATA[サーバ]]></category>

		<guid isPermaLink="false">http://blog.simple-eye.com/?p=341</guid>
		<description><![CDATA[お名前.comのVPS（６４ビット、CentOS５．３）にyumが入っていなかったのでインストールする。
http://www.onamae-server.com/vps/
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/python-elementtree-1.2.6-5.x86_64.rpm
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/python-iniparse-0.2.3-4.el5.noarch.rpm
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/python-sqlite-1.1.7-1.2.1.x86_64.rpm
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/m2crypto-0.16-6.el5.6.x86_64.rpm
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/python-urlgrabber-3.1.0-5.el5.noarch.rpm
rpm -ivh python-elementtree-1.2.6-5.x86_64.rpm
rpm -ivh python-iniparse-0.2.3-4.el5.noarch.rpm
rpm -ivh python-sqlite-1.1.7-1.2.1.x86_64.rpm
rpm -ivh m2crypto-0.16-6.el5.6.x86_64.rpm
rpm -ivh python-urlgrabber-3.1.0-5.el5.noarch.rpm
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/yum-fastestmirror-1.1.16-14.el5.centos.1.noarch.rp
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/yum-metadata-parser-1.1.2-3.el5.centos.x86_64.rpm
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/yum-3.2.22-26.el5.centos.noarch.rpm
rpm -ivh yum-fastestmirror-1.1.16-14.el5.centos.1.noarch.rpm \
yum-metadata-parser-1.1.2-3.el5.centos.x86_64 \
yum-3.2.22-26.el5.centos.noarch.rpm
でも、FAQをよくみたら、コントロールパネルで自動アップデートをOFFにするとyumがインストールされるようでした。。。
http://www.onamae-server.com/support/faq/vps/common/common_43.php
初期セットアップ時は、yumはインストールされていません。
yumはコントロールパネルにてアップデート方法を&#8221;アップデートなし&#8221;に変更するとインストールされます
http://www.onamae-server.com/vps/
]]></description>
			<content:encoded><![CDATA[<p>お名前.comのVPS（６４ビット、CentOS５．３）にyumが入っていなかったのでインストールする。<br />
http://www.onamae-server.com/vps/</p>
<blockquote><p>wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/python-elementtree-1.2.6-5.x86_64.rpm<br />
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/python-iniparse-0.2.3-4.el5.noarch.rpm<br />
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/python-sqlite-1.1.7-1.2.1.x86_64.rpm<br />
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/m2crypto-0.16-6.el5.6.x86_64.rpm<br />
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/python-urlgrabber-3.1.0-5.el5.noarch.rpm</p>
<p>rpm -ivh python-elementtree-1.2.6-5.x86_64.rpm<br />
rpm -ivh python-iniparse-0.2.3-4.el5.noarch.rpm<br />
rpm -ivh python-sqlite-1.1.7-1.2.1.x86_64.rpm<br />
rpm -ivh m2crypto-0.16-6.el5.6.x86_64.rpm<br />
rpm -ivh python-urlgrabber-3.1.0-5.el5.noarch.rpm</p>
<p>wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/yum-fastestmirror-1.1.16-14.el5.centos.1.noarch.rp<br />
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/yum-metadata-parser-1.1.2-3.el5.centos.x86_64.rpm<br />
wget ftp://ftp.riken.jp/Linux/centos/5/os/x86_64/CentOS/yum-3.2.22-26.el5.centos.noarch.rpm</p>
<p>rpm -ivh yum-fastestmirror-1.1.16-14.el5.centos.1.noarch.rpm \<br />
yum-metadata-parser-1.1.2-3.el5.centos.x86_64 \<br />
yum-3.2.22-26.el5.centos.noarch.rpm</p></blockquote>
<p>でも、FAQをよくみたら、コントロールパネルで自動アップデートをOFFにするとyumがインストールされるようでした。。。</p>
<p>http://www.onamae-server.com/support/faq/vps/common/common_43.php</p>
<blockquote><p>初期セットアップ時は、yumはインストールされていません。<br />
yumはコントロールパネルにてアップデート方法を&#8221;アップデートなし&#8221;に変更するとインストールされます</p></blockquote>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">http://www.onamae-server.com/vps/</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.simple-eye.com/archives/341/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>久しぶりにピザを焼いた</title>
		<link>http://blog.simple-eye.com/archives/330</link>
		<comments>http://blog.simple-eye.com/archives/330#comments</comments>
		<pubDate>Thu, 24 Jun 2010 05:36:52 +0000</pubDate>
		<dc:creator>シンプル・アイ社長</dc:creator>
				<category><![CDATA[料理・食べる]]></category>
		<category><![CDATA[イタリア]]></category>
		<category><![CDATA[ピザ]]></category>
		<category><![CDATA[料理]]></category>
		<category><![CDATA[食事]]></category>

		<guid isPermaLink="false">http://blog.simple-eye.com/?p=330</guid>
		<description><![CDATA[音楽会があったので、ピザを焼くように依頼された。マルガリータばかりを5枚の注文でした。連続でその後3枚マルガリータを焼いて食べてしまった。残りの生地で友人とマルガリータ（ちょい焼きすぎ）とビスマルクと、写真にはないが、カマンベールとクリームチーズのピッツァを焼いて食べた。
夏は生地の調子がよくてうまくいく。7月も依頼されているのだ。。。今度はもっと大量に生地を作ろう。
]]></description>
			<content:encoded><![CDATA[<div id="attachment_321" class="wp-caption alignleft" style="width: 266px"><img class="size-full wp-image-321 " title="ピッツァ・マルガリータ" src="http://blog.simple-eye.com/wp-content/uploads/2010/06/20100624220418.jpg" alt="ピッツァ・マルガリータ" width="256" height="192" /><p class="wp-caption-text">ピッツァ・マルガリータ</p></div>
<div id="attachment_322" class="wp-caption alignleft" style="width: 266px"><img class="size-full wp-image-322 " title="ピッツァ・ビスマルク" src="http://blog.simple-eye.com/wp-content/uploads/2010/06/20100624222301.jpg" alt="ピッツァ・ビスマルク" width="256" height="192" /><p class="wp-caption-text">ピッツァ・ビスマルク</p></div>
<p>音楽会があったので、ピザを焼くように依頼された。マルガリータばかりを5枚の注文でした。連続でその後3枚マルガリータを焼いて食べてしまった。残りの生地で友人とマルガリータ（ちょい焼きすぎ）とビスマルクと、写真にはないが、カマンベールとクリームチーズのピッツァを焼いて食べた。</p>
<p>夏は生地の調子がよくてうまくいく。7月も依頼されているのだ。。。今度はもっと大量に生地を作ろう。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.simple-eye.com/archives/330/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>友人がトマトカレーをごちそうしてくれた</title>
		<link>http://blog.simple-eye.com/archives/335</link>
		<comments>http://blog.simple-eye.com/archives/335#comments</comments>
		<pubDate>Wed, 23 Jun 2010 05:43:31 +0000</pubDate>
		<dc:creator>シンプル・アイ社長</dc:creator>
				<category><![CDATA[料理・食べる]]></category>
		<category><![CDATA[カレー]]></category>
		<category><![CDATA[食事]]></category>

		<guid isPermaLink="false">http://blog.simple-eye.com/?p=335</guid>
		<description><![CDATA[友人が夕食に招待してくれました。アボガドディップと、めんたいマッシュポテトを、クラッカーにのせて食べ、ビールをいただいた。食事はトマトカレー。トマトのさわやかさが夏にはいいですね。鳥肉がとても柔らかくなっていて、とてもおいしかったです。ありがとう。
]]></description>
			<content:encoded><![CDATA[<div id="attachment_320" class="wp-caption alignleft" style="width: 266px"><img class="size-full wp-image-320 " title="トマトカレー" src="http://blog.simple-eye.com/wp-content/uploads/2010/06/20100623185326.jpg" alt="トマトカレー" width="256" height="192" /><p class="wp-caption-text">トマトカレー</p></div>
<p>友人が夕食に招待してくれました。アボガドディップと、めんたいマッシュポテトを、クラッカーにのせて食べ、ビールをいただいた。食事はトマトカレー。トマトのさわやかさが夏にはいいですね。鳥肉がとても柔らかくなっていて、とてもおいしかったです。ありがとう。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.simple-eye.com/archives/335/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>エビマヨうまかった</title>
		<link>http://blog.simple-eye.com/archives/326</link>
		<comments>http://blog.simple-eye.com/archives/326#comments</comments>
		<pubDate>Tue, 22 Jun 2010 05:33:45 +0000</pubDate>
		<dc:creator>シンプル・アイ社長</dc:creator>
				<category><![CDATA[料理・食べる]]></category>
		<category><![CDATA[食事]]></category>

		<guid isPermaLink="false">http://blog.simple-eye.com/?p=326</guid>
		<description><![CDATA[お向かいのカフェ＆ギャラリー「あずき」のマスターが作ってくれたエビマヨ。おっきなえびをたくさんいただきました。うまかった。。。
]]></description>
			<content:encoded><![CDATA[<div id="attachment_319" class="wp-caption alignleft" style="width: 298px"><img class="size-full wp-image-319 " title="エビマヨ" src="http://blog.simple-eye.com/wp-content/uploads/2010/06/20100622191612.jpg" alt="エビマヨ" width="288" height="216" /><p class="wp-caption-text">エビマヨ</p></div>
<p>お向かいのカフェ＆ギャラリー「あずき」のマスターが作ってくれたエビマヨ。おっきなえびをたくさんいただきました。うまかった。。。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.simple-eye.com/archives/326/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>あつくてパトラが伸びている。</title>
		<link>http://blog.simple-eye.com/archives/317</link>
		<comments>http://blog.simple-eye.com/archives/317#comments</comments>
		<pubDate>Thu, 17 Jun 2010 05:33:15 +0000</pubDate>
		<dc:creator>シンプル・アイ社長</dc:creator>
				<category><![CDATA[ペット]]></category>
		<category><![CDATA[パトラ]]></category>
		<category><![CDATA[動物]]></category>
		<category><![CDATA[猫]]></category>

		<guid isPermaLink="false">http://blog.simple-eye.com/?p=317</guid>
		<description><![CDATA[むしむし暑いので、うちのパトラも伸びている。そっちいってゴロン、こっちいってゴロン。
]]></description>
			<content:encoded><![CDATA[<div id="attachment_318" class="wp-caption alignleft" style="width: 266px"><img class="size-full wp-image-318 " title="伸びるパトラ" src="http://blog.simple-eye.com/wp-content/uploads/2010/06/20100617225224.jpg" alt="伸びるパトラ" width="256" height="192" /><p class="wp-caption-text">伸びるパトラ</p></div>
<p>むしむし暑いので、うちのパトラも伸びている。そっちいってゴロン、こっちいってゴロン。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.simple-eye.com/archives/317/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenPNEのインストールにはpdo_mysqlが必要</title>
		<link>http://blog.simple-eye.com/archives/307</link>
		<comments>http://blog.simple-eye.com/archives/307#comments</comments>
		<pubDate>Thu, 13 May 2010 15:04:19 +0000</pubDate>
		<dc:creator>シンプル・アイ社長</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[OpenPNE]]></category>
		<category><![CDATA[pdo_mysql]]></category>

		<guid isPermaLink="false">http://blog.simple-eye.com/?p=307</guid>
		<description><![CDATA[OpenPNEのインストールで、

./symfony openpne:install


を実行した際に、

Couldn&#8217;t locate driver named mysql


と怒られたなら、それはPHPにpdo_mysqlエクステンションが入っていないから。ソースディレクトリからエクステンションをコンパイルする。

cd /usr/local/src/php/php-5.2.5/ext/pdo_mysql/
phpize
./configure &#8211;with-php-config=/usr/local/php5/bin/php-config \
   &#8211;with-pdo-mysql=/usr/local/mysql5.0
make
make install


でインストールし、php.iniに、

extension=pdo_mysql.so


を加えてApacheリスタート。
起動ＯＫと出て、安心できない。ブラウザでPHPのページをみると閲覧できない。Apacheが起動していない。。。

php -i


で、確認しようとすると、

php: symbol lookup error: /usr/local/php5/lib/php/20060613/pdo_mysql.so:
   undefined symbol: php_pdo_declare_long_constant

とでる。これは、/usr/local/php5/include/php/ext/pdo/php_pdo_driver.hのバージョンがよろしくないようだ。PHPをソースインストールした際のソースディレクトリからコピーしてやる。

cp /usr/local/src/php/php-5.2.5/ext/pdo/php_pdo_driver.h \
   /usr/local/php5/include/php/ext/pdo/php_pdo_driver.h


いったんpdo_mysqlをアンインストールする。

rm -f /usr/local/php5/lib/php/20060613/pdo_mysql.so


上記、ソースから再度インストール。make cleanしてからね。これでApache再起動でいけました。OpnePNEもインストール完了。
]]></description>
			<content:encoded><![CDATA[<p>OpenPNEのインストールで、</p>
<blockquote><p>
./symfony openpne:install
</p>
</blockquote>
<p>を実行した際に、</p>
<blockquote><p>
Couldn&#8217;t locate driver named mysql
</p>
</blockquote>
<p>と怒られたなら、それはPHPにpdo_mysqlエクステンションが入っていないから。ソースディレクトリからエクステンションをコンパイルする。</p>
<blockquote><p>
cd /usr/local/src/php/php-5.2.5/ext/pdo_mysql/<br />
phpize<br />
./configure &#8211;with-php-config=/usr/local/php5/bin/php-config \<br />
   &#8211;with-pdo-mysql=/usr/local/mysql5.0<br />
make<br />
make install
</p>
</blockquote>
<p>でインストールし、php.iniに、</p>
<blockquote><p>
extension=pdo_mysql.so
</p>
</blockquote>
<p>を加えてApacheリスタート。<br />
起動ＯＫと出て、安心できない。ブラウザでPHPのページをみると閲覧できない。Apacheが起動していない。。。</p>
<blockquote><p>
php -i
</p>
</blockquote>
<p>で、確認しようとすると、</p>
<blockquote><p>
php: symbol lookup error: /usr/local/php5/lib/php/20060613/pdo_mysql.so:<br />
   undefined symbol: php_pdo_declare_long_constant</pre>
</blockquote>
<p>とでる。これは、/usr/local/php5/include/php/ext/pdo/php_pdo_driver.hのバージョンがよろしくないようだ。PHPをソースインストールした際のソースディレクトリからコピーしてやる。</p>
<blockquote><p>
cp /usr/local/src/php/php-5.2.5/ext/pdo/php_pdo_driver.h \<br />
   /usr/local/php5/include/php/ext/pdo/php_pdo_driver.h
</p>
</blockquote>
<p>いったんpdo_mysqlをアンインストールする。</p>
<blockquote><p>
rm -f /usr/local/php5/lib/php/20060613/pdo_mysql.so
</p>
</blockquote>
<p>上記、ソースから再度インストール。make cleanしてからね。これでApache再起動でいけました。OpnePNEもインストール完了。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.simple-eye.com/archives/307/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>preg_matchのサブキャッチパターンの文字数が多いと落ちます！！</title>
		<link>http://blog.simple-eye.com/archives/298</link>
		<comments>http://blog.simple-eye.com/archives/298#comments</comments>
		<pubDate>Sun, 02 May 2010 15:15:39 +0000</pubDate>
		<dc:creator>シンプル・アイ社長</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[問題]]></category>

		<guid isPermaLink="false">http://blog.simple-eye.com/?p=298</guid>
		<description><![CDATA[PHPのpreg_matchにおいて、カッコを使って、サブキャッチパターンを作ることがあるだろう。ただ、そのサブキャッチパターンにマッチする文字数（バイト数）が10万文字（バイト）を超えると、エラーも発生させず、ただ単に、「マッチせずに」終了となる。（PHP５．２．５にて検証）　以下にサンプルコードを示す。
&#60;?php
for ( $i=1; $i&#60;=1000000000; $i++ ) {
$src .= &#8216;1234567890&#8242;;
 if ( !preg_match( &#8216;/&#60;(.+?)&#62;/&#8217;, &#8216;&#60;&#8217;.$src.&#8217;&#62;&#8217;, $matches ) ) {
  echo &#8220;not match at &#8220;.$i;
  break;
 }
}
?&#62;
&#60;?php
for ( $i=1; $i&#60;=1000000000; $i++ ) {
$src .= &#8216;1234567890&#8242;;
if ( !preg_match( &#8216;/&#60;(.+?)&#62;/&#8217;, &#8216;&#60;&#8217;.$src.&#8217;&#62;&#8217;, $matches ) ) {
echo &#8220;not match at &#8220;.$i;
break;
}
}
?&#62;
上記コードでは、決して「not match at ???」とは表示されることはないように思われるだろう。しかし実際はそうではない。実行してしばらく待つと以下の結果が出る。

not match at 10000

(.+?)というサブキャッチパターンにマッチする文字列が、10000×10文字＝10万文字になった時点で、マッチしなくなり、echoして、breakしていることが分かるはずだ。ちなみに、以下のコードでは、どうだろう。
&#60;?php
for ( $i=1; [...]]]></description>
			<content:encoded><![CDATA[<p>PHPのpreg_matchにおいて、カッコを使って、サブキャッチパターンを作ることがあるだろう。ただ、そのサブキャッチパターンにマッチする文字数（バイト数）が10万文字（バイト）を超えると、エラーも発生させず、ただ単に、「マッチせずに」終了となる。（PHP５．２．５にて検証）　以下にサンプルコードを示す。</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">&lt;?php</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">for ( $i=1; $i&lt;=1000000000; $i++ ) {</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">$src .= &#8216;1234567890&#8242;;</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>if ( !preg_match( &#8216;/&lt;(.+?)&gt;/&#8217;, &#8216;&lt;&#8217;.$src.&#8217;&gt;&#8217;, $matches ) ) {</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span> echo &#8220;not match at &#8220;.$i;</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span> break;</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>}</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">}</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">?&gt;</div>
<blockquote><p>&lt;?php<br />
for ( $i=1; $i&lt;=1000000000; $i++ ) {<br />
$src .= &#8216;1234567890&#8242;;<br />
if ( !preg_match( &#8216;/&lt;(.+?)&gt;/&#8217;, &#8216;&lt;&#8217;.$src.&#8217;&gt;&#8217;, $matches ) ) {<br />
echo &#8220;not match at &#8220;.$i;<br />
break;<br />
}<br />
}<br />
?&gt;</p></blockquote>
<p>上記コードでは、決して「not match at ???」とは表示されることはないように思われるだろう。しかし実際はそうではない。実行してしばらく待つと以下の結果が出る。</p>
<blockquote>
<div>not match at 10000</div>
</blockquote>
<p>(.+?)というサブキャッチパターンにマッチする文字列が、10000×10文字＝10万文字になった時点で、マッチしなくなり、echoして、breakしていることが分かるはずだ。ちなみに、以下のコードでは、どうだろう。</p>
<blockquote><p>&lt;?php<br />
for ( $i=1; $i&lt;=1000000000; $i++ ) {<br />
$src .= &#8216;1234567890&#8242;;<br />
$src2 .= &#8216;1234567890&#8242;;<br />
if ( !preg_match( &#8216;/&lt;(.+?)&gt;&lt;(.+?)&gt;/&#8217;, &#8216;&lt;&#8217;.$src.&#8217;&gt;&lt;&#8217;.$src2.&#8217;&gt;&#8217;, $matches ) ) {<br />
echo &#8220;not match at &#8220;.$i;<br />
break;<br />
}<br />
}<br />
?&gt;</p></blockquote>
<p>上記の場合、以下のような結果となる。</p>
<blockquote><p>not match at 5000</p></blockquote>
<p>おわかりだろう。やはり10万文字だ。(5000×10文字)＋(5000×10文字)＝10万文字なのである。</p>
<p>そんな長い文字をサブキャッチなんかしないといわれるかもしれない。しかし、私がこれに気付いたのは、XML-RPCのリクエストのパースを実装していた時だ。XML-RPCで、データを登録するリクエストにおいて、&lt;base64&gt;&lt;/base64&gt;タグで、画像データを受け取った際に、preg_matchのサブキャッチパターンで中身を取得したのだ。結果、大きな画像を受け取ったときに、マッチしないという事態に陥ったのだ。</p>
<p>たちが悪いのは、エラーをはいてプログラムが停止するのではなく、単にマッチしなくなって次の処理に進んでしまうことだ。ぜひ、気をつけていただきたい。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.simple-eye.com/archives/298/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>携帯３キャリアの絵文字コンバータをつくった</title>
		<link>http://blog.simple-eye.com/archives/291</link>
		<comments>http://blog.simple-eye.com/archives/291#comments</comments>
		<pubDate>Wed, 28 Apr 2010 13:48:59 +0000</pubDate>
		<dc:creator>シンプル・アイ社長</dc:creator>
				<category><![CDATA[携帯]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WEBサーバ]]></category>
		<category><![CDATA[変換]]></category>
		<category><![CDATA[絵文字]]></category>

		<guid isPermaLink="false">http://blog.simple-eye.com/?p=291</guid>
		<description><![CDATA[うちのフレームワークの絵文字コンバータ機能を再作成しました。３キャリアのSJISのページから送られてくる絵文字をmbstring.encoding_translationで、内部エンコードのUTF-8に変換したのちに、絵文字を [emoji:E123] のような内部で扱う形式に変換し、ＤＢに保存する。ＰＣサイトの出力時には、&#60;img&#62;で絵文字画像を出力し、各携帯キャリアに出力する際には、各キャリアの絵文字に変換して出力する機能です。
絵文字のバイナリと絵文字タグの相互変換をするための変換テーブルをどのような形式にしようかとだいぶ模索しました。
■フォームからやってくる絵文字を内部用の絵文字タグに変換する実装
DoCoMo
フォームからのSJIS絵文字＝＞UTF-8に変換＝＞※置換実行※＜＝UTF-8に変換＜＝unicodeの16進数をpack
EzWeb
フォームからのSJIS絵文字＝＞UTF-8に変換＝＞※置換実行※＜＝UTF-8に変換＜＝Shift-JISの16進数をpack
Softbank
フォームからのSJIS絵文字＝＞UTF-8に変換＝＞※置換実行※＜＝UTF-8に変換＜＝Shift-JISの16進数をpack
■内部用絵文字タグを絵文字に変換して携帯に出力する実装
DoCoMo
絵文字タグ＝＞※置換実行※＜＝UTF-8に変換＜＝unicodeの16進数をpack
※置換実行※＝＞SJIS-winに変換
EzWeb
絵文字タグ＝＞※置換実行※＜＝UTF-8に変換＜＝Shift-JISの16進数をpack
※置換実行※＝＞SJIS-winに変換
Softbank
絵文字タグ＝＞※置換実行※＜＝UTF-8に変換＜＝Shift-JISの16進数をpack
※置換実行※＝＞SJIS-winに変換
■実装する中でわかったこと
ドコモ絵文字は、mb_encoding_translationで、unicodeからSJIS-winや、UTF-8に変換して、それぞれの文字コードで表示できる。しかし、EzWebやSoftbankの絵文字では、unicodeから、SJIS-winや、UTF-8に変換しても、各エンコードの絵文字配列が異なるせいか、各エンコードで同じ絵文字を表示させることができない、というより文字化けとなる。したがって、サイトのHTML出力で使うエンコードの１６進数を使ってバイナリを作り、それをmb_encoding_translationで変換してやる必要がある。（フォームからやってくる絵文字は、mbstring.encoding_translationで変換されているので。）


]]></description>
			<content:encoded><![CDATA[<p>うちのフレームワークの絵文字コンバータ機能を再作成しました。３キャリアのSJISのページから送られてくる絵文字をmbstring.encoding_translationで、内部エンコードのUTF-8に変換したのちに、絵文字を [emoji:E123] のような内部で扱う形式に変換し、ＤＢに保存する。ＰＣサイトの出力時には、&lt;img&gt;で絵文字画像を出力し、各携帯キャリアに出力する際には、各キャリアの絵文字に変換して出力する機能です。</p>
<p>絵文字のバイナリと絵文字タグの相互変換をするための変換テーブルをどのような形式にしようかとだいぶ模索しました。</p>
<p><strong><span style="color: #000000;">■フォームからやってくる絵文字を内部用の絵文字タグに変換する実装</span></strong></p>
<blockquote><p><strong>DoCoMo</strong></p>
<p>フォームからのSJIS絵文字＝＞UTF-8に変換＝＞※置換実行※＜＝UTF-8に変換＜＝unicodeの16進数をpack</p>
<p><strong>EzWeb</strong></p>
<p>フォームからのSJIS絵文字＝＞UTF-8に変換＝＞※置換実行※＜＝UTF-8に変換＜＝Shift-JISの16進数をpack</p>
<p><strong>Softbank</strong></p>
<p>フォームからのSJIS絵文字＝＞UTF-8に変換＝＞※置換実行※＜＝UTF-8に変換＜＝Shift-JISの16進数をpack</p></blockquote>
<h3 style="font-size: 1.17em;"><strong><span style="color: #000000;">■内部用絵文字タグを絵文字に変換して携帯に出力する実装</span></strong></h3>
<blockquote><p><strong>DoCoMo</strong></p>
<p>絵文字タグ＝＞※置換実行※＜＝UTF-8に変換＜＝unicodeの16進数をpack<br />
※置換実行※＝＞SJIS-winに変換</p>
<p><strong>EzWeb</strong></p>
<p>絵文字タグ＝＞※置換実行※＜＝UTF-8に変換＜＝Shift-JISの16進数をpack<br />
※置換実行※＝＞SJIS-winに変換</p>
<p><strong>Softbank</strong></p>
<p>絵文字タグ＝＞※置換実行※＜＝UTF-8に変換＜＝Shift-JISの16進数をpack<br />
※置換実行※＝＞SJIS-winに変換</p></blockquote>
<h3 style="font-size: 1.17em;"><strong><span style="color: #000000;">■実装する中でわかったこと</span></strong></h3>
<p><span style="color: #000000;">ドコモ絵文字は、mb_encoding_translationで、unicodeからSJIS-winや、UTF-8に変換して、それぞれの文字コードで表示できる。しかし、EzWebやSoftbankの絵文字では、unicodeから、SJIS-winや、UTF-8に変換しても、各エンコードの絵文字配列が異なるせいか、各エンコードで同じ絵文字を表示させることができない、というより文字化けとなる。したがって、サイトのHTML出力で使うエンコードの１６進数を使ってバイナリを作り、それをmb_encoding_translationで変換してやる必要がある。（フォームからやってくる絵文字は、mbstring.encoding_translationで変換されているので。）</span></p>
<p><span style="color: #000000;"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.simple-eye.com/archives/291/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XREAやCORESERVERのsession_start()でエラー</title>
		<link>http://blog.simple-eye.com/archives/289</link>
		<comments>http://blog.simple-eye.com/archives/289#comments</comments>
		<pubDate>Mon, 12 Apr 2010 02:00:54 +0000</pubDate>
		<dc:creator>シンプル・アイ社長</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[CORESERVER]]></category>
		<category><![CDATA[XREA]]></category>

		<guid isPermaLink="false">http://blog.simple-eye.com/?p=289</guid>
		<description><![CDATA[XREAやCORESRVERのPHPで、モジュール版とCGI版のPHPを合わせて使って、セッションが引き継がれると以下のようなエラーが出る。
Warning: session_start() [function.session-start]:  open(/tmp/sess_ｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘ, O_RDWR) failed: Permission denied  (13) in  /virtual/ｘｘｘｘ/public_html/index.php on  line xx
これはCGI版では、セッションファイルが、/tmp/にて、FTPユーザー権限で書きこまれ、一方モジュール版ではApacheユーザー権限で書きこまれるからだ。それで、CGI版PHPで作成されたセッションファイルをモジュール版PHPから読み込む際にパーミッションエラーとなるのだ。逆もまたしかり。
]]></description>
			<content:encoded><![CDATA[<p>XREAやCORESRVERのPHPで、モジュール版とCGI版のPHPを合わせて使って、セッションが引き継がれると以下のようなエラーが出る。</p>
<blockquote><p><strong>Warning</strong>: session_start() [<a href="http://www.shinko-grandsha.jp/contact/function.session-start">function.session-start</a>]:  open(/tmp/sess_ｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘｘ, O_RDWR) failed: Permission denied  (13) in  <strong>/virtual/ｘｘｘｘ/public_html/index.php</strong> on  line <strong>xx</strong></p></blockquote>
<p>これはCGI版では、セッションファイルが、/tmp/にて、FTPユーザー権限で書きこまれ、一方モジュール版ではApacheユーザー権限で書きこまれるからだ。それで、CGI版PHPで作成されたセッションファイルをモジュール版PHPから読み込む際にパーミッションエラーとなるのだ。逆もまたしかり。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.simple-eye.com/archives/289/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
