<?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>Kinopyo Blog &#187; PHP5</title>
	<atom:link href="http://www.kinopyo.com/blog/category/php5/feed" rel="self" type="application/rss+xml" />
	<link>http://www.kinopyo.com/blog</link>
	<description>プログラマとしてRuby, Rails, iPhone, iPad,Macなどなどと向き合う日々のログポース</description>
	<lastBuildDate>Sun, 08 Jan 2012 14:59:09 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<atom:link rel='hub' href='http://www.kinopyo.com/blog/?pushpress=hub'/>
		<item>
		<title>PHP プロセス数を指定して実行するマルチスレッド処理(curl_multi)</title>
		<link>http://www.kinopyo.com/blog/php-multi-thread-with-specific-process-number-using-curl-multi</link>
		<comments>http://www.kinopyo.com/blog/php-multi-thread-with-specific-process-number-using-curl-multi#comments</comments>
		<pubDate>Tue, 09 Aug 2011 02:08:44 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[PHP5]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Snippet]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=2075</guid>
		<description><![CDATA[
curl_multi系を使って、プロセス数を指定して実行するマルチスレッド処理です。
urlは配列で受け取って、もし指定したプロセス数より多い場合は分割して実行するようになってます。
このサンプルコードではこのブログの幾つかのurlに対してtitleを取得しました。

参考：PHPでマルチスレッド(バックグラウンド処理)を実現する方法

]]></description>
			<content:encoded><![CDATA[<div class="section">
<p>curl_multi系を使って、プロセス数を指定して実行するマルチスレッド処理です。</p>
<p>urlは配列で受け取って、もし指定したプロセス数より多い場合は分割して実行するようになってます。</p>
<p>このサンプルコードではこのブログの幾つかのurlに対してtitleを取得しました。</p>
<div id="gist-1073555" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="cp">&lt;?php</span></div><div class='line' id='LC2'><span class="sd">/**</span></div><div class='line' id='LC3'><span class="sd">* 指定したプロセス数で並列処理を実行する</span></div><div class='line' id='LC4'><span class="sd">*</span></div><div class='line' id='LC5'><span class="sd">* @param array $url_list URLの配列</span></div><div class='line' id='LC6'><span class="sd">* @param boolean $url_as_key 結果配列を返すときに、urlをキーにする</span></div><div class='line' id='LC7'><span class="sd">* @param int $timeout タイムアウト秒数 0だと無制限</span></div><div class='line' id='LC8'><span class="sd">* @return array 結果配列</span></div><div class='line' id='LC9'><span class="sd">*/</span></div><div class='line' id='LC10'><span class="k">function</span> <span class="nf">execute</span><span class="p">(</span><span class="nv">$url_list</span><span class="p">,</span> <span class="nv">$url_as_key</span> <span class="o">=</span> <span class="k">false</span><span class="p">,</span> <span class="nv">$timeout</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// set your process number</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$process</span> <span class="o">=</span> <span class="mi">5</span><span class="p">;</span></div><div class='line' id='LC13'><br/></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$is_over_process</span> <span class="o">=</span> <span class="k">false</span><span class="p">;</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nv">$process</span> <span class="o">&lt;</span> <span class="nb">count</span><span class="p">(</span><span class="nv">$url_list</span><span class="p">))</span> <span class="p">{</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// chunk url list / process number*</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$url_chunk</span> <span class="o">=</span> <span class="nb">array_chunk</span><span class="p">(</span><span class="nv">$url_list</span><span class="p">,</span> <span class="nv">$process</span><span class="p">);</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$is_over_process</span> <span class="o">=</span> <span class="k">true</span><span class="p">;</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC20'><br/></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$ret</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span> </div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div><div class='line' id='LC23'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nv">$is_over_process</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="k">empty</span><span class="p">(</span><span class="nv">$url_chunk</span><span class="p">))</span> <span class="p">{</span></div><div class='line' id='LC24'><br/></div><div class='line' id='LC25'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">foreach</span> <span class="p">(</span><span class="nv">$url_chunk</span> <span class="k">as</span> <span class="nv">$key</span> <span class="o">=&gt;</span> <span class="nv">$url_list</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">echo</span> <span class="s2">&quot;chunk start:</span><span class="si">{</span><span class="nv">$key</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span></div><div class='line' id='LC27'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div><div class='line' id='LC28'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$res</span> <span class="o">=</span> <span class="nx">fetch_multi_url</span><span class="p">(</span><span class="nv">$url_list</span><span class="p">,</span> <span class="nv">$url_as_key</span><span class="p">,</span> <span class="nv">$timeout</span><span class="p">);</span></div><div class='line' id='LC29'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="k">empty</span><span class="p">(</span><span class="nv">$res</span><span class="p">))</span> <span class="p">{</span></div><div class='line' id='LC30'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$ret</span> <span class="o">=</span> <span class="nb">array_merge</span><span class="p">(</span><span class="nv">$ret</span><span class="p">,</span> <span class="nv">$res</span><span class="p">);</span></div><div class='line' id='LC31'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span> <span class="k">else</span> <span class="p">{</span></div><div class='line' id='LC32'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">continue</span><span class="p">;</span></div><div class='line' id='LC33'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC34'><br/></div><div class='line' id='LC35'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC36'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nv">$is_over_process</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="k">empty</span><span class="p">(</span><span class="nv">$url_list</span><span class="p">)){</span></div><div class='line' id='LC37'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$ret</span> <span class="o">=</span> <span class="nx">fetch_multi_url</span><span class="p">(</span><span class="nv">$url_list</span><span class="p">,</span> <span class="nv">$url_as_key</span><span class="p">,</span> <span class="nv">$timeout</span><span class="p">);</span></div><div class='line' id='LC38'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span> <span class="k">else</span> <span class="p">{</span></div><div class='line' id='LC39'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">echo</span> <span class="s2">&quot;url invalid::&quot;</span><span class="p">;</span></div><div class='line' id='LC40'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC41'>&nbsp;&nbsp;&nbsp;&nbsp;</div><div class='line' id='LC42'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nv">$ret</span><span class="p">;</span></div><div class='line' id='LC43'>&nbsp;&nbsp;&nbsp;&nbsp;</div><div class='line' id='LC44'><span class="p">}</span></div><div class='line' id='LC45'><br/></div><div class='line' id='LC46'><span class="sd">/**</span></div><div class='line' id='LC47'><span class="sd"> * curl_multi_execの並列処理</span></div><div class='line' id='LC48'><span class="sd"> * ほぼboilerplate</span></div><div class='line' id='LC49'><span class="sd"> *</span></div><div class='line' id='LC50'><span class="sd">* @param array $url_list URLの配列</span></div><div class='line' id='LC51'><span class="sd">* @param boolean $url_as_key 結果配列を返すときに、urlをキーにする</span></div><div class='line' id='LC52'><span class="sd">* @param int $timeout タイムアウト秒数 0だと無制限</span></div><div class='line' id='LC53'><span class="sd">* @return array 結果配列</span></div><div class='line' id='LC54'><span class="sd"> */</span></div><div class='line' id='LC55'><span class="k">function</span> <span class="nf">fetch_multi_url</span><span class="p">(</span><span class="nv">$url_list</span><span class="p">,</span> <span class="nv">$url_as_key</span><span class="p">,</span> <span class="nv">$timeout</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC56'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$mh</span> <span class="o">=</span> <span class="nb">curl_multi_init</span><span class="p">();</span></div><div class='line' id='LC57'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">foreach</span> <span class="p">(</span><span class="nv">$url_list</span> <span class="k">as</span> <span class="nv">$i</span> <span class="o">=&gt;</span> <span class="nv">$url</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC58'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$ch</span><span class="p">[</span><span class="nv">$i</span><span class="p">]</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">(</span><span class="nv">$url</span><span class="p">);</span></div><div class='line' id='LC59'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">[</span><span class="nv">$i</span><span class="p">],</span><span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span><span class="mi">1</span><span class="p">);</span></div><div class='line' id='LC60'><br/></div><div class='line' id='LC61'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//タイムアウト</span></div><div class='line' id='LC62'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nv">$timeout</span><span class="p">){</span></div><div class='line' id='LC63'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">[</span><span class="nv">$i</span><span class="p">],</span><span class="nx">CURLOPT_TIMEOUT</span><span class="p">,</span><span class="nv">$timeout</span><span class="p">);</span></div><div class='line' id='LC64'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC65'><br/></div><div class='line' id='LC66'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nb">curl_multi_add_handle</span><span class="p">(</span><span class="nv">$mh</span><span class="p">,</span><span class="nv">$ch</span><span class="p">[</span><span class="nv">$i</span><span class="p">]);</span></div><div class='line' id='LC67'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC68'><br/></div><div class='line' id='LC69'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//URLを取得</span></div><div class='line' id='LC70'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//すべて取得するまでループ</span></div><div class='line' id='LC71'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$active</span> <span class="o">=</span> <span class="k">null</span><span class="p">;</span></div><div class='line' id='LC72'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">do</span> <span class="p">{</span></div><div class='line' id='LC73'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$mrc</span> <span class="o">=</span> <span class="nb">curl_multi_exec</span><span class="p">(</span><span class="nv">$mh</span><span class="p">,</span><span class="nv">$active</span><span class="p">);</span></div><div class='line' id='LC74'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="nv">$mrc</span> <span class="o">==</span> <span class="nx">CURLM_CALL_MULTI_PERFORM</span><span class="p">);</span></div><div class='line' id='LC75'><br/></div><div class='line' id='LC76'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">while</span> <span class="p">(</span><span class="nv">$active</span> <span class="k">and</span> <span class="nv">$mrc</span> <span class="o">==</span> <span class="nx">CURLM_OK</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC77'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nb">curl_multi_select</span><span class="p">(</span><span class="nv">$mh</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC78'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">do</span> <span class="p">{</span></div><div class='line' id='LC79'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$mrc</span> <span class="o">=</span> <span class="nb">curl_multi_exec</span><span class="p">(</span><span class="nv">$mh</span><span class="p">,</span><span class="nv">$active</span><span class="p">);</span></div><div class='line' id='LC80'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="nv">$mrc</span> <span class="o">==</span> <span class="nx">CURLM_CALL_MULTI_PERFORM</span><span class="p">);</span></div><div class='line' id='LC81'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC82'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC83'><br/></div><div class='line' id='LC84'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nv">$mrc</span> <span class="o">!=</span> <span class="nx">CURLM_OK</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC85'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">echo</span> <span class="s1">&#39;読み込みエラーが発生しました:&#39;</span><span class="o">.</span><span class="nv">$mrc</span><span class="p">;</span></div><div class='line' id='LC86'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC87'><br/></div><div class='line' id='LC88'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//ソースコードを取得</span></div><div class='line' id='LC89'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$res</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span></div><div class='line' id='LC90'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">foreach</span> <span class="p">(</span><span class="nv">$url_list</span> <span class="k">as</span> <span class="nv">$i</span> <span class="o">=&gt;</span> <span class="nv">$url</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC91'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">((</span><span class="nv">$err</span> <span class="o">=</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">[</span><span class="nv">$i</span><span class="p">]))</span> <span class="o">==</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC92'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// url_as_keyがtrueの場合、urlをキーとして格納</span></div><div class='line' id='LC93'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nv">$url_as_key</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC94'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$res</span><span class="p">[</span><span class="nv">$url</span><span class="p">]</span> <span class="o">=</span> <span class="nb">curl_multi_getcontent</span><span class="p">(</span><span class="nv">$ch</span><span class="p">[</span><span class="nv">$i</span><span class="p">]);</span></div><div class='line' id='LC95'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// そうでない場合は、ただ配列に入れる</span></div><div class='line' id='LC96'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span> <span class="k">else</span> <span class="p">{</span></div><div class='line' id='LC97'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$res</span><span class="p">[</span><span class="nv">$i</span><span class="p">]</span> <span class="o">=</span> <span class="nb">curl_multi_getcontent</span><span class="p">(</span><span class="nv">$ch</span><span class="p">[</span><span class="nv">$i</span><span class="p">]);</span></div><div class='line' id='LC98'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC99'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span> <span class="k">else</span> <span class="p">{</span></div><div class='line' id='LC100'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">echo</span> <span class="s1">&#39;取得に失敗しました:&#39;</span><span class="o">.</span><span class="nv">$url_list</span><span class="p">[</span><span class="nv">$i</span><span class="p">]</span><span class="o">.</span><span class="s1">&#39;&lt;br /&gt;&#39;</span><span class="p">;</span></div><div class='line' id='LC101'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC102'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nb">curl_multi_remove_handle</span><span class="p">(</span><span class="nv">$mh</span><span class="p">,</span><span class="nv">$ch</span><span class="p">[</span><span class="nv">$i</span><span class="p">]);</span></div><div class='line' id='LC103'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nb">curl_close</span><span class="p">(</span><span class="nv">$ch</span><span class="p">[</span><span class="nv">$i</span><span class="p">]);</span></div><div class='line' id='LC104'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC105'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nb">curl_multi_close</span><span class="p">(</span><span class="nv">$mh</span><span class="p">);</span></div><div class='line' id='LC106'><br/></div><div class='line' id='LC107'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nv">$res</span><span class="p">;</span></div><div class='line' id='LC108'><span class="p">}</span></div><div class='line' id='LC109'><br/></div><div class='line' id='LC110'><br/></div><div class='line' id='LC111'><span class="c1">// 並列実行したいurl list</span></div><div class='line' id='LC112'><span class="nv">$url_list</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span></div><div class='line' id='LC113'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="s2">&quot;http://www.kinopyo.com/blog/ipad-2-not-charging-when-connected-to-pc-usb&quot;</span><span class="p">,</span></div><div class='line' id='LC114'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="s2">&quot;http://www.kinopyo.com/blog/the-first-app-i-installed-to-ipad2&quot;</span><span class="p">,</span></div><div class='line' id='LC115'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="s2">&quot;http://www.kinopyo.com/blog/chrome-warn-before-quitting-with-command-q-in-mac&quot;</span><span class="p">,</span></div><div class='line' id='LC116'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="s2">&quot;http://www.kinopyo.com/blog/reply-to-all-always-in-gmail&quot;</span><span class="p">,</span></div><div class='line' id='LC117'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="s2">&quot;http://www.kinopyo.com/blog/lion-fullscreen-shortcut-key-conflict-with-evernote-client&quot;</span><span class="p">,</span></div><div class='line' id='LC118'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="s2">&quot;http://www.kinopyo.com/blog/how-to-set-gesture-for-chrome-to-swipe-back-and-forth-in-lion&quot;</span><span class="p">,</span></div><div class='line' id='LC119'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="s2">&quot;http://www.kinopyo.com/blog/3-free-ebooks-for-study-coffeescript&quot;</span></div><div class='line' id='LC120'><span class="p">);</span></div><div class='line' id='LC121'><br/></div><div class='line' id='LC122'><span class="c1">// start time</span></div><div class='line' id='LC123'><span class="nv">$start_time</span> <span class="o">=</span> <span class="nb">microtime</span><span class="p">(</span><span class="k">true</span><span class="p">);</span></div><div class='line' id='LC124'><br/></div><div class='line' id='LC125'><span class="c1">// execute</span></div><div class='line' id='LC126'><span class="nv">$res</span> <span class="o">=</span> <span class="nx">execute</span><span class="p">(</span><span class="nv">$url_list</span><span class="p">,</span> <span class="k">true</span><span class="p">);</span></div><div class='line' id='LC127'><br/></div><div class='line' id='LC128'><span class="c1">// execute time</span></div><div class='line' id='LC129'><span class="nv">$time</span> <span class="o">=</span> <span class="nb">microtime</span><span class="p">(</span><span class="k">true</span><span class="p">)</span> <span class="o">-</span> <span class="nv">$start_time</span><span class="p">;</span></div><div class='line' id='LC130'><br/></div><div class='line' id='LC131'><span class="c1">// play with the result</span></div><div class='line' id='LC132'><span class="c1">// here I just get the page title</span></div><div class='line' id='LC133'><span class="nv">$titles</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span></div><div class='line' id='LC134'><span class="k">foreach</span> <span class="p">(</span><span class="nv">$res</span> <span class="k">as</span> <span class="nv">$url</span> <span class="o">=&gt;</span> <span class="nv">$html</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC135'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nb">preg_match</span><span class="p">(</span><span class="s1">&#39;{&lt;title&gt;(.*)&lt;/title&gt;}&#39;</span><span class="p">,</span><span class="nv">$html</span><span class="p">,</span> <span class="nv">$match_title</span><span class="p">);</span></div><div class='line' id='LC136'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$titles</span><span class="p">[</span><span class="nv">$url</span><span class="p">]</span> <span class="o">=</span> <span class="nv">$match_title</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span></div><div class='line' id='LC137'><span class="p">}</span></div><div class='line' id='LC138'><br/></div><div class='line' id='LC139'><span class="k">echo</span> <span class="s2">&quot;Result:</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span></div><div class='line' id='LC140'><span class="k">echo</span> <span class="s2">&quot;time:</span><span class="si">{</span><span class="nv">$time</span><span class="si">}</span><span class="s2"> sec</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span></div><div class='line' id='LC141'><span class="nb">print_r</span><span class="p">(</span><span class="nv">$titles</span><span class="p">);</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1073555/34090871661f99b73e0d85cfbc3571a72569970e/multi-process-exec.php" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1073555#file_multi_process_exec.php" style="float:right;margin-right:10px;color:#666">multi-process-exec.php</a>
            <a href="https://gist.github.com/1073555">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>参考：<a href="http://techblog.ecstudio.jp/tech-tips/php-multi.html" target="_blank">PHPでマルチスレッド(バックグラウンド処理)を実現する方法</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/php-multi-thread-with-specific-process-number-using-curl-multi/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP:必要桁数まで0埋めする</title>
		<link>http://www.kinopyo.com/blog/php-pad-a-number-to-certain-length-with-0</link>
		<comments>http://www.kinopyo.com/blog/php-pad-a-number-to-certain-length-with-0#comments</comments>
		<pubDate>Fri, 22 Jul 2011 14:58:55 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[PHP5]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1597</guid>
		<description><![CDATA[

// 47 -&#62; 047
sprintf(&#34;%03d&#34;, 47); 

// or

// parameter: string $input , int $pad_length,
str_pad(47, 3, &#039;0&#039;, STR_PAD_LEFT);

str-padについては：http://php.net/manual/en/function.str-pad.php


]]></description>
			<content:encoded><![CDATA[<div class="section">
<pre class="brush: php;">
// 47 -&gt; 047
sprintf(&quot;%03d&quot;, 47); 

// or

// parameter: string $input , int $pad_length,
str_pad(47, 3, &#039;0&#039;, STR_PAD_LEFT);
</pre>
<p>str-padについては：<a href="http://php.net/manual/en/function.str-pad.php" target="_blank">http://php.net/manual/en/function.str-pad.php</a></p>
<p></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/php-pad-a-number-to-certain-length-with-0/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PEAR HTTP_Requestのサンプルコード</title>
		<link>http://www.kinopyo.com/blog/pear-http_request-example</link>
		<comments>http://www.kinopyo.com/blog/pear-http_request-example#comments</comments>
		<pubDate>Wed, 08 Jun 2011 13:37:11 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[PHP5]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1901</guid>
		<description><![CDATA[
仕事で使ったので簡単にサンプルコードをまとめました。


]]></description>
			<content:encoded><![CDATA[<div class="section">
<p>仕事で使ったので簡単にサンプルコードをまとめました。</p>
<p><script type="text/javascript" src="scripts/gist1014278.js"></script></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/pear-http_request-example/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP:環境構築時に使う接続テストコードまとめ MySQL/Oracle/Memcache/Memcached</title>
		<link>http://www.kinopyo.com/blog/php-connection-test-code-for-mysql-oracle-memcache-memcached</link>
		<comments>http://www.kinopyo.com/blog/php-connection-test-code-for-mysql-oracle-memcache-memcached#comments</comments>
		<pubDate>Thu, 02 Jun 2011 15:47:32 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[PHP5]]></category>
		<category><![CDATA[memcache]]></category>
		<category><![CDATA[memcached]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1866</guid>
		<description><![CDATA[
環境構築時に接続テスト用のコードをまとめました。

gist()

]]></description>
			<content:encoded><![CDATA[<div class="section">
<p>環境構築時に接続テスト用のコードをまとめました。</p>
<p><script type="text/javascript" src="scripts/gist.js"></script></p>
<p><script type="text/javascript">gist()</script></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/php-connection-test-code-for-mysql-oracle-memcache-memcached/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cakephp XML to Array</title>
		<link>http://www.kinopyo.com/blog/cakephp-xml-to-array</link>
		<comments>http://www.kinopyo.com/blog/cakephp-xml-to-array#comments</comments>
		<pubDate>Sat, 14 May 2011 22:52:14 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[PHP5]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1719</guid>
		<description><![CDATA[
CakephpでXMLを配列に変換するのはとても簡単です。
下記のファンクションを使えば一発でできます。

uses(&#039;Xml&#039;);
$xml = new Xml(&#34;/path/to/xml&#34;);
$xml_array = Set::reverse($xml);


]]></description>
			<content:encoded><![CDATA[<div class="section">
<p>CakephpでXMLを配列に変換するのはとても簡単です。</p>
<p>下記のファンクションを使えば一発でできます。</p>
<pre class="brush: php;">
uses(&#039;Xml&#039;);
$xml = new Xml(&quot;/path/to/xml&quot;);
$xml_array = Set::reverse($xml);
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/cakephp-xml-to-array/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Smartyで文字列を連結</title>
		<link>http://www.kinopyo.com/blog/smarty-concat-string</link>
		<comments>http://www.kinopyo.com/blog/smarty-concat-string#comments</comments>
		<pubDate>Wed, 11 May 2011 09:05:07 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[Smarty]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1713</guid>
		<description><![CDATA[
こんな感じです。

{&#34;`$foo` plain text `$bar`&#34;}


]]></description>
			<content:encoded><![CDATA[<div class="section">
<p>こんな感じです。</p>
<pre class="brush: php;">
{&quot;`$foo` plain text `$bar`&quot;}
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/smarty-concat-string/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Fatal error:  Call to undefined function mcrypt_decrypt()</title>
		<link>http://www.kinopyo.com/blog/php-fatal-error-call-to-undefined-function-mcrypt_decrypt</link>
		<comments>http://www.kinopyo.com/blog/php-fatal-error-call-to-undefined-function-mcrypt_decrypt#comments</comments>
		<pubDate>Fri, 22 Apr 2011 04:15:42 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[PHP5]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1698</guid>
		<description><![CDATA[
こちらを参照してください。

Mcrypt Requirements
Mcrypt Installation

PHPを&#8211;with-mcrypt[=DIR]再コンパイルする必要があるそうです。またlibmcryptも2.5.6以上のバージョンを求められます。
一般的にもしfunction is undefinedになったら、何かライブラリをコンパイルする必要があるということになります。

sudo apt-get install php5-mcrypt

works on ubuntu.

sudo port install php5-mcrypt

works on mac.

]]></description>
			<content:encoded><![CDATA[<div class="section">
<p>こちらを参照してください。</p>
<ul>
<li><a href="http://de.php.net/manual/en/mcrypt.requirements.php" target="_blank">Mcrypt Requirements</a></li>
<li><a href="http://de.php.net/manual/en/mcrypt.installation.php" target="_blank">Mcrypt Installation</a></li>
</ul>
<p>PHPを&#8211;with-mcrypt[=DIR]再コンパイルする必要があるそうです。またlibmcryptも2.5.6以上のバージョンを求められます。</p>
<p>一般的にもしfunction is undefinedになったら、何かライブラリをコンパイルする必要があるということになります。</p>
<pre class="brush: ;">
sudo apt-get install php5-mcrypt
</pre>
<p>works on ubuntu.</p>
<pre class="brush: ;">
sudo port install php5-mcrypt
</pre>
<p>works on mac.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/php-fatal-error-call-to-undefined-function-mcrypt_decrypt/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>http_build_queryを使うときの注意点：URLパラメータ区切りがエスケープされる(XAMPP要注意)</title>
		<link>http://www.kinopyo.com/blog/be-careful-when-using-http-build-query-in-php</link>
		<comments>http://www.kinopyo.com/blog/be-careful-when-using-http-build-query-in-php#comments</comments>
		<pubDate>Fri, 15 Apr 2011 11:05:15 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[PHP5]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[troubleshooting]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1670</guid>
		<description><![CDATA[
障害
http_build_queryを使ってurlのパラメータを作るときにパラメータがこうなりました。

foo=bar&#38;amp;baz=boo&#38;amp;hoge=hoge

上記のように複数のパラメータがある時に;であるべきのところが&#038;となってしまいました。
これはPHPの設定ファイル、php.iniのarg_separator.outputで制御されてて、XAMPPの場合インストールされたデフォルトでは、「&#038;」となるそうです。
解決方法
なので、php.iniの「arg_separator.output」の値を「&#038;」から「&#038;」に変更する
参考
http_build_queryを使うときの注意点(PHP)
http://www.multiburst.net/sometime-php/2008/12/http_build_query/

]]></description>
			<content:encoded><![CDATA[<div class="section">
<h4 id="hs_1f860e5129daced07ca06c7f7ea80805_header_0">障害</h4>
<p>http_build_queryを使ってurlのパラメータを作るときにパラメータがこうなりました。</p>
<pre class="brush: ;">
foo=bar&amp;amp;baz=boo&amp;amp;hoge=hoge
</pre>
<p>上記のように複数のパラメータがある時に<strong>;</strong>であるべきのところが<strong>&#038;</strong>となってしまいました。</p>
<p>これはPHPの設定ファイル、php.iniのarg_separator.outputで制御されてて、XAMPPの場合インストールされたデフォルトでは、「&#038;」となるそうです。</p>
<h4 id="hs_1f860e5129daced07ca06c7f7ea80805_header_1">解決方法</h4>
<p>なので、php.iniの「arg_separator.output」の値を「&#038;」から「&#038;」に変更する</p>
<h4 id="hs_1f860e5129daced07ca06c7f7ea80805_header_2">参考</h4>
<p>http_build_queryを使うときの注意点(PHP)</p>
<p><a href="http://www.multiburst.net/sometime-php/2008/12/http_build_query/" target="_blank">http://www.multiburst.net/sometime-php/2008/12/http_build_query/</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/be-careful-when-using-http-build-query-in-php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP: mysqlnd cannot connect to MySQL 4.1+ using old authentication</title>
		<link>http://www.kinopyo.com/blog/php-mysqlnd-cannot-connect-to-mysql-4-1-using-old-authentication</link>
		<comments>http://www.kinopyo.com/blog/php-mysqlnd-cannot-connect-to-mysql-4-1-using-old-authentication#comments</comments>
		<pubDate>Thu, 17 Mar 2011 02:37:29 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[macport]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[環境構築]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1655</guid>
		<description><![CDATA[
問題

新しい mysqlnd ライブラリは、MySQL 4.1 用の41バイトの新しいパスワードフォーマットを使用します。 古い16バイトのパスワードを使うと、mysql_connect() 系の関数は次のようなエラーメッセージを生成します。”mysqlnd cannot connect to MySQL 4.1+ using old authentication”
http://www.php.net/manual/ja/migration53.incompatible.php


MacPortでインストールしたPHP5.3では、
mysqlnd(php5.3のmysql native client)が適用される。
しかし、CentOSなどのyumでインストールできるMySQLサーバーとの相性がよろしくない。
PHP Warning:  mysql_connect(): mysqlnd cannot connect to MySQL 4.1+ using old authentication
というエラーが現れ、接続することができません。
mysqlndを利用しないよう再コンパイルが必要となる。
http://taikimen.blogspot.com/2010/10/snowleopard-php53mysql.html

解決方法
portでインストールしたモジュールを確認、mysqlndがactiveなってるはず。

sudo port ...]]></description>
			<content:encoded><![CDATA[<div class="section">
<h4 id="hs_0e8d1944ae9733161cebef1453a09ff4_header_0">問題</h4>
<blockquote>
<p>新しい mysqlnd ライブラリは、MySQL 4.1 用の41バイトの新しいパスワードフォーマットを使用します。 古い16バイトのパスワードを使うと、mysql_connect() 系の関数は次のようなエラーメッセージを生成します。”mysqlnd cannot connect to MySQL 4.1+ using old authentication”</p>
<p><cite><a href="http://www.php.net/manual/ja/migration53.incompatible.php" target="_blank">http://www.php.net/manual/ja/migration53.incompatible.php</a></cite>
</p></blockquote>
<blockquote>
<p>MacPortでインストールしたPHP5.3では、</p>
<p>mysqlnd(php5.3のmysql native client)が適用される。</p>
<p>しかし、CentOSなどのyumでインストールできるMySQLサーバーとの相性がよろしくない。</p>
<p>PHP Warning:  mysql_connect(): mysqlnd cannot connect to MySQL 4.1+ using old authentication</p>
<p>というエラーが現れ、接続することができません。</p>
<p>mysqlndを利用しないよう再コンパイルが必要となる。</p>
<p><cite><a href="http://taikimen.blogspot.com/2010/10/snowleopard-php53mysql.html" target="_blank">http://taikimen.blogspot.com/2010/10/snowleopard-php53mysql.html</a></cite>
</p></blockquote>
<h4 id="hs_0e8d1944ae9733161cebef1453a09ff4_header_1">解決方法</h4>
<p>portでインストールしたモジュールを確認、mysqlndがactiveなってるはず。</p>
<pre class="brush: ;">
sudo port installed

php5-mysql @5.3.5_0+mysqlnd (active)
</pre>
<p>そしてmysql5のvariantsを指定で再インストール。</p>
<pre class="brush: ;">
% sudo port install php5-mysql +mysql5
---&gt;  Computing dependencies for php5-mysql
---&gt;  Fetching php5-mysql
---&gt;  Verifying checksum(s) for php5-mysql
---&gt;  Extracting php5-mysql
---&gt;  Configuring php5-mysql
---&gt;  Building php5-mysql
---&gt;  Staging php5-mysql into destroot
---&gt;  Installing php5-mysql @5.3.5_0+mysql5
---&gt;  Deactivating php5-mysql @5.3.5_0+mysqlnd
---&gt;  Cleaning php5-mysql
---&gt;  Activating php5-mysql @5.3.5_0+mysql5
---&gt;  Cleaning php5-mysql
</pre>
<p>再度port installedで確認すればmysql5がactiveになるはず。これで解決。</p>
<pre class="brush: ;">
php5-mysql @5.3.5_0+mysqlnd
php5-mysql @5.3.5_0+mysql5 (active)
</pre>
<p></p>
<h4 id="hs_0e8d1944ae9733161cebef1453a09ff4_header_2">参考</h4>
<p>【php】mysqlndを使うとMySQLに接続できない</p>
<p><a href="http://www.softel.co.jp/blogs/tech/archives/2225" target="_blank">http://www.softel.co.jp/blogs/tech/archives/2225</a></p>
<p>SnowLeopard + PHP5.3でのMySQLリモート接続</p>
<p><a href="http://taikimen.blogspot.com/2010/10/snowleopard-php53mysql.html" target="_blank">http://taikimen.blogspot.com/2010/10/snowleopard-php53mysql.html</a></p>
<p>PHP: mysqlnd cannot connect to MySQL 4.1+ using old authentication</p>
<p><a href="http://www.bitshop.com/Blogs/tabid/95/EntryId/67/PHP-mysqlnd-cannot-connect-to-MySQL-4-1-using-old-authentication.aspx" target="_blank">http://www.bitshop.com/Blogs/tabid/95/EntryId/67/PHP-mysqlnd-cannot-connect-to-MySQL-4-1-using-old-authentication.aspx</a></p>
<h4 id="hs_0e8d1944ae9733161cebef1453a09ff4_header_3">おまけ</h4>
<p>mysqlが古い16バイトのパスワードを使ってるかを確認する方法です。</p>
<p>mysqlにログインして下記コマンドを実行：</p>
<pre class="brush: ;">
mysql&gt; select password(&#039;aa&#039;);

+------------------+
| password(&#039;aa&#039;)         |
+------------------+
| 0123456789abcdef |
+------------------+
</pre>
<p>16位だっだら古いです。40位なら新しいってことです。</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/php-mysqlnd-cannot-connect-to-mysql-4-1-using-old-authentication/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP, and Strict Standards</title>
		<link>http://www.kinopyo.com/blog/cakephp-and-strict-standards</link>
		<comments>http://www.kinopyo.com/blog/cakephp-and-strict-standards#comments</comments>
		<pubDate>Thu, 17 Mar 2011 02:28:37 +0000</pubDate>
		<dc:creator>kinopyo</dc:creator>
				<category><![CDATA[PHP5]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[macport]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[環境構築]]></category>

		<guid isPermaLink="false">http://www.kinopyo.com/blog/?p=1651</guid>
		<description><![CDATA[
MacportでPHPをインストールし、CakePHPを動かしたら「Strict Standards」エラーが出ました。
当時のエラー本文は残ってませんので、Googleで検索したエラー本文を貼り付けます。パス以外は同じのはずです。

Strict Standards: Assigning the return value of new by reference is deprecated in /Applications/MAMP/htdocs/xxxx/cake/basics.php on line 279
Strict Standards: Redefining already defined constructor for class Object in /Applications/MAMP/htdocs/xxxx/cake/libs/object.php on line ...]]></description>
			<content:encoded><![CDATA[<div class="section">
<p>MacportでPHPをインストールし、CakePHPを動かしたら「Strict Standards」エラーが出ました。</p>
<p>当時のエラー本文は残ってませんので、Googleで検索したエラー本文を貼り付けます。パス以外は同じのはずです。</p>
<pre class="brush: ;">
Strict Standards: Assigning the return value of new by reference is deprecated in /Applications/MAMP/htdocs/xxxx/cake/basics.php on line 279
Strict Standards: Redefining already defined constructor for class Object in /Applications/MAMP/htdocs/xxxx/cake/libs/object.php on line 65
Strict Standards: Assigning the return value of new by reference is deprecated in /Applications/MAMP/htdocs/xxxx/cake/libs/object.php on line 92
Strict Standards: Assigning the return value of new by reference is deprecated in /Applications/MAMP/htdocs/xxxx/cake/libs/inflector.php on line 65
Strict Standards: Assigning the return value of new by reference is deprecated in /Applications/MAMP/htdocs/xxxx/cake/libs/configure.php on line 96
Strict Standards: Assigning the return value of new by reference is deprecated in /Applications/MAMP/htdocs/xxxx/cake/libs/configure.php on line 154
Strict Standards: Assigning the return value of new by reference is deprecated in /Applications/MAMP/htdocs/xxxx/cake/libs/cache.php on line 71
Strict Standards: Assigning the return value of new by reference is deprecated in /Applications/MAMP/htdocs/xxxx/cake/libs/cache.php on line 157
Strict Standards: Non-static method Configure::getInstance() should not be called statically in /Applications/MAMP/htdocs/xxxx/cake/bootstrap.php on li
</pre>
<h4 id="hs_bc0b66c5c36384b4fae529016f370d9e_header_0">解決方法</h4>
<p>これはCakePHPの問題ではなく、PHPのerror_reportingの設定問題だそうです。</p>
<p>php.iniを開いて<strong>error_reporting</strong>で検索します。</p>
<p>値を<strong>E_ALL</strong>に変更すれば解決です。</p>
<p>ちなみにMacportでPHPをインストールしたときのphp.iniパスは<strong>/opt/local/etc/php5/php.ini</strong>になります。</p>
<h4 id="hs_bc0b66c5c36384b4fae529016f370d9e_header_1">参考リンク</h4>
<p><a href="http://oldblog.awpny.com/2007/12/mamp-php5-cakephp-and-strict-standards/" target="_blank">http://oldblog.awpny.com/2007/12/mamp-php5-cakephp-and-strict-standards/</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kinopyo.com/blog/cakephp-and-strict-standards/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 3/59 queries in 0.385 seconds using disk: basic
Object Caching 768/861 objects using disk: basic

Served from: www.kinopyo.com @ 2012-01-15 15:03:36 -->
