{"id":115,"date":"2010-07-06T20:51:08","date_gmt":"2010-07-06T20:51:08","guid":{"rendered":"http:\/\/ketoha.co.jp\/blog\/archives\/115"},"modified":"2015-01-02T06:34:25","modified_gmt":"2015-01-02T06:34:25","slug":"php%e3%81%aecurl_multi-php%e3%81%aepcntl-perl%e3%81%aeithread-ruby%e3%81%aethread%e3%81%a7%e3%80%81%e4%b8%a6%e5%88%97%e5%87%a6%e7%90%86%e3%83%91%e3%83%95%e3%82%a9%e3%83%bc%e3%83%9e%e3%83%b3","status":"publish","type":"post","link":"https:\/\/ketoha.co.jp\/blog\/?p=115","title":{"rendered":"php\u306ecurl_multi, php\u306ePCNTL, perl\u306eithread, ruby\u306ethread\u3067\u3001\u4e26\u5217\u51e6\u7406\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6bd4\u8f03"},"content":{"rendered":"<p>php\u306ecurl_multi\u3092\u4f7f\u3046\u3068HTTP\u901a\u4fe1\u3092\u4e26\u5217\u3067\u304a\u3053\u306a\u3063\u3066\u304f\u308c\u307e\u3059\u3002<br \/>\n\u6700\u521d\u306b\u601d\u3063\u305f\u306e\u306f\u3001\u5b9f\u306f\u5185\u90e8\u7684\u306b\u30d7\u30ed\u30bb\u30b9\u5236\u5fa1\u3092\u304a\u3053\u306a\u3063\u3066\u5b50\u30d7\u30ed\u30bb\u30b9\u306b\u901a\u4fe1\u51e6\u7406\u3092\u3055\u305b\u3066\u3044\u308b\u306e\u3067\u306f\u306a\u3044\u304b\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002\u3067\u3042\u308c\u3070PCNTL\u95a2\u6570\u304b\u3089\u5197\u9577\u6027\u3092\u524a\u3044\u3060\u3082\u306e\u3001\u304b\u3068\u601d\u3063\u305f\u306e\u3067\u3059\u304c\u3001\u3082\u3057\u305d\u3046\u306a\u3089\u6a5f\u80fd\u3092HTTP\u901a\u4fe1\u306b\u7279\u5316\u3059\u308b\u5fc5\u8981\u306f\u306a\u3044\u3067\u3059\u306d\u3002<br \/>\n\u3080\u3057\u308d\u5185\u90e8\u7684\u306b\u306f\u30d0\u30c3\u30af\u30b0\u30e9\u30a6\u30f3\u30c9\u3067\u975e\u540c\u671f\u901a\u4fe1\u3092\u304a\u3053\u306a\u3063\u3066\u4e26\u5217\u51e6\u7406\u3092\u518d\u73fe\u3057\u3066\u3044\u308b\u306e\u3067\u3057\u3087\u3046\u304b\u3002curl\u3060\u3057\u3001\u305d\u3063\u3061\u306e\u3088\u3046\u306a\u6c17\u304c\u3057\u3066\u304d\u307e\u3057\u305f\u3002<br \/>\n\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u66f8\u3044\u3066\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\u3002<br \/>\n\u305d\u308c\u3068\u3001\u3064\u3044\u3067\u306b\u4ed6\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u8a00\u8a9e\u306e\u4e26\u5217\u51e6\u7406\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6bd4\u8f03\u3082\u3057\u3066\u307f\u307e\u3057\u305f\u3002<br \/>\n\u6e2c\u5b9a\u3057\u305f\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306f\u3001\u6d88\u8cbb\u6642\u9593\u3068\u305d\u306e\u30d7\u30ed\u30bb\u30b9\u306e\u6d88\u8cbb\u30e1\u30e2\u30ea(RSS)\u3067\u3059\u3002php\u306e\u5834\u5408\u306e\u6d88\u8cbb\u30e1\u30e2\u30ea\u306f\u5b50\u30d7\u30ed\u30bb\u30b9\u304c\u6d88\u8cbb\u3057\u305f\u3076\u3093\u3082\u52a0\u3048\u3066\u3044\u307e\u3059\u3002<br \/>\n\u307e\u305f\u3001\u901a\u4fe1\u5148\u3067\u306f\u30b9\u30ea\u30fc\u30d7\u3092\u3044\u308c\u3066\u3001\u53d6\u5f97\u306b1\u79d2\u304b\u304b\u308b\u7a0b\u5ea6\u306e\u30c7\u30fc\u30bf\u3001\u3092\u518d\u73fe\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u309210\u672c\u540c\u6642\u306b\u304a\u3053\u306a\u3063\u3066\u3044\u308b\u306e\u3067\u3001\u76f4\u5217\u51e6\u7406\u3067\u304a\u3053\u306a\u3048\u3070\u305d\u308c\u3060\u3051\u306710\u79d2\u304b\u304b\u308b\u5185\u5bb9\u3067\u3059\u3002<\/p>\n<p>HTTP\u901a\u4fe1\u3092\u4e26\u5217\u51e6\u7406<br \/>\n<strong>0. \u5171\u901a\u306e\u901a\u4fe1\u5148\u30c7\u30fc\u30bf<\/strong> (sleep.php)<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">&lt;?php\r\nheader('HTTP1\/0 200 OK', false, 200);\r\nsleep(1);\r\necho 'OK: code=' . (isset($_GET['code']) ? intval($_GET['code']) : 0);\r\n<\/pre>\n<p><strong>1. php curl_multi\u7248<\/strong> (chk.php)<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">&lt;?php\r\n$term   = microtime(true);\r\n$domain = 'localhost';\r\n$path   = '\/sleep.php';\r\n$count  = 10;\r\n$rets   = array();\r\n$conns  = array();\r\n$cpid_mem  = 0;\r\n$selfpid = intval(chop(`ps alx | grep chk.php | grep -v grep | awk '{print $3}'`));\r\n$mh = curl_multi_init();\r\nfor ($i = 0; $i &lt; $count; $i ++) {\r\n$conns[$i] = curl_init(\"http:\/\/${domain}${path}?code=${i}\");\r\ncurl_setopt($conns[$i], CURLOPT_RETURNTRANSFER, true);\r\ncurl_multi_add_handle($mh, $conns[$i]);\r\n}\r\n$running = null;\r\ndo {curl_multi_exec($mh, $running);} while ($running);\r\nforeach (explode(\"\\n\", chop(\r\n`ps alx | grep chk.php | grep -v grep | grep ${selfpid} | awk '{print $4, $8}'`\r\n)) as $ps) {\r\n$childs = explode(' ', $ps);\r\nif ($childs[0] == $selfpid) $cpid_mem += intval($childs[1]);\r\n}\r\nforeach ($conns as $conn) {\r\narray_push($rets, curl_multi_getcontent($conn));\r\ncurl_multi_remove_handle($mh, $conn);\r\ncurl_close($conn);\r\n}\r\ncurl_multi_close($mh);\r\nprint_r($rets);\r\necho 'time: ' . round(microtime(true) - $term, 3) . \"sec\\n\";\r\n$ppid_mem = intval(chop(`ps alx | grep chk.php | grep -v grep | awk '{print $8}'`));\r\necho 'RSS:  ' . $ppid_mem . 'KB(parent) + ' . $cpid_mem . \"(childs)KB\\n\";\r\n<\/pre>\n<p>\u5b9f\u884c\u7d50\u679c:<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">php -v | head -n 1\r\nPHP 5.3.1 (cli) (built: Feb  6 2010 01:50:38)\r\nphp .\/chk.php\r\nArray\r\n(\r\n[0] =&gt; OK: code=0\r\n[1] =&gt; OK: code=1\r\n[2] =&gt; OK: code=2\r\n[3] =&gt; OK: code=3\r\n[4] =&gt; OK: code=4\r\n[5] =&gt; OK: code=5\r\n[6] =&gt; OK: code=6\r\n[7] =&gt; OK: code=7\r\n[8] =&gt; OK: code=8\r\n[9] =&gt; OK: code=9\r\n)\r\ntime: 1.048sec\r\nRSS:  11412KB(parent) + 0(childs)KB\r\n<\/pre>\n<p><strong>2. php PCNTL\u7248<\/strong> (chk2.php)<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">&lt;?php\r\n$term   = microtime(true);\r\n$domain = 'localhost';\r\n$path   = '\/sleep.php';\r\n$count  = 10;\r\n$rets   = array();\r\n$conns  = array();\r\n$cpid_mem  = 0;\r\n$cpid_cnt = 0;\r\ndeclare(ticks=1);\r\n$selfpid = intval(chop(`ps alx | grep chk2.php | grep -v grep | awk '{print $3}'`));\r\nfor ($i = 0; $i &lt; $count; $i ++) {\r\n$cpid = pcntl_fork();\r\nif ($cpid) {\r\n$cpid_cnt ++;\r\ncontinue;\r\n}\r\n$ret = file_get_contents(\"http:\/\/${domain}${path}?code=${i}\");\r\n$fp = fopen('ret.txt', \"a\");\r\nflock($fp, LOCK_EX);\r\nfwrite($fp, $ret . \"\\n\");\r\nflock($fp, LOCK_UN);\r\nfclose($fp);\r\nexit;\r\n}\r\nforeach (explode(\"\\n\", chop(\r\n`ps alx | grep chk2.php | grep -v grep | grep ${selfpid} | awk '{print \\$4, \\$8}'`\r\n)) as $ps) {\r\n$childs = explode(' ', $ps);\r\nif ($childs[0] == $selfpid) $cpid_mem += intval($childs[1]);\r\n}\r\nwhile($cpid_cnt &gt; 0) {\r\n$cpid = pcntl_wait($stat);\r\n$cpid_cnt--;\r\n}\r\nprint_r(file_get_contents('ret.txt'));\r\necho 'time: ' . round(microtime(true) - $term, 3) . \"sec\\n\";\r\n$ppid_mem = intval(chop(`ps alx | grep chk2.php | grep -v grep | awk '{print $8}'`));\r\necho 'RSS:  ' . $ppid_mem . 'KB(parent) + ' . $cpid_mem . \"KB(childs)\\n\";\r\nunlink('ret.txt');\r\n<\/pre>\n<p>\u5b9f\u884c\u7d50\u679c:<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">php .\/chk2.php\r\nOK: code=3\r\nOK: code=0\r\nOK: code=1\r\nOK: code=2\r\nOK: code=4\r\nOK: code=6\r\nOK: code=7\r\nOK: code=8\r\nOK: code=5\r\nOK: code=9\r\ntime: 1.149sec\r\nRSS:  10752KB(parent) + 51876KB(childs)\r\n<\/pre>\n<p><strong>3. perl \u30b9\u30ec\u30c3\u30c9\u7248<\/strong> (chk.pl)<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">use strict;\r\nuse threads;\r\nuse LWP::UserAgent;\r\nuse Data::Dump qw(dump);\r\nuse Time::HiRes qw(gettimeofday);\r\nmy $term = Time::HiRes::time;\r\nmy $domain = 'localhost';\r\nmy $path   = '\/sleep.php';\r\nmy $count  = 10;\r\nmy @rets = ();\r\nmy @ts   = ();\r\nfor (my $i = 0; $i &lt; $count; $i ++) {\r\npush(@ts, threads-&gt;new(sub {\r\nmy $req = new HTTP::Request GET =&gt; \"http:\/\/$domain$path?code=$i\";\r\nmy $res = new LWP::UserAgent-&gt;request($req);\r\nthreads-&gt;yield();\r\nreturn $res-&gt;content;\r\n}));\r\n}\r\nforeach (@ts) {push(@rets, $_-&gt;join);}\r\nprint dump(@rets) . \"\\n\";\r\nprintf(\"time: %1.3fsec\\n\", Time::HiRes::time - $term);\r\nprint 'RSS:  ' . `ps alx | grep chk.pl | grep -v grep | awk '{print \\$8}'`;\r\n<\/pre>\n<p>\u5b9f\u884c\u7d50\u679c:<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">perl -v | head -n 2\r\nThis is perl, v5.8.8 built for i386-linux-thread-multi\r\nperl .\/chk.pl\r\n(\r\n\"OK: code=0\",\r\n\"OK: code=1\",\r\n\"OK: code=2\",\r\n\"OK: code=3\",\r\n\"OK: code=4\",\r\n\"OK: code=5\",\r\n\"OK: code=6\",\r\n\"OK: code=7\",\r\n\"OK: code=8\",\r\n\"OK: code=9\",\r\n)\r\ntime: 1.313sec\r\nRSS:  31024\r\n<\/pre>\n<p><strong>4. ruby \u30b9\u30ec\u30c3\u30c9\u7248<\/strong> (chk.rb)<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">require 'net\/http'\r\nterm   = Time.now\r\ndomain = 'localhost'\r\npath   = '\/sleep.php'\r\ncount  = 10\r\nrets   = []\r\nts     = []\r\ncount.times do |i|\r\nts &lt;&lt; Thread.new(domain,\"#{path}?code=#{i}\") do |domain, path|\r\nhttp = Net::HTTP.new(domain, 80)\r\nreq = Net::HTTP::Get.new(path)\r\nrets &lt;&lt; http.request(req).body\r\nend\r\nend\r\nts.each {|t|t.join}\r\np rets\r\nprintf(\"time: %1.3fsec\\n\", Time.now - term)\r\nprint 'RSS:  ' + `ps alx | grep chk.rb | grep -v grep | awk '{print $8}'`\r\n<\/pre>\n<p>\u5b9f\u884c\u7d50\u679c:<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">ruby -v\r\nruby 1.9.1p378 (2010-01-10 revision 26273) [i686-linux]\r\nruby .\/chk.rb\r\n[\"OK: code=3\", \"OK: code=0\", \"OK: code=2\", \"OK: code=4\", \"OK: code=9\", \"OK: code=5\", \"OK: code=6\", \"OK: code=1\", \"OK: code=8\", \"OK: code=7\"]\r\ntime: 1.010sec\r\nRSS:  6388\r\n<\/pre>\n<p>\u307e\u3068\u3081:<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; padding: 4px 2px 2px 6px; font-size: 0.88em; line-height: 1em;\">1. php curl_multi\u7248 = \u6d88\u8cbb\u6642\u9593: 1.048\u79d2 \u30e1\u30e2\u30ea\u6d88\u8cbb\u91cf: 11412KB+0KB = 11.1MB\r\n2. php PCNTL\u7248 = \u6d88\u8cbb\u6642\u9593: 1.149\u79d2 \u30e1\u30e2\u30ea\u6d88\u8cbb\u91cf: 10752KB+51876KB=62628KB = 61.2MB\r\n3. perl \u30b9\u30ec\u30c3\u30c9\u7248 = \u6d88\u8cbb\u6642\u9593: 1.313\u79d2 \u30e1\u30e2\u30ea\u6d88\u8cbb\u91cf: 31024KB = 30.3MB\r\n4. ruby \u30b9\u30ec\u30c3\u30c9\u7248 =\u6d88\u8cbb\u6642\u9593: 1.010\u79d2 \u30e1\u30e2\u30ea\u6d88\u8cbb\u91cf: 6388KB = 6.2MB\r\n<\/pre>\n<p>\u3068\u306a\u308a\u307e\u3057\u305f\u3002<br \/>\n1.\u306ephp curl_multi\u7248\u3067\u306f\u5b50\u30d7\u30ed\u30bb\u30b9\u306f\u4f7f\u7528\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3084\u306f\u308a\u5185\u90e8\u7684\u306b\u30d7\u30ed\u30bb\u30b9\u5236\u5fa1\u3092\u304a\u3053\u306a\u3063\u3066\u4e26\u5217\u51e6\u7406\u3092\u518d\u73fe\u3057\u3066\u3044\u308b\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002<br \/>\n\u304b\u3068\u3044\u3063\u3066curl\u3092\u30d0\u30c3\u30af\u30b0\u30e9\u30a6\u30f3\u30c9\u3067\u4e26\u5217\u51e6\u7406\u3055\u305b\u3066\u3044\u308b\u306e\u3067\u306f\uff1f\u3068\u3044\u3063\u305f\u691c\u8a3c\u306f\u3067\u304d\u3066\u3044\u306a\u3044\u306e\u3067\u3001\u63a8\u6e2c\u306e\u57df\u3092\u51fa\u307e\u305b\u3093\u3002\u305f\u3060\u3001\u4ed6\u306e\u691c\u8a3c\u7d50\u679c\u3068\u6bd4\u3079\u3066\u3082\u5272\u3068\u905c\u8272\u306a\u3044\u7d50\u679c\u304c\u51fa\u3066\u3044\u308b\u306e\u3067\u4f7f\u3044\u52dd\u624b\u306f\u3088\u3055\u305d\u3046\u3067\u3059\u3002<br \/>\n\u3067\u3082php\u306f\u305d\u3082\u305d\u3082\u304cHTML\u306e\u52d5\u7684\u306a\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u305f\u3081\u306b\u9032\u5316\u3057\u3066\u304d\u305f\u8a00\u8a9e\u306a\u306e\u3067\u3001\u88cf\u3067\u3082\u3057\u304b\u3057\u305f\u3089\u30c8\u30ea\u30c3\u30ad\u30fc\u306a\u3053\u3068\u3092\u3057\u3066\u3044\u308b\u306e\u304b\u3082\uff1f\u3068\u3044\u3046\u61f8\u5ff5\u3082\u3042\u308a\u307e\u3059\u3002curl_multi\u306e\u30bd\u30fc\u30b9\u3092\u898b\u3066\u307f\u305f\u3044\u3067\u3059\u306d\u3002<br \/>\n\u4ee3\u308f\u308a\u306b\u30012. \u306ephp PCNTL\u7248\u3067\u306f\u3061\u3083\u3093\u3068\u5b50\u30d7\u30ed\u30bb\u30b9\u3092\u7acb\u3066\u3066\u3001\u5404\u3005\u304cHTTP\u901a\u4fe1\u3092\u304a\u3053\u306a\u3046\u3053\u3068\u3067\u4e26\u5217\u51e6\u7406\u3092\u5b9f\u73fe\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u5206\u304b\u308a\u307e\u3059\u3002\u52d5\u304d\u3068\u3057\u3066\u306f\u898b\u3048\u3084\u3059\u304f\u3001\u7d20\u76f4\u3067\u3059\u304c\u3001\u3057\u304b\u3057\u30d7\u30ed\u30bb\u30b9\u306e\u30e1\u30e2\u30ea\u6d88\u8cbb\u91cf\u306f61.2MB\u3068\u3001\u81a8\u5927\u3067\u3059\u3002\u4e26\u5217\u51e6\u7406\u3092\u304a\u3053\u306a\u3046\u672c\u6570\u3060\u3051\u30d7\u30ed\u30bb\u30b9\u3092\u7acb\u3066\u308b\u306e\u3067\u5f53\u7136\u3067\u3059\u304c\u3001\u591a\u7528\u3057\u305f\u308a\u4e26\u5217\u51e6\u7406\u306e\u672c\u6570\u3092\u3042\u307e\u308a\u5897\u3084\u3059\u306e\u306f\u6016\u3044\u3067\u3059\u306d\u3002<br \/>\n3. \u306eperl\u306fithread\u3068\u3044\u3046\u300c\u30b9\u30ec\u30c3\u30c9\u306b\u3042\u3063\u3066\u30b9\u30ec\u30c3\u30c9\u306b\u3042\u3089\u305a\u300d\u3068\u3044\u3046\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b9\u30ec\u30c3\u30c9\u3067\u4e26\u5217\u51e6\u7406\u3092\u5b9f\u73fe\u3057\u3066\u3044\u308b\u305f\u3081\u3067\u3057\u3087\u3046\u304b\u3001\u5b9f\u884c\u6642\u9593\u3082\u30e1\u30e2\u30ea\u6d88\u8cbb\u91cf\u3082\u4e00\u756a\u3088\u304f\u306a\u3044\u6210\u7e3e\u3068\u306a\u308a\u307e\u3057\u305f\u3002perl\u3067\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u3001\u3068\u3044\u3046\u306e\u304c\u3069\u306e\u7a0b\u5ea6\u73fe\u5b9f\u7684\u306a\u624b\u6bb5\u3068\u3057\u3066\u8003\u3048\u3089\u308c\u3066\u3044\u308b\u306e\u304b\u3001\u306b\u3088\u3063\u3066\u306f\u691c\u8a3c\u3059\u308b\u307e\u3067\u3082\u306a\u3044\u306e\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3002\u672c\u5f53\u306a\u3089\u3053\u3053\u3067java\u304c\u767b\u5834\u3059\u308b\u3079\u304d\u3067\u3059\u304c\u3001\u5b9f\u884c\u74b0\u5883\u304c\u3067\u304d\u3066\u3044\u306a\u3044\u306e\u3067(^^; \u307e\u305f\u3044\u305a\u308c\u6a5f\u4f1a\u304c\u3042\u3063\u305f\u3089\u306b\u3057\u307e\u3059\u3002<br \/>\n4. \u306eruby\u306f\u30d0\u30fc\u30b8\u30e7\u30f31.9\u4ee5\u964d\u306e\u30cd\u30a4\u30c6\u30a3\u30f4\u30b9\u30ec\u30c3\u30c9\u306e\u6069\u6075\u306e\u73fe\u308c\u3067\u3057\u3087\u3046\u304b\u3001\u3044\u305a\u308c\u3082\u4e00\u756a\u3088\u3044\u6210\u7e3e\u3067\u3059\u3002\u9006\u306bOS\u306e\u30ea\u30bd\u30fc\u30b9\u306f\u3069\u306e\u304f\u3089\u3044\u6d88\u8cbb\u3057\u3066\u3044\u308b\u306e\u304b\u3001\u898b\u3066\u307f\u308c\u3070\u3088\u304b\u3063\u305f\u3067\u3059\u304c\u3001\u3053\u308c\u3082\u304a\u3044\u304a\u3044\u3068\u3044\u3046\u3053\u3068\u3067\u3002<br \/>\n\u3068\u3082\u3042\u308c\u5916\u90e8\u306eAPI\u304b\u3089\u901a\u4fe1\u7d50\u679c\u3092\u5229\u7528\u3057\u3066\u3044\u308b\u3088\u3046\u306a\u30b5\u30fc\u30d3\u30b9\u304b\u3089\u3001\u3061\u3087\u3063\u3068\u5927\u304d\u3081\u306a\u30b7\u30b9\u30c6\u30e0\u3067\u6a5f\u80fd\u7a2e\u5225\u30b5\u30fc\u30d0\u9593\u3067\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u53d7\u3051\u6e21\u3057\u3092\u3057\u3066\u3044\u308b\u3088\u3046\u306a\u30b5\u30fc\u30d3\u30b9\u3067\u3082\u3053\u306e\u3042\u305f\u308a\u306e\u9700\u8981\u306f\u591a\u3044\u3068\u601d\u3046\u306e\u3067\u3001curl_multi\u306f\u5b9f\u884c\u6642\u9593\u304b\u3089\u307f\u3066\u3082\u3001\u30d7\u30ed\u30bb\u30b9\u306e\u30e1\u30e2\u30ea\u6d88\u8cbb\u91cf\u304b\u3089\u307f\u3066\u3082\u3001\u4f7f\u3048\u308b\u6a5f\u80fd\u3060\u306a\u3068\u3044\u3046\u611f\u60f3\u3067\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>php\u306ecurl_multi\u3092\u4f7f\u3046\u3068HTTP\u901a\u4fe1\u3092\u4e26\u5217\u3067\u304a\u3053\u306a\u3063\u3066\u304f\u308c\u307e\u3059\u3002 \u6700\u521d\u306b\u601d\u3063\u305f\u306e\u306f\u3001\u5b9f\u306f\u5185\u90e8\u7684\u306b\u30d7\u30ed\u30bb\u30b9\u5236\u5fa1\u3092\u304a\u3053\u306a\u3063\u3066\u5b50\u30d7\u30ed\u30bb\u30b9\u306b\u901a\u4fe1\u51e6\u7406\u3092\u3055\u305b\u3066\u3044\u308b\u306e\u3067\u306f\u306a\u3044\u304b\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002\u3067\u3042\u308c\u3070PCNTL\u95a2\u6570\u304b\u3089\u5197<a class=\"moretag read-more-link\" href=\"https:\/\/ketoha.co.jp\/blog\/?p=115\">&#133;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":{"0":"entry","1":"post","2":"publish","3":"author-ketoher","4":"post-115","6":"format-standard","7":"category-tech"},"_links":{"self":[{"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=115"}],"version-history":[{"count":1,"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/115\/revisions"}],"predecessor-version":[{"id":159,"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/115\/revisions\/159"}],"wp:attachment":[{"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}