<?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>avenger::Life() &#187; PHP</title>
	<atom:link href="http://avenger.name/blog/category/programming/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://avenger.name</link>
	<description>Some Words. Explain My Life.</description>
	<lastBuildDate>Fri, 19 Mar 2010 07:39:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>PHP5 调用 dot NET Soap WebService 的技巧</title>
		<link>http://avenger.name/blog/how-php5-use-dotnet-soap/</link>
		<comments>http://avenger.name/blog/how-php5-use-dotnet-soap/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 02:24:41 +0000</pubDate>
		<dc:creator>avenger</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[webservice]]></category>

		<guid isPermaLink="false">http://avenger.name/?p=307</guid>
		<description><![CDATA[公司业务需要，要求用 php 来调用 .Net 的 soap 服务，php5 默认的 soapclient 会给所有请求的数据加上 ns1 的 namespace，好像也没有找到可以配置的地方，所以会造成默认情况下的调用失败。最后通过重载系统 SoapClient 类的请求方法，解决了这个问题。 相关代码放在下面给需要的朋友参考： 1 2 3 4 5 6 7 8 9 class DotNetSoapClient extends SoapClient &#123; function __doRequest&#40;$request, $location, $action, $version&#41; &#123; $namespace = 'http://xxxx'; $request = preg_replace&#40;'/&#60;ns1:(\w+)/', '&#60;$1 xmlns=&#34;'.$namespace.'&#34;', $request, 5&#41;; //最后面的数字可能要根据你的实际业务需要调整 $request = preg_replace&#40;'/&#60;ns1:(\w+)/', '&#60;$1', $request&#41;; $request = str_replace&#40;array&#40;'/ns1:', [...]]]></description>
			<content:encoded><![CDATA[<p class='fp'>公司业务需要，要求用 php 来调用 .Net 的 soap 服务，php5 默认的 soapclient 会给所有请求的数据加上 ns1 的 namespace，好像也没有找到可以配置的地方，所以会造成默认情况下的调用失败。最后通过重载系统 SoapClient 类的请求方法，解决了这个问题。</p>
<p>相关代码放在下面给需要的朋友参考：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> DotNetSoapClient <span style="color: #000000; font-weight: bold;">extends</span> SoapClient <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> __doRequest<span style="color: #009900;">&#40;</span><span style="color: #000088;">$request</span><span style="color: #339933;">,</span> <span style="color: #000088;">$location</span><span style="color: #339933;">,</span> <span style="color: #000088;">$action</span><span style="color: #339933;">,</span> <span style="color: #000088;">$version</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$namespace</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://xxxx'</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$request</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/&lt;ns1:(\w+)/'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'&lt;$1 xmlns=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$namespace</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$request</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//最后面的数字可能要根据你的实际业务需要调整</span>
        <span style="color: #000088;">$request</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/&lt;ns1:(\w+)/'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'&lt;$1'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$request</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$request</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/ns1:'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'xmlns:ns1=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$namespace</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$request</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> parent<span style="color: #339933;">::</span>__doRequest<span style="color: #009900;">&#40;</span><span style="color: #000088;">$request</span><span style="color: #339933;">,</span> <span style="color: #000088;">$location</span><span style="color: #339933;">,</span> <span style="color: #000088;">$action</span><span style="color: #339933;">,</span> <span style="color: #000088;">$version</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>July 19, 2008 -- <a href="http://avenger.name/blog/first-facebook-app/" title="我的第一个 facebook app">我的第一个 facebook app</a></li><li>July 3, 2008 -- <a href="http://avenger.name/about/" title="About">About</a></li><li>October 8, 2007 -- <a href="http://avenger.name/blog/pressline/" title="PressLine">PressLine</a></li><li>September 27, 2007 -- <a href="http://avenger.name/blog/memcache-namespace/" title="Memcache 中模拟 namespace">Memcache 中模拟 namespace</a></li><li>January 25, 2007 -- <a href="http://avenger.name/blog/copy-vs-ftp/" title="想不通啊想不通：Copy VS Ftp">想不通啊想不通：Copy VS Ftp</a></li><li>December 7, 2006 -- <a href="http://avenger.name/blog/phpmore-7/" title="PHP&#038;MORE 第七期发布">PHP&#038;MORE 第七期发布</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://avenger.name/blog/how-php5-use-dotnet-soap/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>请关注 PHPE 重建计划</title>
		<link>http://avenger.name/blog/phpe_return/</link>
		<comments>http://avenger.name/blog/phpe_return/#comments</comments>
		<pubDate>Thu, 24 Jul 2008 04:05:37 +0000</pubDate>
		<dc:creator>avenger</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[phpe]]></category>

		<guid isPermaLink="false">http://avenger.name/?p=252</guid>
		<description><![CDATA[“PHPE好久没更新了” 每每听到热心的网友们和我说类似的话，心里就很不是滋味。 一直有想把 PHPE 重新发展的计划，也一直在给自己找借口。当时 PHPE 创建的时候，动机是那么的简单，现在条件比之前充足的多，却一直在逃避。昨天难得能静下心来思考。个人的能力是有限的，每个人有每个人的梦想，小团队有小团队的梦想。 希望国内所有 PHP 爱好者，所有关注过 PHPE 的朋友们，能一起为了梦想，加入我们的建设，为国内的 PHP 发展出份力量。 目标：尽可能的使用开源工具（我知道大家时间都很有限，花在该花的地方吧），搭建新的PHP学习、协作、讨论平台及线下交流平台 延续梦想，请关注 PHPE 重建计划，期待电脑前你的意见～ 讨论请移步：http://club.phpe.net/index.php?s=&#38;act=ST&#38;f=7&#38;t=13501&#38;st=0 Related PostsJune 22, 2006 -- PHPE今夏T恤设计稿]]></description>
			<content:encoded><![CDATA[<p class='fp'>“<a href="http://www.phpe.net">PHPE</a>好久没更新了”</p>
<p>每每听到热心的网友们和我说类似的话，心里就很不是滋味。</p>
<p>一直有想把 PHPE 重新发展的计划，也一直在给自己找借口。当时 PHPE 创建的时候，动机是那么的简单，现在条件比之前充足的多，却一直在逃避。昨天难得能静下心来思考。个人的能力是有限的，每个人有每个人的梦想，小团队有小团队的梦想。</p>
<p>希望国内所有 PHP 爱好者，所有关注过 PHPE 的朋友们，能一起为了梦想，加入我们的建设，为国内的 PHP 发展出份力量。</p>
<p><strong>目标：尽可能的使用开源工具（我知道大家时间都很有限，花在该花的地方吧），搭建新的PHP学习、协作、讨论平台及线下交流平台<br />
</strong></p>
<p>延续梦想，请关注 PHPE 重建计划，期待电脑前你的意见～ <img src='http://avenger.name/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>讨论请移步</strong>：<a href="http://club.phpe.net/index.php?s=&amp;act=ST&amp;f=7&amp;t=13501&amp;st=0">http://club.phpe.net/index.php?s=&amp;act=ST&amp;f=7&amp;t=13501&amp;st=0</a></p>
</p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>June 22, 2006 -- <a href="http://avenger.name/blog/phpe-tshirt/" title="PHPE今夏T恤设计稿">PHPE今夏T恤设计稿</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://avenger.name/blog/phpe_return/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>我的第一个 facebook app</title>
		<link>http://avenger.name/blog/first-facebook-app/</link>
		<comments>http://avenger.name/blog/first-facebook-app/#comments</comments>
		<pubDate>Sat, 19 Jul 2008 15:42:07 +0000</pubDate>
		<dc:creator>avenger</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[facebook]]></category>

		<guid isPermaLink="false">http://avenger.name/?p=246</guid>
		<description><![CDATA[中国股市：http://apps.facebook.com/china-stock/ 欢迎试用，并提出宝贵意见。 几个月前就有开发这个应用的想法了，不过一直没动手，这周差不多花了三个晚上的空余时间才搞定。很久没写过代码，手有点生了，还有就是在 FBML 的熟悉过程中花了太多的时间，稍候会再总结一下开发方面的经验。 Facebook 已经推出中文版了，什么时候开发者 wiki 也能中文化就好了， 目前上面中文的应用还很少，还需要国内的开发者一起努力。 Related PostsAugust 4, 2009 -- PHP5 调用 dot NET Soap WebService 的技巧July 3, 2008 -- AboutOctober 8, 2007 -- PressLineSeptember 27, 2007 -- Memcache 中模拟 namespaceJanuary 25, 2007 -- 想不通啊想不通：Copy VS FtpDecember 7, 2006 -- PHP&#038;MORE 第七期发布]]></description>
			<content:encoded><![CDATA[<p><strong>中国股市：</strong><a href="http://apps.facebook.com/china-stock/">http://apps.facebook.com/china-stock/</a></p>
<p>欢迎试用，并提出宝贵意见。 <img src='http://avenger.name/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>几个月前就有开发这个应用的想法了，不过一直没动手，这周差不多花了三个晚上的空余时间才搞定。很久没写过代码，手有点生了，还有就是在 <a href="http://wiki.developers.facebook.com/index.php/FBML">FBML</a> 的熟悉过程中花了太多的时间，稍候会再总结一下开发方面的经验。</p>
<p><a href="http://facebook.com">Facebook</a> 已经推出中文版了，什么时候开发者 wiki 也能中文化就好了， 目前上面中文的应用还很少，还需要国内的开发者一起努力。</p>
<h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>August 4, 2009 -- <a href="http://avenger.name/blog/how-php5-use-dotnet-soap/" title="PHP5 调用 dot NET Soap WebService 的技巧">PHP5 调用 dot NET Soap WebService 的技巧</a></li><li>July 3, 2008 -- <a href="http://avenger.name/about/" title="About">About</a></li><li>October 8, 2007 -- <a href="http://avenger.name/blog/pressline/" title="PressLine">PressLine</a></li><li>September 27, 2007 -- <a href="http://avenger.name/blog/memcache-namespace/" title="Memcache 中模拟 namespace">Memcache 中模拟 namespace</a></li><li>January 25, 2007 -- <a href="http://avenger.name/blog/copy-vs-ftp/" title="想不通啊想不通：Copy VS Ftp">想不通啊想不通：Copy VS Ftp</a></li><li>December 7, 2006 -- <a href="http://avenger.name/blog/phpmore-7/" title="PHP&#038;MORE 第七期发布">PHP&#038;MORE 第七期发布</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://avenger.name/blog/first-facebook-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Plugin::PressLine</title>
		<link>http://avenger.name/blog/wordpress-plugin-pressline/</link>
		<comments>http://avenger.name/blog/wordpress-plugin-pressline/#comments</comments>
		<pubDate>Wed, 10 Oct 2007 12:24:41 +0000</pubDate>
		<dc:creator>avenger</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[timeline]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://avenger.name/blog/wordpress-plugin-pressline/</guid>
		<description><![CDATA[插件说明 PressLine 用来根据你的 blog 内容生成一个时间线的图表出来，可以通过鼠标拖动查看，效果就像 GoogleMap 那样。点击这里 看本站的演示。 安装步骤 解压插件安装包，把整个 `pressline` 目录上传到你的 `/wp-content/plugins/` 目录下； 更改刚才上传的 `pressline` 目录权限为 777（Windows服务器用户可以跳过这步）； 进入你的 Blog 后台，在 Plugins 菜单下激活 `PressLine` 插件； 上传插件包中的 `pressline.tpl.php` 文件到你目前在用的模板目录下； 建立一个新页面，命名为 `PressLine`，页面模板选择 `PressLine`，内容保持为空，发布该页面； 完成，在前台点击你新建立的 PressLine 页面即可看到效果。 Download: wp-pressline: ver 0.1 SVN Repository Description: A simple plugin used to display your blog entries on a ajax timeline. Just [...]]]></description>
			<content:encoded><![CDATA[<p><strong>插件说明</strong><br />
PressLine 用来根据你的 blog 内容生成一个时间线的图表出来，可以通过鼠标拖动查看，效果就像 GoogleMap 那样。<a href="http://avenger.name/pressline/">点击这里</a> 看本站的演示。</p>
<p><strong>安装步骤</strong></p>
<ol>
<li>解压插件安装包，把整个 `pressline` 目录上传到你的 `/wp-content/plugins/` 目录下；</li>
<li>更改刚才上传的  `pressline` 目录权限为 777（Windows服务器用户可以跳过这步）；</li>
<li>进入你的 Blog 后台，在 Plugins 菜单下激活 `PressLine` 插件；</li>
<li>上传插件包中的 `pressline.tpl.php` 文件到你目前在用的模板目录下；</li>
<li>建立一个新页面，命名为 `PressLine`，页面模板选择 `PressLine`，内容保持为空，发布该页面；</li>
<li>完成，在前台点击你新建立的 PressLine 页面即可看到效果。</li>
</ol>
<p><strong>Download:</strong></p>
<ul>
<li><a href="http://avenger.name/wp-content/uploads/2007/10/wp-pressline.zip" title="wp-pressline0.1">wp-pressline: ver 0.1</a></li>
<li><a href="http://dev.wp-plugins.org/browser/pressline">SVN Repository</a></li>
</ul>
<p><strong>Description:</strong><br />
A simple plugin used to display your blog entries on a ajax timeline. Just like the googlemaps.</p>
<p><strong>Feature List</strong>:</p>
<ul>
<li>This plugins base on the time line library called &lt;TimeLine&gt; at http://simile.mit.edu/timeline/</li>
<li>Support for WordPress 1.5, 2.0, 2.1, 2.2 and 2.3</li>
<li>Caches the output</li>
</ul>
<p><span id="more-207"></span><strong>Installation:<br />
</strong></p>
<ol>
<li>Upload the whole directory `pressline` to the `/wp-content/plugins/` directory.</li>
<li>Change the directory `pressline` access to `777` vip your ftp client or ssh client(windows server user can ignore this step).</li>
<li>Activate `PressLine` through the &#8216;Plugins&#8217; menu in WordPress.</li>
<li>Upload `pressline.tpl.php` to your current used theme directory, your can change this file content to change the timeline style.</li>
<li>Write a new page called `PressLine`, use the page template called `PressLine`, keep empty content then publish it.</li>
<li>Well done.</li>
</ol>
<p><strong>Change Log:<br />
</strong></p>
<ul>
<li>2007-10-08: Version 0.1 release.</li>
</ul>
<p><strong>Special Thanks:</strong><br />
mulberry: <a href="http://yanfeng.org/blog/">http://yanfeng.org/blog</a></p>
<h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>October 8, 2007 -- <a href="http://avenger.name/blog/pressline/" title="PressLine">PressLine</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://avenger.name/blog/wordpress-plugin-pressline/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PressLine</title>
		<link>http://avenger.name/blog/pressline/</link>
		<comments>http://avenger.name/blog/pressline/#comments</comments>
		<pubDate>Mon, 08 Oct 2007 10:31:06 +0000</pubDate>
		<dc:creator>avenger</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[timeline]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://avenger.name/?p=204</guid>
		<description><![CDATA[先是看了 桑林志 上的介绍，第一眼就被这个效果吸引了，再看到 mulberry 希望有人做成 wordpress 插件的形式，于是偶的第一个 woredpress 插件就这样诞生了~ hoho~ 效果可以 点这里 看到，在发布文章和更新文章的时候，数据文件会被自动更新，是在 mulberry 的代码基础上进行修改的。没啥技术含量。 经过 mulberry 的同意，可以让我继续用 PressLine 这个名称，喜欢的朋友可以 点击这里 进入下载页面。 稍候我会为这个插件专门做了一个页面(页面见此)。 使用过程中有什么意见请在这里留言，我会及时更新的。:) == Feature List == * This plugins base on the time line library called &#60;TimeLine&#62; at http://simile.mit.edu/timeline/ * Support for WordPress 1.5, 2.0, 2.1, 2.2 and 2.3 * Caches the output [...]]]></description>
			<content:encoded><![CDATA[<p class='fp'>先是看了 <a href="http://yanfeng.org/blog/wordpress/pressline/" target="_blank">桑林志</a> 上的介绍，第一眼就被这个效果吸引了，再看到 mulberry 希望有人做成 wordpress 插件的形式，于是偶的第一个 woredpress 插件就这样诞生了~ hoho~</p>
<p>效果可以 <a href="http://avenger.name/?page_id=203">点这里</a> 看到，在发布文章和更新文章的时候，数据文件会被自动更新，是在 mulberry 的代码基础上进行修改的。没啥技术含量。</p>
<p>经过 mulberry  的同意，可以让我继续用 PressLine 这个名称，喜欢的朋友可以 <a href="http://avenger.name/blog/pressline/205/" rel="attachment wp-att-205" title="wp-pressline0.1">点击这里</a> 进入下载页面。</p>
<p>稍候我会为这个插件专门做了一个页面(<a href="http://avenger.name/blog/wordpress-plugin-pressline/">页面见此</a>)。 使用过程中有什么意见请在这里留言，我会及时更新的。:)</p>
<p><code>== Feature List ==<br />
* This plugins base on the time line library called &lt;TimeLine&gt; at http://simile.mit.edu/timeline/<br />
* Support for WordPress 1.5, 2.0, 2.1, 2.2 and 2.3<br />
* Caches the output</code></p>
<p><!--bb148e20--></p>
</p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>October 10, 2007 -- <a href="http://avenger.name/blog/wordpress-plugin-pressline/" title="WordPress Plugin::PressLine">WordPress Plugin::PressLine</a></li><li>August 4, 2009 -- <a href="http://avenger.name/blog/how-php5-use-dotnet-soap/" title="PHP5 调用 dot NET Soap WebService 的技巧">PHP5 调用 dot NET Soap WebService 的技巧</a></li><li>July 19, 2008 -- <a href="http://avenger.name/blog/first-facebook-app/" title="我的第一个 facebook app">我的第一个 facebook app</a></li><li>July 3, 2008 -- <a href="http://avenger.name/about/" title="About">About</a></li><li>September 27, 2007 -- <a href="http://avenger.name/blog/memcache-namespace/" title="Memcache 中模拟 namespace">Memcache 中模拟 namespace</a></li><li>January 25, 2007 -- <a href="http://avenger.name/blog/copy-vs-ftp/" title="想不通啊想不通：Copy VS Ftp">想不通啊想不通：Copy VS Ftp</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://avenger.name/blog/pressline/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql 4.0.x 升级到 mysql 5.0.x 总结</title>
		<link>http://avenger.name/blog/mysql4-upgradeto-mysql5/</link>
		<comments>http://avenger.name/blog/mysql4-upgradeto-mysql5/#comments</comments>
		<pubDate>Fri, 17 Aug 2007 02:48:38 +0000</pubDate>
		<dc:creator>avenger</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[charset]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[升级]]></category>
		<category><![CDATA[字符]]></category>
		<category><![CDATA[数据库]]></category>

		<guid isPermaLink="false">http://avenger.name/?p=191</guid>
		<description><![CDATA[公司的数据库一直在用 mysql.4.0.x 的版本，用了几年了，不过现在连 mysql 官方都停止对 4.0.x 版本的支持了，升级看起来是大势所趋。搜索了一些这方面的文章，大家的作法不一，网上的文章也有很多错误的地方。 总结了一下，由于 mysql 4.0.x 的库都是 latin1 编码的，所以主要问题还是出现在编码转换上。 废话少说，下面是经测试可用的转换步骤，测试版本为 mysql4.0.26->mysql5.0.45-community： 1.latin1->latin1 原来是 latin1 字符集的数据库，升级后保留 latin1 编码； 个人不推荐这种方式，如果数据库中有包含中文字符的话，还是换成gbk或者utf8编码比较好。 这种方式下，可以直接把 datadir copy 到新的mysql 的data 目录即可，如果数据库中有包含中文，可能用 phpmyadmin 会看不到正常的结果，不用担心，用其它客户端连接的时候，都是可以正常输入和输出的，注意在用 php 连的时候，不需要加 set names xxx 字样； 2.latin1->gbk 原来是 latin1，升级后是 gbk 两种方法： 1) 修改 my.cnf，在 [mysqld] 中加入 default-character-set=gbk 后重启 mysql 服务，然后就可以直接把 datadir copy 过来了，前提是整个库中都是 gbk 编码的库的时候才建议这样，而且copy [...]]]></description>
			<content:encoded><![CDATA[<p class='fp'>公司的数据库一直在用 mysql.4.0.x 的版本，用了几年了，不过现在连 mysql 官方都停止对 4.0.x 版本的支持了，升级看起来是大势所趋。搜索了一些这方面的文章，大家的作法不一，网上的文章也有很多错误的地方。</p>
<p>总结了一下，由于 mysql 4.0.x 的库都是 latin1 编码的，所以主要问题还是出现在编码转换上。</p>
<p>废话少说，下面是经测试可用的转换步骤，测试版本为 mysql4.0.26->mysql5.0.45-community：</p>
<p><strong>1.latin1->latin1 原来是 latin1 字符集的数据库，升级后保留 latin1 编码；</strong><br />
个人不推荐这种方式，如果数据库中有包含中文字符的话，还是换成gbk或者utf8编码比较好。</p>
<p>这种方式下，可以直接把 datadir copy 到新的mysql 的data 目录即可，如果数据库中有包含中文，可能用 phpmyadmin 会看不到正常的结果，不用担心，用其它客户端连接的时候，都是可以正常输入和输出的，注意在用 php 连的时候，不需要加  set names xxx  字样；</p>
<p><strong>2.latin1->gbk 原来是 latin1，升级后是 gbk</strong><br />
两种方法：<br />
1) 修改 my.cnf，在 [mysqld] 中加入<br />
<code>default-character-set=gbk</code><br />
后重启 mysql 服务，然后就可以直接把 datadir copy 过来了，前提是整个库中都是 gbk 编码的库的时候才建议这样，而且copy 过来后，my.cnf中的那行 default-character-set 不能再动了；<br />
2) 手工在新服务器上建立需要的库，字符集选择 gbk，然后在旧服务器上先用 mysqldump 导出为 sql 文件，在导出的 sql 文件的起始位置添加 set names gbk; 在服务器上用以下语句导入：<br />
<code>mysql -u xxx [database] < xxx.sql </code></p>
<p>这种方式转换后，php 连接数据库后需要先执行 set names gbk;</p>
<p><strong>3.latin1->utf8 原来是 latin1，升级后是 utf8</strong><br />
手工在新服务器上建立需要的库，字符集选择 utf8_bin，然后在旧服务器上先用 mysqldump 导出为 sql 文件，在导出的 sql 文件的起始位置添加 set names gbk; 在服务器上用下面的语句导入：<br />
<code>mysql --default-character-set=utf8 -u xxx [database] < xxx.sql </code></p>
<p>这种方式转换后，php 连接数据库后需要先执行 set names utf8;</p>
<p><strong>另外有一点要注意的</strong>，4.1 版本开始，mysql 的用户密码算法有改变，php5 才支持这种新的验证方式，如果你还是使用 php4，可以在 my.cnf 的 [mysqld] 中多加一句：<br />
<code>old_password = 1</code></p>
</p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>July 20, 2007 -- <a href="http://avenger.name/blog/exp-useage/" title="使用 EXP 限制 Oracle 导出数据的条数">使用 EXP 限制 Oracle 导出数据的条数</a></li><li>November 23, 2003 -- <a href="http://avenger.name/blog/mysql-distinct-tips/" title="在 Mysql 中让 DISTINCT 返回所有字段">在 Mysql 中让 DISTINCT 返回所有字段</a></li><li>November 12, 2003 -- <a href="http://avenger.name/blog/mysql-sequence/" title="在Mysql中产生序列">在Mysql中产生序列</a></li><li>October 14, 2003 -- <a href="http://avenger.name/blog/mysql-from-win-to-linux/" title="Mysql数据从Windows转向Linux的过程">Mysql数据从Windows转向Linux的过程</a></li><li>December 3, 2004 -- <a href="http://avenger.name/blog/sql-insert-otherwise/" title="SQL 语句中 INSERT 语句的另一种写法">SQL 语句中 INSERT 语句的另一种写法</a></li><li>November 10, 2003 -- <a href="http://avenger.name/blog/database-quickupdate-tips/" title="数据库中更新标志字段的快速方法">数据库中更新标志字段的快速方法</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://avenger.name/blog/mysql4-upgradeto-mysql5/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>想不通啊想不通：Copy VS Ftp</title>
		<link>http://avenger.name/blog/copy-vs-ftp/</link>
		<comments>http://avenger.name/blog/copy-vs-ftp/#comments</comments>
		<pubDate>Thu, 25 Jan 2007 08:58:19 +0000</pubDate>
		<dc:creator>avenger</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ftp]]></category>

		<guid isPermaLink="false">http://avenger.name/?p=173</guid>
		<description><![CDATA[公司的发布系统要升级，之前一直用的是ftp发布，现在计划用直接写到远程目录的方式来发布，本来想当然的认为肯定会比ftp发布速度要快的多，多亏 Alge r提醒我要测试一下再下结论，不测不知道，一测下一跳： 测试对象：6000个文本文件 通过 php 的 copy 函数 copy 到已经映射到本地的目录中，用了 350 秒； 通过 php 的 copy 函数 copy 到本地磁盘的另一个目录中，用了 80 秒； 通过 php 的 ftp 函数，连接另一台服务器的内网IP，上传，用了 25 秒。 实在想不通为什么会是这样的结果，FTP协议难道是经过了某种优化的吗？再怎么优化也是远程操作啊，怎么会比本地操作快呢？ 要么就是 PHP copy 函数有问题…… Related PostsAugust 4, 2009 -- PHP5 调用 dot NET Soap WebService 的技巧July 19, 2008 -- 我的第一个 facebook appJuly 3, 2008 -- [...]]]></description>
			<content:encoded><![CDATA[<p class='fp'>公司的发布系统要升级，之前一直用的是ftp发布，现在计划用直接写到远程目录的方式来发布，本来想当然的认为肯定会比ftp发布速度要快的多，多亏 Alge r提醒我要测试一下再下结论，不测不知道，一测下一跳：</p>
<ul>
<li>测试对象：6000个文本文件</li>
<li>通过 php 的 copy 函数 copy 到已经映射到本地的目录中，用了 350 秒；</li>
<li>通过 php 的 copy 函数 copy 到本地磁盘的另一个目录中，用了 80 秒；</li>
<li>通过 php 的 ftp 函数，连接另一台服务器的内网IP，上传，用了 25 秒。</li>
</ul>
<p>实在想不通为什么会是这样的结果，FTP协议难道是经过了某种优化的吗？再怎么优化也是远程操作啊，怎么会比本地操作快呢？</p>
<p>要么就是 PHP copy 函数有问题……</p>
</p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>August 4, 2009 -- <a href="http://avenger.name/blog/how-php5-use-dotnet-soap/" title="PHP5 调用 dot NET Soap WebService 的技巧">PHP5 调用 dot NET Soap WebService 的技巧</a></li><li>July 19, 2008 -- <a href="http://avenger.name/blog/first-facebook-app/" title="我的第一个 facebook app">我的第一个 facebook app</a></li><li>July 3, 2008 -- <a href="http://avenger.name/about/" title="About">About</a></li><li>October 8, 2007 -- <a href="http://avenger.name/blog/pressline/" title="PressLine">PressLine</a></li><li>September 27, 2007 -- <a href="http://avenger.name/blog/memcache-namespace/" title="Memcache 中模拟 namespace">Memcache 中模拟 namespace</a></li><li>December 7, 2006 -- <a href="http://avenger.name/blog/phpmore-7/" title="PHP&#038;MORE 第七期发布">PHP&#038;MORE 第七期发布</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://avenger.name/blog/copy-vs-ftp/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>PHP&amp;MORE 第七期发布</title>
		<link>http://avenger.name/blog/phpmore-7/</link>
		<comments>http://avenger.name/blog/phpmore-7/#comments</comments>
		<pubDate>Thu, 07 Dec 2006 07:53:49 +0000</pubDate>
		<dc:creator>avenger</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[phpmore]]></category>

		<guid isPermaLink="false">http://avenger.name/?p=164</guid>
		<description><![CDATA[本期主要是围绕 PHP/MySQL/Apache 的加速、优化文章。 目录如下： * PHP &#038; Memcached (Nio) * 使用 memcached 实现对象的自动缓存 (cid73) * XCache: 加速你的 PHP (Static) * 扩展 PHP (Ben) * MySQL 集群技术简介 (叶金荣) * LAMP 系统优化实例分析 (Dalamar) * Subversion PHP Binding (sirtoozee) 点击此处下载！ Related PostsAugust 4, 2009 -- PHP5 调用 dot NET Soap WebService 的技巧July 19, 2008 -- 我的第一个 facebook appJuly [...]]]></description>
			<content:encoded><![CDATA[<p class='fp'>本期主要是围绕 PHP/MySQL/Apache 的加速、优化文章。<br />
目录如下：</p>
<p>    * PHP &#038; Memcached (Nio)<br />
    * 使用 memcached 实现对象的自动缓存 (cid73)<br />
    * XCache: 加速你的 PHP (Static)<br />
    * 扩展 PHP (Ben)<br />
    * MySQL 集群技术简介 (叶金荣)<br />
    * LAMP 系统优化实例分析 (Dalamar)<br />
    * Subversion PHP Binding (sirtoozee)</p>
<p><a href="http://www.phpmore.com/download/mag/download.php">点击此处下载！</a></p>
<p><img src="http://nio.infor96.com/wp-content/uploads/2006/12/vol7.gif" alt="PHP&#038;MORE vol7" /></p>
</p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>August 4, 2009 -- <a href="http://avenger.name/blog/how-php5-use-dotnet-soap/" title="PHP5 调用 dot NET Soap WebService 的技巧">PHP5 调用 dot NET Soap WebService 的技巧</a></li><li>July 19, 2008 -- <a href="http://avenger.name/blog/first-facebook-app/" title="我的第一个 facebook app">我的第一个 facebook app</a></li><li>July 3, 2008 -- <a href="http://avenger.name/about/" title="About">About</a></li><li>October 8, 2007 -- <a href="http://avenger.name/blog/pressline/" title="PressLine">PressLine</a></li><li>September 27, 2007 -- <a href="http://avenger.name/blog/memcache-namespace/" title="Memcache 中模拟 namespace">Memcache 中模拟 namespace</a></li><li>January 25, 2007 -- <a href="http://avenger.name/blog/copy-vs-ftp/" title="想不通啊想不通：Copy VS Ftp">想不通啊想不通：Copy VS Ftp</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://avenger.name/blog/phpmore-7/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>404 模拟 URL Rewrite</title>
		<link>http://avenger.name/blog/404-rewrite/</link>
		<comments>http://avenger.name/blog/404-rewrite/#comments</comments>
		<pubDate>Mon, 03 Jul 2006 03:11:49 +0000</pubDate>
		<dc:creator>avenger</dc:creator>
				<category><![CDATA[LooPo]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[404]]></category>
		<category><![CDATA[rewrite]]></category>

		<guid isPermaLink="false">http://avenger.name/?p=146</guid>
		<description><![CDATA[乐铺的服务器不支持 apache url rewrite，所以之前的网址都很“丑陋”，比如： http://www.loopo.cn/items.php/110 http://www.loopo.cn/forum.php/1/100 因为这个原因，被几个朋友BS了几次…… 今天在DB的时候，忽然想到一个办法：乐铺的服务器是支持自定义404页面的，这样的话，就可以把所有的请求定位到这个404页来处理了，即所有的页面“都是404”，然后再统一由404.php来处理重定向。 花了差不多十分钟，实现了一下，现在乐铺的页面url是类似这样的了： http://www.loopo.cn/items/110 http://www.loopo.cn/forum/1/100 会好看一些，不知道会不会有什么副作用。 核心代码差不多类似于： 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 function _404&#40;&#41; &#123; $url = $_SERVER&#91;'REQUEST_URI'&#93;; if &#40;$tmp = explode&#40;&#34;/&#34;, $url&#41;&#41; &#123; array_shift&#40;$tmp&#41;; $_SERVER&#91;'PATH_INFO'&#93; = join&#40;&#34;/&#34;, $tmp&#41;; parse_str&#40;$_SERVER&#91;'REDIRECT_QUERY_STRING'&#93;, $_REQUEST&#41;; parse_str&#40;$_SERVER&#91;'REDIRECT_QUERY_STRING'&#93;, $_GET&#41;; &#125; $rewrite&#91;&#93; = [...]]]></description>
			<content:encoded><![CDATA[<p class='fp'>乐铺的服务器不支持 apache url rewrite，所以之前的网址都很“丑陋”，比如：</p>
<p>http://www.loopo.cn/items.php/110</p>
<p>http://www.loopo.cn/forum.php/1/100</p>
<p>因为这个原因，被几个朋友BS了几次……</p>
<p>今天在DB的时候，忽然想到一个办法：乐铺的服务器是支持自定义404页面的，这样的话，就可以把所有的请求定位到这个404页来处理了，即所有的页面“都是404”，然后再统一由404.php来处理重定向。</p>
<p><span id="more-146"></span></p>
<p>花了差不多十分钟，实现了一下，现在乐铺的页面url是类似这样的了：</p>
<p>http://www.loopo.cn/items/110</p>
<p>http://www.loopo.cn/forum/1/100</p>
<p>会好看一些，不知道会不会有什么副作用。</p>
<p>核心代码差不多类似于：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> _404<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$url</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REQUEST_URI'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$tmp</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #990000;">array_shift</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tmp</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'PATH_INFO'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">join</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tmp</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">parse_str</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REDIRECT_QUERY_STRING'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_REQUEST</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">parse_str</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REDIRECT_QUERY_STRING'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000088;">$rewrite</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'|^/whatnew/?|i'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'whatnew.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$rewrite</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'|^/whathot/?|i'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'whathot.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$rewrite</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'|^/whatmiss/?|i'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'whatmiss.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$rewrite</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #339933;">@</span><span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;HTTP/1.1 200 OK&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">include</span> ROOT<span style="color: #339933;">.</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>exit<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><strong>UPDATE：</strong>在测试的时候，发现404头信息已经发出来了，这样的话，可能会有被搜索引擎忽略的危险，后来又把代码改进了一下。加了一个200的头信息进去，不知道还会不会有问题，持续跟踪中……</p>
</p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>August 4, 2009 -- <a href="http://avenger.name/blog/how-php5-use-dotnet-soap/" title="PHP5 调用 dot NET Soap WebService 的技巧">PHP5 调用 dot NET Soap WebService 的技巧</a></li><li>April 12, 2009 -- <a href="http://avenger.name/blog/loopo20/" title="乐铺新版上线">乐铺新版上线</a></li><li>November 2, 2008 -- <a href="http://avenger.name/blog/loopo-for-google-accounts/" title="使用 Google 帐号来登录乐铺吧">使用 Google 帐号来登录乐铺吧</a></li><li>July 19, 2008 -- <a href="http://avenger.name/blog/first-facebook-app/" title="我的第一个 facebook app">我的第一个 facebook app</a></li><li>July 3, 2008 -- <a href="http://avenger.name/about/" title="About">About</a></li><li>October 8, 2007 -- <a href="http://avenger.name/blog/pressline/" title="PressLine">PressLine</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://avenger.name/blog/404-rewrite/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>PHPE今夏T恤设计稿</title>
		<link>http://avenger.name/blog/phpe-tshirt/</link>
		<comments>http://avenger.name/blog/phpe-tshirt/#comments</comments>
		<pubDate>Thu, 22 Jun 2006 02:08:43 +0000</pubDate>
		<dc:creator>avenger</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[phpe]]></category>
		<category><![CDATA[summer]]></category>
		<category><![CDATA[tshirt]]></category>

		<guid isPermaLink="false">http://avenger.name/?p=144</guid>
		<description><![CDATA[2006.6.26 UPDATE: 开始预定：预定页面 http://t.phpmore.com 以下图片可点击放大。预计7月1号之前接受预定。 感谢vicki的热心和Nio的美工。 Related PostsAugust 1, 2004 -- PHP T-shirt 样品出炉August 4, 2009 -- PHP5 调用 dot NET Soap WebService 的技巧January 14, 2009 -- 一款值得推荐的原型设计工具 Balsamiq MockupsJuly 24, 2008 -- 请关注 PHPE 重建计划July 19, 2008 -- 我的第一个 facebook appJuly 3, 2008 -- About]]></description>
			<content:encoded><![CDATA[<p><strong>2006.6.26 UPDATE:</p>
<p>开始预定：预定页面 <a href="http://t.phpmore.com">http://t.phpmore.com</a><br />
</strong></p>
<p>以下图片可点击放大。预计7月1号之前接受预定。<br />
感谢<a href="http://vickizhai.com/blog/">vicki</a>的热心和<a href="http://nio.infor96.com/">Nio</a>的美工。</p>
<p><a class="imagelink" href="http://avenger.name/wp-content/uploads/2006/06/2-1.jpg" title="黑色正面"><img id="image140" src="http://avenger.name/wp-content/uploads/2006/06/2-1.thumbnail.jpg" alt="黑色正面" /></a></p>
<p><span id="more-144"></span></p>
<p><a class="imagelink" href="http://avenger.name/wp-content/uploads/2006/06/post-7-1150878457.jpg" title="post-7-1150878457.jpg" title="黑色背面"><img id="image141" src="http://avenger.name/wp-content/uploads/2006/06/post-7-1150878457.thumbnail.jpg" alt="post-7-1150878457.jpg" alt="黑色背面"  /></a></p>
<p><a class="imagelink" href="http://avenger.name/wp-content/uploads/2006/06/post-7-1150881797.jpg" title="white front"><img id="image142" src="http://avenger.name/wp-content/uploads/2006/06/post-7-1150881797.thumbnail.jpg" alt="white front" /></a></p>
<p><a class="imagelink" href="http://avenger.name/wp-content/uploads/2006/06/post-7-1150881852.jpg" title="white back"><img id="image143" src="http://avenger.name/wp-content/uploads/2006/06/post-7-1150881852.thumbnail.jpg" alt="white back" /></a></p>
<h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>August 1, 2004 -- <a href="http://avenger.name/blog/php-t-shirt-photo/" title="PHP T-shirt 样品出炉">PHP T-shirt 样品出炉</a></li><li>August 4, 2009 -- <a href="http://avenger.name/blog/how-php5-use-dotnet-soap/" title="PHP5 调用 dot NET Soap WebService 的技巧">PHP5 调用 dot NET Soap WebService 的技巧</a></li><li>January 14, 2009 -- <a href="http://avenger.name/blog/balsamiq-mockups/" title="一款值得推荐的原型设计工具 Balsamiq Mockups">一款值得推荐的原型设计工具 Balsamiq Mockups</a></li><li>July 24, 2008 -- <a href="http://avenger.name/blog/phpe_return/" title="请关注 PHPE 重建计划">请关注 PHPE 重建计划</a></li><li>July 19, 2008 -- <a href="http://avenger.name/blog/first-facebook-app/" title="我的第一个 facebook app">我的第一个 facebook app</a></li><li>July 3, 2008 -- <a href="http://avenger.name/about/" title="About">About</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://avenger.name/blog/phpe-tshirt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>按拼音排序TAG</title>
		<link>http://avenger.name/blog/order-tag-by-pinyin/</link>
		<comments>http://avenger.name/blog/order-tag-by-pinyin/#comments</comments>
		<pubDate>Thu, 27 Apr 2006 01:07:57 +0000</pubDate>
		<dc:creator>avenger</dc:creator>
				<category><![CDATA[LooPo]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[pinyin]]></category>
		<category><![CDATA[tag]]></category>

		<guid isPermaLink="false">http://avenger.name/?p=134</guid>
		<description><![CDATA[在解决乐铺的 tag 排序的问题上，碰到一点麻烦。原因出在乐铺的所有 tag 列表页：http://www.loopo.cn/tags/ 刚开始是按照 tag 数量的多少排序的，这样最简单，不过缺点就是没有“公平对待”每一个 tag，特别是用了 tag 云状显示结构以后，最大的 tag 在前面，最小的在后面，看起来很不舒服。 后台改成了按 tag 的 name 排序，在数据库中是直接 ORDER BY tagname 操作的，这里又体现出来了汉字的“优点”，英文里面，只要 order by 一下就会按 a-z 的顺序列出来了，汉字可不行，这样做顺序是打乱了，显示的效果也好一些了，不过缺点也显而易见：没有规律性。想找一个特定的tag比较困难。 再后台想到了按汉字的拼音排序的想法，搜索了一下，之前有收藏过一个函数可以把汉字转换为拼音的，原理是通过判断区位码的方法来实现简单的拼音转换的。在本地简单测试了一下，正要往上用的时候，又有麻烦了，原来这个转换是从gb2312到拼音的，乐铺上的用的编码是utf8格式的，死活转不过去。还好服务器有支持iconv函数，又通过 iconv 转换了一次，这才正常。 使用过程中发现存在的几点问题： 1.有很多生僻字都不能正确转换，好像只有国标里的汉字才可以； 2.多音字处理不好，有时候转换出来的拼音莫名其妙。 上面两点问题在应用中用其它办法弥补一下就可以了，等有更好的解决办法再说吧。嘿嘿！ 补充：后来在PHPCLASS发现了一个更强大的类，Chinese Text Conversion，乐铺现在用的就是这个类。有兴趣的朋友可以下来研究一下。 Related PostsApril 12, 2009 -- 乐铺新版上线November 2, 2008 -- 使用 Google 帐号来登录乐铺吧July 3, 2006 -- 404 模拟 URL [...]]]></description>
			<content:encoded><![CDATA[<p class='fp'>在解决<a href="http://www.loopo.cn">乐铺</a>的 tag 排序的问题上，碰到一点麻烦。原因出在乐铺的所有 tag 列表页：<a href="http://www.loopo.cn/tags/">http://www.loopo.cn/tags/</a></p>
<p>刚开始是按照 tag 数量的多少排序的，这样最简单，不过缺点就是没有“公平对待”每一个 tag，特别是用了 tag 云状显示结构以后，最大的 tag 在前面，最小的在后面，看起来很不舒服。</p>
<p>后台改成了按 tag 的 name 排序，在数据库中是直接 ORDER BY tagname 操作的，这里又体现出来了汉字的“优点”，英文里面，只要 order by 一下就会按 a-z 的顺序列出来了，汉字可不行，这样做顺序是打乱了，显示的效果也好一些了，不过缺点也显而易见：没有规律性。想找一个特定的tag比较困难。</p>
<p>再后台想到了按汉字的拼音排序的想法，搜索了一下，之前有收藏过一个函数可以<a href="http://www.phpe.net/articles/74.shtml">把汉字转换为拼音的</a>，原理是通过判断区位码的方法来实现简单的拼音转换的。在本地简单测试了一下，正要往上用的时候，又有麻烦了，原来这个转换是从gb2312到拼音的，乐铺上的用的编码是utf8格式的，死活转不过去。还好服务器有支持<a href="http://www.php.net/iconv">iconv</a>函数，又通过 iconv 转换了一次，这才正常。</p>
<p>使用过程中发现存在的几点问题：</p>
<ul>
<li>1.有很多生僻字都不能正确转换，好像只有国标里的汉字才可以；</li>
<li>2.多音字处理不好，有时候转换出来的拼音莫名其妙。</li>
</ul>
<p>上面两点问题在应用中用其它办法弥补一下就可以了，等有更好的解决办法再说吧。嘿嘿！</p>
<p><strong>补充：</strong>后来在<a href="http://www.phpclasses.org">PHPCLASS</a>发现了一个更强大的类，<a href="http://www.phpclasses.org/browse/package/1406.html">Chinese Text Conversion</a>，乐铺现在用的就是这个类。有兴趣的朋友可以下来研究一下。</p>
</p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>April 12, 2009 -- <a href="http://avenger.name/blog/loopo20/" title="乐铺新版上线">乐铺新版上线</a></li><li>November 2, 2008 -- <a href="http://avenger.name/blog/loopo-for-google-accounts/" title="使用 Google 帐号来登录乐铺吧">使用 Google 帐号来登录乐铺吧</a></li><li>July 3, 2006 -- <a href="http://avenger.name/blog/404-rewrite/" title="404 模拟 URL Rewrite">404 模拟 URL Rewrite</a></li><li>April 10, 2006 -- <a href="http://avenger.name/blog/10-20/" title="1.0与2.0">1.0与2.0</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://avenger.name/blog/order-tag-by-pinyin/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>PHP T-shirt 样品出炉</title>
		<link>http://avenger.name/blog/php-t-shirt-photo/</link>
		<comments>http://avenger.name/blog/php-t-shirt-photo/#comments</comments>
		<pubDate>Sun, 01 Aug 2004 02:30:44 +0000</pubDate>
		<dc:creator>avenger</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[tshirt]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[嗯。从策划到出样品用了一周的时间，还好……比预计的要顺利些 这周让大家提意见及预定，下周批量印刷，hoho～ 查看大图 8.1照的新照片，感谢琳义务为我们做MT 相关链接：http://club.phpe.net/index.php?act=ST&#38;f=5&#38;t=6469 Related PostsJune 22, 2006 -- PHPE今夏T恤设计稿August 4, 2009 -- PHP5 调用 dot NET Soap WebService 的技巧July 19, 2008 -- 我的第一个 facebook appJuly 3, 2008 -- AboutOctober 8, 2007 -- PressLineSeptember 27, 2007 -- Memcache 中模拟 namespace]]></description>
			<content:encoded><![CDATA[<p class='fp'>嗯。从策划到出样品用了一周的时间，还好……比预计的要顺利些<br />
这周让大家提意见及预定，下周批量印刷，hoho～</p>
<p><img src="http://club.phpe.net/uploads/post-7-1091282816.jpg" width=300><br />
<a href=http://club.phpe.net/uploads/post-7-1091282816.jpg target=_blank>查看大图</a></p>
<p><span id="more-90"></span><font color=red>8.1照的新照片，感谢琳义务为我们做MT</font><br />
<img src=http://club.phpe.net/uploads/post-12-1091372994.jpg></p>
<p>相关链接：<a href="http://club.phpe.net/index.php?act=ST&amp;f=5&amp;t=6469">http://club.phpe.net/index.php?act=ST&amp;f=5&amp;t=6469</a></p>
</p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>June 22, 2006 -- <a href="http://avenger.name/blog/phpe-tshirt/" title="PHPE今夏T恤设计稿">PHPE今夏T恤设计稿</a></li><li>August 4, 2009 -- <a href="http://avenger.name/blog/how-php5-use-dotnet-soap/" title="PHP5 调用 dot NET Soap WebService 的技巧">PHP5 调用 dot NET Soap WebService 的技巧</a></li><li>July 19, 2008 -- <a href="http://avenger.name/blog/first-facebook-app/" title="我的第一个 facebook app">我的第一个 facebook app</a></li><li>July 3, 2008 -- <a href="http://avenger.name/about/" title="About">About</a></li><li>October 8, 2007 -- <a href="http://avenger.name/blog/pressline/" title="PressLine">PressLine</a></li><li>September 27, 2007 -- <a href="http://avenger.name/blog/memcache-namespace/" title="Memcache 中模拟 namespace">Memcache 中模拟 namespace</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://avenger.name/blog/php-t-shirt-photo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP + Flash的相册程序</title>
		<link>http://avenger.name/blog/php-flash-album/</link>
		<comments>http://avenger.name/blog/php-flash-album/#comments</comments>
		<pubDate>Thu, 05 Feb 2004 11:03:28 +0000</pubDate>
		<dc:creator>avenger</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[album]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[photo]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[在线演示：http://www.imagevuex.com/sites/newx/ 偶很喜欢这感觉，以后也可以做自己的在线相册了，HOHO～ 官方站点：http://www.imagevuex.com/ Related PostsAugust 4, 2009 -- PHP5 调用 dot NET Soap WebService 的技巧July 19, 2008 -- 我的第一个 facebook appJuly 6, 2008 -- 新发型July 3, 2008 -- AboutOctober 8, 2007 -- PressLineSeptember 27, 2007 -- Memcache 中模拟 namespace]]></description>
			<content:encoded><![CDATA[<p class='fp'>在线演示：<a href=http://www.imagevuex.com/>http://www.imagevuex.com/sites/newx/</a></p>
<p>偶很喜欢这感觉，以后也可以做自己的在线相册了，HOHO～</p>
<p>官方站点：<a href=http://www.imagevuex.com/>http://www.imagevuex.com/</a></p>
</p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>August 4, 2009 -- <a href="http://avenger.name/blog/how-php5-use-dotnet-soap/" title="PHP5 调用 dot NET Soap WebService 的技巧">PHP5 调用 dot NET Soap WebService 的技巧</a></li><li>July 19, 2008 -- <a href="http://avenger.name/blog/first-facebook-app/" title="我的第一个 facebook app">我的第一个 facebook app</a></li><li>July 6, 2008 -- <a href="http://avenger.name/blog/new_hairstyle/" title="新发型">新发型</a></li><li>July 3, 2008 -- <a href="http://avenger.name/about/" title="About">About</a></li><li>October 8, 2007 -- <a href="http://avenger.name/blog/pressline/" title="PressLine">PressLine</a></li><li>September 27, 2007 -- <a href="http://avenger.name/blog/memcache-namespace/" title="Memcache 中模拟 namespace">Memcache 中模拟 namespace</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://avenger.name/blog/php-flash-album/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>PHP备忘</title>
		<link>http://avenger.name/blog/php-memo/</link>
		<comments>http://avenger.name/blog/php-memo/#comments</comments>
		<pubDate>Sun, 01 Feb 2004 15:01:07 +0000</pubDate>
		<dc:creator>avenger</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[只是防止自己记性不好忘掉，也许以后会不断增加 1.DIRECTORY_SEPARATOR 这个常量从4.06版开始就存在，只是以前的手册没有说明。最新手册已经列出。 这是为了程序跨平台使用，定义目录分隔符，对于Windows系统为&#8221;"， 而对于*nix系统为&#8221;/&#8221;。 2. 使用 &#8220;&#8220;&#8221; 可以用来执行一些命令行，并返回执行结果。同 shell_exec 函数的执行结果是相同的。 eg. echo `ls -la`; 2004年4月14日21时42分 3.发现新函数：getopt 用来获取命令行的参数 Related PostsAugust 4, 2009 -- PHP5 调用 dot NET Soap WebService 的技巧July 19, 2008 -- 我的第一个 facebook appJuly 3, 2008 -- AboutOctober 8, 2007 -- PressLineSeptember 27, 2007 -- Memcache 中模拟 namespaceJuly 20, 2007 -- 使用 EXP [...]]]></description>
			<content:encoded><![CDATA[<p class='fp'>只是防止自己记性不好忘掉，也许以后会不断增加</p>
<p>1.DIRECTORY_SEPARATOR 这个常量从4.06版开始就存在，只是以前的手册没有说明。最新手册已经列出。<br />
这是为了程序跨平台使用，定义目录分隔符，对于Windows系统为&#8221;"， 而对于*nix系统为&#8221;/&#8221;。</p>
<p>2. 使用 &#8220;&#8220;&#8221; 可以用来执行一些命令行，并返回执行结果。同 shell_exec 函数的执行结果是相同的。</p>
<p>eg.</p>
<div class=code>echo `ls -la`;
</div>
<p><font color=red>2004年4月14日21时42分</font><br />
3.发现新函数：getopt 用来获取命令行的参数</p>
</p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>August 4, 2009 -- <a href="http://avenger.name/blog/how-php5-use-dotnet-soap/" title="PHP5 调用 dot NET Soap WebService 的技巧">PHP5 调用 dot NET Soap WebService 的技巧</a></li><li>July 19, 2008 -- <a href="http://avenger.name/blog/first-facebook-app/" title="我的第一个 facebook app">我的第一个 facebook app</a></li><li>July 3, 2008 -- <a href="http://avenger.name/about/" title="About">About</a></li><li>October 8, 2007 -- <a href="http://avenger.name/blog/pressline/" title="PressLine">PressLine</a></li><li>September 27, 2007 -- <a href="http://avenger.name/blog/memcache-namespace/" title="Memcache 中模拟 namespace">Memcache 中模拟 namespace</a></li><li>July 20, 2007 -- <a href="http://avenger.name/blog/exp-useage/" title="使用 EXP 限制 Oracle 导出数据的条数">使用 EXP 限制 Oracle 导出数据的条数</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://avenger.name/blog/php-memo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vCard 格式的转换</title>
		<link>http://avenger.name/blog/vcard-format-cover/</link>
		<comments>http://avenger.name/blog/vcard-format-cover/#comments</comments>
		<pubDate>Sun, 28 Dec 2003 18:09:40 +0000</pubDate>
		<dc:creator>avenger</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[vcard]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[vCard 格式做为系统之间联系人数据交换无疑是一个比较好的选择方案。 收集了一些这方面的资料，以后可能会用得着。 vCard 标准 vCard Overview PEAR 中的一个 vCard 解析与生成的类 PHP vCard class v2.0 SF.net 上的 vCard PHP 项目 Related PostsAugust 4, 2009 -- PHP5 调用 dot NET Soap WebService 的技巧July 19, 2008 -- 我的第一个 facebook appJuly 3, 2008 -- AboutOctober 8, 2007 -- PressLineSeptember 27, 2007 -- Memcache 中模拟 namespaceJanuary 25, 2007 -- [...]]]></description>
			<content:encoded><![CDATA[<p class='fp'>vCard 格式做为系统之间联系人数据交换无疑是一个比较好的选择方案。<br />
收集了一些这方面的资料，以后可能会用得着。</p>
<ul></p>
<li><a href="http://www.ietf.org/rfc/rfc2426.txt">vCard 标准</a>
<li><a href="http://www.imc.org/pdi/vcardoverview.html">vCard Overview</a>
<li><acronym title="a framework and distribution system for reusable PHP components">PEAR</acronym> 中的一个 vCard <a href=http://pear.php.net/package/Contact_Vcard_Parse>解析</a>与<a href="http://pear.php.net/package/Contact_Vcard_Build">生成</a>的类
<li><a href="http://www.bitfolge.de/?s=phpvcard">PHP vCard class v2.0</a>
<li><a href="http://vcardphp.sourceforge.net/">SF.net 上的 vCard PHP 项目</a></p>
</p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>August 4, 2009 -- <a href="http://avenger.name/blog/how-php5-use-dotnet-soap/" title="PHP5 调用 dot NET Soap WebService 的技巧">PHP5 调用 dot NET Soap WebService 的技巧</a></li><li>July 19, 2008 -- <a href="http://avenger.name/blog/first-facebook-app/" title="我的第一个 facebook app">我的第一个 facebook app</a></li><li>July 3, 2008 -- <a href="http://avenger.name/about/" title="About">About</a></li><li>October 8, 2007 -- <a href="http://avenger.name/blog/pressline/" title="PressLine">PressLine</a></li><li>September 27, 2007 -- <a href="http://avenger.name/blog/memcache-namespace/" title="Memcache 中模拟 namespace">Memcache 中模拟 namespace</a></li><li>January 25, 2007 -- <a href="http://avenger.name/blog/copy-vs-ftp/" title="想不通啊想不通：Copy VS Ftp">想不通啊想不通：Copy VS Ftp</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://avenger.name/blog/vcard-format-cover/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>smarttemplate 的一个BUG</title>
		<link>http://avenger.name/blog/smarttemplate-bug/</link>
		<comments>http://avenger.name/blog/smarttemplate-bug/#comments</comments>
		<pubDate>Sun, 30 Nov 2003 17:54:00 +0000</pubDate>
		<dc:creator>avenger</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[看清楚了，是SmartTemplate，不是Smarty Template 在一页中建立一个以上的实例后，第一个以后的模板不会被正确解析。 解法办法 File: class.smarttemplate.php 找到: unset ($_top); 换成: unset ($GLOBALS[_top]); 搞定.. Related PostsAugust 4, 2009 -- PHP5 调用 dot NET Soap WebService 的技巧July 19, 2008 -- 我的第一个 facebook appJuly 3, 2008 -- AboutOctober 8, 2007 -- PressLineSeptember 27, 2007 -- Memcache 中模拟 namespaceJanuary 25, 2007 -- 想不通啊想不通：Copy VS Ftp]]></description>
			<content:encoded><![CDATA[<p class='fp'>看清楚了，是<a href="http://www.smartphp.net">SmartTemplate</a>，不是<a href="http://smarty.php.net">Smarty Template</a></p>
<p>在一页中建立一个以上的实例后，第一个以后的模板不会被正确解析。</p>
<p>解法办法</p>
<div class="code">File: class.smarttemplate.php<br />
找到:<br />
unset ($_top);<br />
换成:<br />
unset ($GLOBALS[_top]);
</div>
<p>搞定..</p>
</p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>August 4, 2009 -- <a href="http://avenger.name/blog/how-php5-use-dotnet-soap/" title="PHP5 调用 dot NET Soap WebService 的技巧">PHP5 调用 dot NET Soap WebService 的技巧</a></li><li>July 19, 2008 -- <a href="http://avenger.name/blog/first-facebook-app/" title="我的第一个 facebook app">我的第一个 facebook app</a></li><li>July 3, 2008 -- <a href="http://avenger.name/about/" title="About">About</a></li><li>October 8, 2007 -- <a href="http://avenger.name/blog/pressline/" title="PressLine">PressLine</a></li><li>September 27, 2007 -- <a href="http://avenger.name/blog/memcache-namespace/" title="Memcache 中模拟 namespace">Memcache 中模拟 namespace</a></li><li>January 25, 2007 -- <a href="http://avenger.name/blog/copy-vs-ftp/" title="想不通啊想不通：Copy VS Ftp">想不通啊想不通：Copy VS Ftp</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://avenger.name/blog/smarttemplate-bug/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
