<?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>netcreates. blog &#187; PHP</title>
	<atom:link href="http://www.netcreates.jp/blog/tag/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.netcreates.jp/blog</link>
	<description>ネットクリエイツ株式会社のサービス紹介、TIPS など</description>
	<lastBuildDate>Mon, 05 Dec 2011 01:25:50 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>IPv6なWindowsでgethostbyaddr()が使えない</title>
		<link>http://www.netcreates.jp/blog/2009/05/ipv6windowsgethostbyaddr.html</link>
		<comments>http://www.netcreates.jp/blog/2009/05/ipv6windowsgethostbyaddr.html#comments</comments>
		<pubDate>Wed, 06 May 2009 09:52:57 +0000</pubDate>
		<dc:creator>shinsuke</dc:creator>
				<category><![CDATA[IPv6]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[関数]]></category>

		<guid isPermaLink="false">http://www.netcreates.jp/blog2/2009/05/ipv6windowsgethostbyaddr.html</guid>
		<description><![CDATA[わけあってIIS7でPHPを使おうと思いPHP Version 5.2.9-2のWindowsバイナリをダウンロードしてきて設定したのですが、gethostbyaddr()関数を使ったスクリプトで下記のエラーが出ることに気がつきました。 PHP Warning: gethostbyaddr() [function.gethostbyaddr]: Address is not in a.b.c.d form in･･･ 引数が「a.b.c.d」という形式じゃないよというエラーなのですが、IPv6でアクセスしたのだから形式が異なって当然です。（IPv6アドレスはコロン(:)で区切りますからね。） gethostbyaddr()はIPアドレスからホスト名を調べる関数なのですが、同様にIPv6で利用しているCentOS（Linux）上のPHPでは正常に使えているのです。 &#160; まさかWindowsバイナリだけPHPの「IPv6 Support」がdisabled（無効）になってるんじゃないかと思い、早速、phpinfo()関数でPHPの設定状況を確認したところ、IPv6 Supportはenabledでした。 結局、PHP BugsでWindowsバイナリではなぜかIPv6でgethostbyaddr()が使えないことと、Version. 5.3以上のWindowsバイナリではIPv6でgethostbyaddr()関数が使えることを知った次第です。 もうVersion.5.2では修正されないのでしょうかね･･･。 &#160; IPv6アドレスは逆引きが設定されていない場合も多いので、とりあえずIPv6アドレスが来たらgethostbyaddr()を使わないよう、スクリプトのソースを書き換えました。 $host = getenv(&#8220;REMOTE_ADDR&#8221;);if ($host AND !strpos($host, &#8220;:&#8221;)) $host = gethostbyaddr($host); &#160; インターネット接続サービスやネットワーク機器などインフラのIPv6対応はよく聞きますが、WebサービスなどアプリケーションのIPv6対応はまだまだ情報が少ないです。 &#8220;卵が先か、鶏が先か&#8221;ではないですけど、インフラに載るコンテンツの部分でもIPv6を普及していきたいですね。 「IPv6で何ができるの？」と言われて、「踊るひろゆきが見れるよ」だけでは寂しいので(笑]]></description>
			<content:encoded><![CDATA[<p>わけあってIIS7でPHPを使おうと思い<a href="http://www.php.net/downloads.php">PHP Version 5.2.9-2</a>のWindowsバイナリをダウンロードしてきて設定したのですが、gethostbyaddr()関数を使ったスクリプトで下記のエラーが出ることに気がつきました。</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p>PHP Warning: gethostbyaddr() [function.gethostbyaddr]: Address is not in a.b.c.d form in･･･</p>
<p>引数が「a.b.c.d」という形式じゃないよというエラーなのですが、IPv6でアクセスしたのだから形式が異なって当然です。（IPv6アドレスはコロン(:)で区切りますからね。）</p>
</blockquote>
</blockquote>
<p><span id="more-29"></span></p>
<p>gethostbyaddr()はIPアドレスからホスト名を調べる関数なのですが、同様にIPv6で利用している<font style="FONT-SIZE: 1.56em" size="6"><strong>CentOS（Linux）上のPHPでは正常に使えている</strong></font>のです。</p>
<p>&nbsp;</p>
<p>まさかWindowsバイナリだけPHPの「IPv6 Support」がdisabled（無効）になってるんじゃないかと思い、早速、phpinfo()関数でPHPの設定状況を確認したところ、<strong><font style="FONT-SIZE: 1.25em" size="5">IPv6 Supportはenabled</font></strong>でした。</p>
<p>結局、<a href="http://bugs.php.net/bug.php?id=46645">PHP Bugs</a>でWindowsバイナリではなぜかIPv6でgethostbyaddr()が使えないことと、<strong>Version. 5.3以上のWindowsバイナリではIPv6でgethostbyaddr()関数が使える</strong>ことを知った次第です。</p>
<p>もうVersion.5.2では修正されないのでしょうかね･･･。</p>
<p>&nbsp;</p>
<p>IPv6アドレスは逆引きが設定されていない場合も多いので、とりあえずIPv6アドレスが来たらgethostbyaddr()を使わないよう、スクリプトのソースを書き換えました。</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p>$host = getenv(&#8220;REMOTE_ADDR&#8221;);<br />if ($host AND !strpos($host, &#8220;:&#8221;)) $host = gethostbyaddr($host);</p>
</blockquote>
</blockquote>
<p>&nbsp;</p>
<p>インターネット接続サービスやネットワーク機器などインフラのIPv6対応はよく聞きますが、WebサービスなどアプリケーションのIPv6対応はまだまだ情報が少ないです。</p>
<p><strong><font style="FONT-SIZE: 1.25em" size="5">&#8220;卵が先か、鶏が先か&#8221;</font></strong>ではないですけど、インフラに載るコンテンツの部分でもIPv6を普及していきたいですね。</p>
<p>「IPv6で何ができるの？」と言われて、<font style="FONT-SIZE: 1.25em" size="5"><strong>「</strong></font><a href="http://ipv6.2ch.net/"><font style="FONT-SIZE: 1.25em" size="5"><strong>踊るひろゆき</strong></font></a><font style="FONT-SIZE: 1.25em" size="5"><strong>が見れるよ」</strong></font>だけでは<strong><font style="FONT-SIZE: 1.25em" size="5">寂しい</font></strong>ので(笑</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netcreates.jp/blog/2009/05/ipv6windowsgethostbyaddr.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>array_searchで0(ゼロ)が返ってくるとif文は？</title>
		<link>http://www.netcreates.jp/blog/2008/09/array-search0if.html</link>
		<comments>http://www.netcreates.jp/blog/2008/09/array-search0if.html#comments</comments>
		<pubDate>Mon, 22 Sep 2008 17:13:15 +0000</pubDate>
		<dc:creator>shinsuke</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.netcreates.jp/blog2/2008/09/array_search0if.html</guid>
		<description><![CDATA[私はプログラマというわけではないのですが、よく大学や高校の後輩からPHPという言語について尋ねられます。最近、たまたま、それぞれ異なる後輩から同じ質問をされたのでちょっと紹介しておきたいと思いまして。実は私も以前、はまったことが･･･ PHPには、配列の要素に特定の文字列が含まれているか検索するために、array_searchという関数が用意されています。比較的よく使うのですが、int型の0(ゼロ)が返ってくる場合を考慮しないと失敗します。 例えば、$test_array = (&#8220;岡山&#8221;, &#8220;倉敷&#8221;, &#8220;津山&#8221;); の場合、array_search(&#8220;倉敷&#8221;, $test_array); の結果は1 ですが、array_search(&#8220;岡山&#8221;, $test_array); の結果は0 となります。 この0(ゼロ)が曲者でして、仮に配列に岡山が含まれているかどうか調べたいときに if (array_search(&#8220;岡山&#8221;, $test_array)) echo &#8220;含まれています&#8221;;else echo &#8220;含まれていません&#8221;; なんて書いちゃうと「含まれていません」と表示されるのです･･･。if文にとっては、int型の0も、boolean型のFALSEも、同じFALSEなのです。 というわけで、下記のように修正すると期待通りの結果を得られます。 if (array_search(&#8220;岡山&#8221;, $test_array) !== FALSE) echo &#8220;含まれています&#8221;;else echo &#8220;含まれていません&#8221;; === は値が等しく、同じ型という比較演算子で、!== は値が等しくないか、同じ型ではないという比較演算子です。 これならint型の0が返ってきたとしても、FALSEではないこと(「岡山」が含まれること)が判別可能です。 本当にちょっとしたことなのですが、頭の片隅に置いておくときっと助かる場面に遭遇します。精進、精進。]]></description>
			<content:encoded><![CDATA[<p>私はプログラマというわけではないのですが、よく大学や高校の後輩からPHPという言語について尋ねられます。<br />最近、たまたま、それぞれ異なる後輩から同じ質問をされたのでちょっと紹介しておきたいと思いまして。<br /><strong><font style="FONT-SIZE: 1.24em"><strike>実は私も以前、はまったことが･･･</strike></font></strong></p>
<p>PHPには、配列の要素に特定の文字列が含まれているか検索するために、<strong><font style="FONT-SIZE: 1.25em"><a href="http://www.php.net/array_search">array_search</a></font></strong>という関数が用意されています。<br />比較的よく使うのですが、int型の0(ゼロ)が返ってくる場合を考慮しないと<font style="FONT-SIZE: 1.95em"><strong>失敗</strong></font>します。</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p>例えば、$test_array = (&#8220;岡山&#8221;, &#8220;倉敷&#8221;, &#8220;津山&#8221;); の場合、<br />array_search(&#8220;倉敷&#8221;, $test_array); の結果は1 ですが、<br />array_search(&#8220;岡山&#8221;, $test_array); の結果は0 となります。</p>
</blockquote>
</blockquote>
</blockquote>
<p>この0(ゼロ)が曲者でして、仮に配列に岡山が含まれているかどうか調べたいときに</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p>if (array_search(&#8220;岡山&#8221;, $test_array)) echo &#8220;含まれています&#8221;;<br />else echo &#8220;含まれていません&#8221;;</p>
</blockquote>
</blockquote>
</blockquote>
<p>なんて書いちゃうと「含まれていません」と表示されるのです･･･。<br />if文にとっては、int型の0も、boolean型のFALSEも、同じFALSEなのです。</p>
<p>というわけで、下記のように修正すると期待通りの結果を得られます。</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p>if (<strong>array_search(&#8220;岡山&#8221;, $test_array) !== FALSE</strong>) echo &#8220;含まれています&#8221;;<br />else echo &#8220;含まれていません&#8221;;</p>
</blockquote>
</blockquote>
</blockquote>
<p><strong><font style="FONT-SIZE: 1.25em">=== </font></strong>は値が等しく、同じ型という比較演算子で、<br /><strong><font style="FONT-SIZE: 1.25em">!== </font></strong>は値が等しくないか、同じ型ではないという比較演算子です。</p>
<p>これならint型の0が返ってきたとしても、FALSEではないこと(「岡山」が含まれること)が判別可能です。</p>
<p>本当にちょっとしたことなのですが、頭の片隅に置いておくときっと助かる場面に遭遇します。<br />精進、精進。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netcreates.jp/blog/2008/09/array-search0if.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

