<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[安装php的php-protobu扩展及使用]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Php/Js/Shell/Go]]></category>
<pubDate>Thu, 29 May 2014 01:39:55 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：群里讨论的，我也没用过，一搜索以前我也贴过类似的：http://jackxiang.com/post/7226/&nbsp;&nbsp;，先记下吧。<br/>http://XX.XX.com/group/456/articles/show/134097&nbsp;&nbsp;（应该是来自某大公司内网做了改造。）<br/>这是我们之前对pb4php做的改造<br/>1.补充了sint32、sint64和fixed32等常用数据类型的支持<br/>2.增加了DebugString调试函数支持。<br/><br/><br/>所用资源：https://github.com/allegro/php-protobuf/<br/>进入解压目录执行： phpize<br/>./configure<br/>make<br/>make install<br/># please add following line to your php.ini<br/>extension=protobuf.so<br/>重启PHP<br/>phpinfo()&nbsp;&nbsp;就可以看到 protobuff扩展<br/><br/>如何使用?<br/>保存<br/>首先建方proto文件 foo.proto文件<br/> message PhoneNumber &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;required string number = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;required int32 type = 2;<br/>&nbsp;&nbsp;&#125;<br/>message Person &#123;<br/>&nbsp;&nbsp;required string name = 1;<br/>&nbsp;&nbsp;required int32 id = 2;<br/>&nbsp;&nbsp;optional string email = 3;<br/>&nbsp;&nbsp;repeated PhoneNumber phone = 4;<br/>&#125;<br/>message AddressBook &#123;<br/>&nbsp;&nbsp;repeated Person person = 1;<br/>&#125;<br/>然后用命令生成<br/>php protoc-php.php foo.proto<br/>这时候会生成一个pb_proto_foo.php文件<br/>下面具体就应用 。<br/>假如与JAVA通信。protobuffer 保存php文件test.php如：<br/>require_once &#039;pb_proto_test.php&#039;;<br/>$packed = curlGet(&#039;http://10.0.247.113:8080/testweb/proto&#039;);&nbsp;&nbsp; //此处是JAVA返回的buffer信息<br/>$foo = new AddressBook();<br/>try &#123;<br/>$foo-&gt;parseFromString($packed);<br/>&#125; catch (Exception $ex) &#123;<br/>die(&#039;Parse error: &#039; . $e-&gt;getMessage());<br/>&#125;<br/>$pb = $foo-&gt;getPerson();<br/>//print_r($pb);<br/>//print_r($pb[0]);<br/>echo $pb[0]-&gt;getName() .&#039; _ &#039;.$pb[0]-&gt;getId() .&#039; _ &#039;;<br/>print_r($pb[0]-&gt;getPhone());<br/>PHP调用修改buffer数据<br/>－－－－－－－－－－－－－－－－－－－－－－－－－－－－<br/>require_once &#039;pb_proto_test.php&#039;;<br/>$foo = new Person();<br/>$foo-&gt;setName(&#039;xiaojh&#039;);<br/>$foo-&gt;setId(200);<br/>$foo-&gt;setEmail(&#039;dofound@163.com&#039;);<br/>//$foo-&gt;appendPhone(2);<br/>$packed = $foo-&gt;serializeToString();<br/>$foo-&gt;clear();<br/>try &#123;<br/>$xiao = $foo-&gt;parseFromString($packed);<br/>//print_r($xiao);<br/>&#125; catch (Exception $ex) &#123;<br/>die(&#039;Upss.. there is a bug in this example&#039;);<br/>&#125;<br/>echo $foo-&gt;getName();<br/>echo $foo-&gt;getPhone()-&gt;number;<br/>$foo-&gt;dump();<br/>PHP内部调用<br/>------------------------------<br/>生成buffer数据<br/>&lt;?php<br/>require_once &#039;pb_proto_test.php&#039;;<br/>$foo = new Person();<br/>$foo-&gt;setName(&#039;xiaojh&#039;);<br/>$foo-&gt;setId(200);<br/>$foo-&gt;setEmail(&#039;dofound@163.com&#039;);<br/>try &#123;<br/>$packed = $foo-&gt;serializeToString();<br/>&#125; catch (Exception $e) &#123;<br/>die(&#039;Serialize error: &#039; . $e-&gt;getMessage());<br/>&#125;<br/>//file_put_contents(&#039;ab.db&#039;, $packed);<br/>//$foo-&gt;dump();<br/>die($packed);<br/>获得buffer数据<br/>&lt;?php<br/>require_once &#039;pb_proto_test.php&#039;;<br/>function curlGet($url)<br/>&#123;<br/>$ch = curl_init($url);<br/>curl_setopt($ch, CURLOPT_HEADER, 0);<br/>curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br/>$tmp = curl_exec ($ch);<br/>curl_close($ch);<br/>return $tmp;<br/>&#125;<br/>$packed = curlGet(&#039;http://www.shop.dev/example/test.php&#039;);<br/>/*$db = &quot;ab.db&quot;;<br/>$handle = fopen($db, &quot;r&quot;);<br/>$packed = fread($handle, filesize ($db));<br/>*/<br/>$foo = new Person();<br/>try &#123;<br/>$foo-&gt;parseFromString($packed);<br/>&#125; catch (Exception $e) &#123;<br/>die(&#039;Parse error: &#039; . $e-&gt;getMessage());<br/>&#125;<br/>print_r($foo-&gt;getName());<br/>$foo-&gt;dump(); // see what you got<br/><br/>至此，大致就可以使用。<br/><br/>来自：http://dofound.blog.163.com/blog/static/17114324620135255144286/<br/>但是也不怎么好使：https://code.google.com/p/pb4php/
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 安装php的php-protobu扩展及使用]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>