<?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>张文杰的博客 &#187; Web</title>
	<atom:link href="http://zhangwenjie.net/archives/category/web/feed" rel="self" type="application/rss+xml" />
	<link>http://zhangwenjie.net</link>
	<description>技术、生活博客</description>
	<lastBuildDate>Tue, 21 Feb 2012 14:49:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>在Django模板中使用css、javascript 等静态文件</title>
		<link>http://zhangwenjie.net/archives/409</link>
		<comments>http://zhangwenjie.net/archives/409#comments</comments>
		<pubDate>Tue, 27 Jul 2010 04:39:35 +0000</pubDate>
		<dc:creator>zhangwenjie</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[Web服务器]]></category>

		<guid isPermaLink="false">http://zhangwenjie.net/?p=409</guid>
		<description><![CDATA[在使用Django开发的Web项目中是避免不了使用css、javascript、js等静态文件的，而对于这些静态文件的处理，django官网这样写：Django itself doesn’t serve static (media) files, such as images, style sheets, or video. It leaves that job to whichever Web server you choose.就是说django本身不处理类似于图片、样式表、视频等静态文件，它将此项工作交给了你选择的Web服务器]]></description>
			<content:encoded><![CDATA[<p>在使用Django开发的Web项目中是避免不了使用css、javascript、js等静态文件的，而对于这些静态文件的处理，django官网这样写：Django itself doesn’t serve static (media) files, such as images, style sheets, or video. It leaves that job to whichever Web server you choose.就是说django本身不处理类似于图片、样式表、视频等静态文件，它将此项工作交给了你选择的Web服务器。</p>
<p>在网上搜索到的django项目处理静态文件的示例中，大家似乎都在使用如下的方法让django处理静态文件：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p409code1'); return false;">View Code</a> PYTHON</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p4091"><td class="code" id="p409code1"><pre class="python" style="font-family:monospace;">urlpatterns += patterns<span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span>,
      <span style="color: black;">&#40;</span>r<span style="color: #483d8b;">'^static/(?P.*)$'</span>, <span style="color: #483d8b;">'django.views.static.serve'</span>,
      <span style="color: black;">&#123;</span><span style="color: #483d8b;">'document_root'</span>:  settings.<span style="color: black;">MEDIA_ROOT</span><span style="color: black;">&#125;</span><span style="color: black;">&#41;</span>,
    <span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>而对于django.views.static.serve方法，django官网说得很清楚：Using this method is <strong>inefficient</strong> and <strong>insecure</strong>. Do not use this in a production setting. Use this only for development.就是说这种方法是低效且不安全的，不要在生产环境使用此方法，只在开发环境使用。</p>
<p>这时对于静态文件的处理，我们只能使用我们选择的Web服务器来处理了。比如使用nginx服务器的话，可以如下设置：</p>
<p>先设置settings.py,如下,</p>
<div id="attachment_411" class="wp-caption aligncenter" style="width: 672px"><a href="http://zhangwenjie.net/wp-content/uploads/2010/07/11.jpg"><img class="size-full wp-image-411" title="设置settings.py" src="http://zhangwenjie.net/wp-content/uploads/2010/07/11.jpg" alt="设置settings.py" width="662" height="213" /></a><p class="wp-caption-text">设置settings.py</p></div>
<p>然后设置nginx的相应网站配置部分，如下，</p>
<div id="attachment_412" class="wp-caption aligncenter" style="width: 717px"><a href="http://zhangwenjie.net/wp-content/uploads/2010/07/2.jpg"><img class="size-full wp-image-412" title="配置nginx" src="http://zhangwenjie.net/wp-content/uploads/2010/07/2.jpg" alt="配置nginx" width="707" height="132" /></a><p class="wp-caption-text">配置nginx</p></div>
<p>如此配置以后，就可以让web服务器来高效的处理静态文件，而让django来处理动态内容。</p>
]]></content:encoded>
			<wfw:commentRss>http://zhangwenjie.net/archives/409/feed</wfw:commentRss>
		<slash:comments>38</slash:comments>
		</item>
		<item>
		<title>尝试一下WordPress的导出功能</title>
		<link>http://zhangwenjie.net/archives/400</link>
		<comments>http://zhangwenjie.net/archives/400#comments</comments>
		<pubDate>Wed, 30 Jun 2010 05:55:11 +0000</pubDate>
		<dc:creator>zhangwenjie</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[wordpress导出]]></category>

		<guid isPermaLink="false">http://zhangwenjie.net/?p=400</guid>
		<description><![CDATA[在GAE上开了个新博客http://zhangwenjienet.appspot.com，尝试将此博客的数据导出并导入到新博客。]]></description>
			<content:encoded><![CDATA[<p>　　在GAE上开了个新博客<a href="http://zhangwenjienet.appspot.com">http://zhangwenjienet.appspot.com</a>，尝试将此博客的数据导出并导入到新博客。</p>
<p>　　结果在使用导出功能时出错，看了一下，原来是这个功能和codbox插件有冲突，只能暂停wp-codebox插件后再导出。</p>
<p>　　</p>
]]></content:encoded>
			<wfw:commentRss>http://zhangwenjie.net/archives/400/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Python环境的easy_install配置</title>
		<link>http://zhangwenjie.net/archives/388</link>
		<comments>http://zhangwenjie.net/archives/388#comments</comments>
		<pubDate>Sat, 08 May 2010 15:40:32 +0000</pubDate>
		<dc:creator>zhangwenjie</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[easy_install]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://zhangwenjie.net/?p=388</guid>
		<description><![CDATA[对于Python环境下库的安装，无疑使用easy_install最方便。这里我们详细说一下如何配置easy_install，这个方法对Linux和windows平台均适用。]]></description>
			<content:encoded><![CDATA[<p>　　对于Python环境下库的安装，无疑使用easy_install最方便。这里我们详细说一下如何配置easy_install，这个方法对Linux和windows平台均适用。</p>
<p>　　<strong>安装easy_install</strong></p>
<p><strong>　　</strong>存在一个叫ez_setup.py的脚本，使easy_install的安装相当方便。你可以从网上找此脚本，或从这里下载<a href="http://zhangwenjie.net/wp-content/uploads/2010/05/ez_setup.zip">ez_setup</a>。然后运行以下的命令安装easy_install：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p388code2'); return false;">View Code</a> PYTHON</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3882"><td class="code" id="p388code2"><pre class="python" style="font-family:monospace;">      /usr/local/python265/bin/python  ez_setup.<span style="color: black;">py</span></pre></td></tr></table></div>

<p>　　稍候你就会看到安装成功的提示。<br />
　　<strong>将easy_install放置到系统路径中</strong></p>
<p><strong>　　</strong>安装easy_install完成后，要成功运行easy_install来安装库文件一般需要在/usr/local/python265/bin/目录下运行easy_install，或者要输入长长的路径名。为了可以在任何目录下运行此工具来安装python库，我们需要将此路径放置到PATH环境中去。方法如下是，修改.bashrc文件(这是一个隐藏文件)，在文件最后添加如下代码：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p388code3'); return false;">View Code</a> PYTHON</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3883"><td class="code" id="p388code3"><pre class="python" style="font-family:monospace;">      export PATH=$PATH:/usr/local/python265/bin　</pre></td></tr></table></div>

<p>　　然后再执行 source .bashrc就可以了。</p>
<p>　　<strong>实例演示</strong></p>
<p><strong>　　</strong>安装并配置好easy_install后，让我们试验一下easy_install安装库文件的方便之处。比如我们想安装MySQL-python库文件，在任意路径下这样输入：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p388code4'); return false;">View Code</a> PYTHON</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3884"><td class="code" id="p388code4"><pre class="python" style="font-family:monospace;">      easy_install  MySQL-python</pre></td></tr></table></div>


<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p388code5'); return false;">View Code</a> PYTHON</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3885"><td class="code" id="p388code5"><pre class="python" style="font-family:monospace;">　　然后会看到如下显示：</pre></td></tr></table></div>

<div id="attachment_390" class="wp-caption aligncenter" style="width: 652px"><a href="http://zhangwenjie.net/wp-content/uploads/2010/05/easy_install.jpg"><img class="size-full wp-image-390" title="easy_install" src="http://zhangwenjie.net/wp-content/uploads/2010/05/easy_install.jpg" alt="easy_install安装MySQL-python" width="642" height="277" /></a><p class="wp-caption-text">easy_install安装MySQL-python</p></div>
<p>　　可以看到easy_install成功安装了MySQL-python库。</p>
<p>　　</p>
<p>　　原创文章如转载，请注明：转载自<a title="张文杰的博客" href="http://zhangwenjie.net/">张文杰的博客</a> [ <a title="张文杰的博客" href="http://zhangwenjie.net/">http://zhangwenjie.net</a> ]</p>
<p>　　本文链接地址：<a href="http://zhangwenjie.net/archives/388.html">http://zhangwenjie.net/archives/388.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://zhangwenjie.net/archives/388/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Linux下Python 2.6.5安装MySQL-python的问题</title>
		<link>http://zhangwenjie.net/archives/384</link>
		<comments>http://zhangwenjie.net/archives/384#comments</comments>
		<pubDate>Sat, 08 May 2010 14:48:02 +0000</pubDate>
		<dc:creator>zhangwenjie</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL-python]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://zhangwenjie.net/?p=384</guid>
		<description><![CDATA[由于想在Python环境下连接MySQL读数据，且我的RHEL 5.3机器源代码安装的MySQL 5.1.36。这下问题来了，且似乎没有解决办法]]></description>
			<content:encoded><![CDATA[<p>　　由于RHEL 5.3系统自身带有Python2.4.3，且系统中的一些服务依赖此版本的Python，所以又在/usr/local/python265目录下安装了一个Python 2.6.5版本的Python。</p>
<p>　　由于想在Python环境下连接MySQL读数据，且我的RHEL 5.3机器源代码安装的MySQL 5.1.36。这下问题来了，且似乎没有解决办法。</p>
<p>　　当我使用Python的easy_install安装MySQL-python包时，一切似乎正常，没有出错。但我在交互环境下import MySQLdb时，出错如下：</p>
<div id="attachment_385" class="wp-caption aligncenter" style="width: 653px"><a href="http://zhangwenjie.net/wp-content/uploads/2010/05/err.png"><img class="size-full wp-image-385" title="err" src="http://zhangwenjie.net/wp-content/uploads/2010/05/err.png" alt="MySQL-python导入错误" width="643" height="260" /></a><p class="wp-caption-text">MySQL-python导入错误</p></div>
<p>　　错误告诉我libmysqlclient_r.so.15没有找到。我在我安装MySQL的目录下搜索后，发现有libmysqlclient_r.so.16文件，但没有错误提示的那个文件。我将这个16的文件罗链接到/usr/lib目录下也没有效果。在网上找了找，发现也有人遇到此问题，他的解决办法是删除当前安装的高版本MySQL，然后重新安装一个MySQL 5.0的，可以编译出libmysqlclient_r.so.15的MySQL版本。除此之外，没有找到其他的解决办法。</p>
<p>　　为了一个MySQL-python包，重新安装一个低版本的MySQL实在划不来。我想说的是MySQL-python包由于严重依赖libmysqlclient_r.so.15文件，是不是导致只能使用MySQL 5.0版本，其它的或高或低的MySQL将无法使用？或许去找一个libmysqlclient_r.so.15放到/usr/lib目录下，以迎合MySQL-python的要求来连接MySQL服务器，不知道是否可行？我没有办法试验。</p>
<p>　　另外，除了使用MySQL-python，在Python环境下好像再没有其它方式连接MySQL。或许是我孤陋寡闻，希望有办法的朋友不吝赐教。谢谢！</p>
<p>　　</p>
<p>　　原创文章如转载，请注明：转载自<a title="张文杰的博客" href="http://zhangwenjie.net/">张文杰的博客</a> [ <a title="张文杰的博客" href="http://zhangwenjie.net/">http://zhangwenjie.net</a> ]</p>
<p>　　本文链接地址：<a href="http://zhangwenjie.net/archives/384.html">http://zhangwenjie.net/archives/384.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://zhangwenjie.net/archives/384/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>也谈Zend构架与Smarty的集成配置</title>
		<link>http://zhangwenjie.net/archives/355</link>
		<comments>http://zhangwenjie.net/archives/355#comments</comments>
		<pubDate>Sun, 11 Apr 2010 12:36:30 +0000</pubDate>
		<dc:creator>zhangwenjie</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[Zend]]></category>

		<guid isPermaLink="false">http://zhangwenjie.net/?p=355</guid>
		<description><![CDATA[　　Zend架构是一个成熟、强大的PHP Web MVC的开发框架，而smarty是一个灵活、强大的模板引擎。如果将两者结合起来，将会使PHP的Web开发轻松不少，且上手也快。]]></description>
			<content:encoded><![CDATA[<p>　　Zend架构是一个成熟、强大的PHP Web MVC的开发框架，而smarty是一个灵活、强大的模板引擎。如果将两者结合起来，将会使PHP的Web开发轻松不少，且上手也快。</p>
<p>　　对于Zend构架与Smarty的集成配置，网上也有不少文章说到，但我自己觉得都不够完整，且并不是真正、深入集成。我这里所说的方法，是彻底的集成，程序写法是Zend本身的带的view写法是一样的。</p>
<p>　　首先说一下总体目录结构：</p>
<div id="attachment_356" class="wp-caption aligncenter" style="width: 236px"><a href="http://zhangwenjie.net/wp-content/uploads/2010/04/Zend.jpg"><img class="size-full wp-image-356" title="Zend目录结构" src="http://zhangwenjie.net/wp-content/uploads/2010/04/Zend.jpg" alt="Zend目录结构" width="226" height="154" /></a><p class="wp-caption-text">Zend目录结构</p></div>
<p>　　其中，application目录中包括config目录、controllers目录、models目录等；cache目录用于smarty缓存；compile目录用于smarty编译目录；config目录放置smarty的配置；library目录放置Zend框架库及smarty库；public目录放置引导文件及js、css、images等公共文件；template目录放置.tpl模板文件。</p>
<p>　　<strong>首先修改配置文件来支持smarty模板库(就是application/configs/application.ini文件)，</strong>添加如下内容：</p>
<p>　　</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p355code6'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3556"><td class="code" id="p355code6"><pre class="php" style="font-family:monospace;">　　smarty<span style="color: #339933;">.</span>class_path <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Smarty/Smarty.class.php&quot;</span>
　　smarty<span style="color: #339933;">.</span>left_delimiter <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&amp;lt;*&quot;</span>
　　smarty<span style="color: #339933;">.</span>right_delimiter <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;*&amp;gt;&quot;</span>
　　smarty<span style="color: #339933;">.</span>template_dir <span style="color: #339933;">=</span> APPLICATION_PATH <span style="color: #0000ff;">&quot;/../template&quot;</span>
　　smarty<span style="color: #339933;">.</span>compile_dir <span style="color: #339933;">=</span> APPLICATION_PATH <span style="color: #0000ff;">&quot;/../compile&quot;</span>
　　smarty<span style="color: #339933;">.</span>cache_dir <span style="color: #339933;">=</span> APPLICATION_PATH <span style="color: #0000ff;">&quot;/../cache&quot;</span>
　　smarty<span style="color: #339933;">.</span>cache_lifetime <span style="color: #339933;">=</span> <span style="color: #cc66cc;">600</span>
　　smarty<span style="color: #339933;">.</span>caching <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span>
　　smarty<span style="color: #339933;">.</span>config_dir <span style="color: #339933;">=</span> APPLICATION_PATH <span style="color: #0000ff;">&quot;/../config&quot;</span></pre></td></tr></table></div>

<p>　　<strong>第二，创建一个模板类文件Template，里面旋转初始smarty库的内容</strong>。这个文件里的类名我写为Zend_Templater，我把它放到library/Zend/下，这样它就会被自动加载：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p355code7'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3557"><td class="code" id="p355code7"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>?php
<span style="color: #000000; font-weight: bold;">class</span> Zend_Templater <span style="color: #000000; font-weight: bold;">extends</span> Zend_View_Abstract
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$_path</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$_engine</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
           <span style="color: #000088;">$config</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Config_Ini<span style="color: #009900;">&#40;</span>APPLICATION_PATH<span style="color: #339933;">.</span><span style="color: #0000ff;">'/configs/application.ini'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'production'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
           <span style="color: #b1b100;">require_once</span> <span style="color: #000088;">$config</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>smarty<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>class_path<span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_engine <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Smarty<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_engine<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>template_dir <span style="color: #339933;">=</span> <span style="color: #000088;">$config</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>smarty<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>template_dir<span style="color: #339933;">;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_engine<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>compile_dir <span style="color: #339933;">=</span> <span style="color: #000088;">$config</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>smarty<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>compile_dir<span style="color: #339933;">;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_engine<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>cache_dir <span style="color: #339933;">=</span> <span style="color: #000088;">$config</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>smarty<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>cache_dir<span style="color: #339933;">;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_engine<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>cache_lifetime <span style="color: #339933;">=</span> <span style="color: #000088;">$config</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>smarty<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>cache_lifetime<span style="color: #339933;">;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_engine<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>caching <span style="color: #339933;">=</span> <span style="color: #000088;">$config</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>smarty<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>caching<span style="color: #339933;">;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_engine<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>left_delimiter <span style="color: #339933;">=</span> <span style="color: #000088;">$config</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>smarty<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>left_delimiter<span style="color: #339933;">;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_engine<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>right_delimiter <span style="color: #339933;">=</span> <span style="color: #000088;">$config</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>smarty<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>right_delimiter<span style="color: #339933;">;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_engine<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>config_dir  <span style="color: #339933;">=</span> <span style="color: #000088;">$config</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>smarty<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>config_dir<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getEngine<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_engine<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __set<span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$val</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_engine<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>assign<span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$val</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __get<span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_engine<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>get_template_vars<span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __isset<span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_engine<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>get_template_vars<span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!==</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __unset<span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_engine<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>clear_assign<span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> assign<span style="color: #009900;">&#40;</span><span style="color: #000088;">$spec</span><span style="color: #339933;">,</span> <span style="color: #000088;">$value</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</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;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$spec</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_engine<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>assign<span style="color: #009900;">&#40;</span><span style="color: #000088;">$spec</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_engine<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>assign<span style="color: #009900;">&#40;</span><span style="color: #000088;">$spec</span><span style="color: #339933;">,</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> clearVars<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_engine<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>clear_all_assign<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> render<span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_engine<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>fetch<span style="color: #009900;">&#40;</span><span style="color: #990000;">strtolower</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> _run<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
?<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>　　其实也可以不放置到Zend目录且支持自动加载此文章，请见另一篇文章<a rel="bookmark" href="http://zhangwenjie.net/archives/352.html">让Zend框架自己加载自定义的类</a>。<br />
　　<strong>第三，修改引导文件，完成smarty与Zend的集成</strong>。修改Zend的引导文件index.php，添加支持smarty的视图类：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p355code8'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3558"><td class="code" id="p355code8"><pre class="php" style="font-family:monospace;">　　<span style="color: #000088;">$vr</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Controller_Action_Helper_ViewRenderer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
　　<span style="color: #000088;">$vr</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>setView<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Zend_Templater<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
　　<span style="color: #000088;">$vr</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>setViewSuffix<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tpl'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
　　Zend_Controller_Action_HelperBroker<span style="color: #339933;">::</span><span style="color: #004000;">addHelper</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vr</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>　　到这里，已经完成Zend与smarty的集成。这样在controller文件中，可以如下的方式写代码：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p355code9'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3559"><td class="code" id="p355code9"><pre class="php" style="font-family:monospace;">　　<span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>view<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>name <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Zend与smarty的集成'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>　　然后在你的tpl文件中，像如下的方式访问设置的变量：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p355code10'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p35510"><td class="code" id="p355code10"><pre class="php" style="font-family:monospace;">　　<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*</span><span style="color: #b1b100;">if</span> <span style="color: #000088;">$name</span><span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
     <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*</span><span style="color: #000088;">$name</span><span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
　　<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*/</span><span style="color: #b1b100;">if</span><span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>　　</p>
<p>　　原创文章如转载，请注明：转载自<a title="张文杰的博客" href="http://zhangwenjie.net/">张文杰的博客</a> [ <a title="张文杰的博客" href="http://zhangwenjie.net/">http://zhangwenjie.net</a> ]<br />
　　本文链接地址：<a href="http://zhangwenjie.net/archives/355.html">http://zhangwenjie.net/archives/355.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://zhangwenjie.net/archives/355/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>让Zend框架自己加载自定义的类</title>
		<link>http://zhangwenjie.net/archives/352</link>
		<comments>http://zhangwenjie.net/archives/352#comments</comments>
		<pubDate>Tue, 06 Apr 2010 14:57:09 +0000</pubDate>
		<dc:creator>zhangwenjie</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Zend]]></category>
		<category><![CDATA[Zend框架]]></category>
		<category><![CDATA[自动加载]]></category>

		<guid isPermaLink="false">http://zhangwenjie.net/?p=352</guid>
		<description><![CDATA[在用Zend框架编写Web程序的过程中，我们有时候需要让框架自动加载我们自己编写的一些工具类代码。我们都知道，Zend框架对以Zend_为前缘的类会自动加载的。知道这个原理后，对于我们自己的类让框架去自动加载，那么有两种方法]]></description>
			<content:encoded><![CDATA[<p>　　在用Zend框架编写Web程序的过程中，我们有时候需要让框架自动加载我们自己编写的一些工具类代码。我们都知道，Zend框架对以Zend_为前缘的类会自动加载的。知道这个原理后，对于我们自己的类让框架去自动加载，那么有两种方法：</p>
<p>　　<strong>让我们自己的类也以Zend_为前缀，并将类文件放到library/Zend目录下</strong></p>
<p><strong>　　</strong>这个方法是可行的。但一个缺点是，对于会让多个Web项目引用的类库来说，大家都向Zend目录放自定义的类文件是不合适的。对于一些多个项目都需要，即是非常共有的类文件，这样做一般是比较合适的，可以节约空间，也可以减少其它项目的开发时间。</p>
<p>　　<strong>通过配置入口文件，让Zend框架自己加载我们的类文件</strong></p>
<p><strong>　　</strong>这个方法需要对入口文件，即index.php文件做一些修改，这样框架就会自动加载我们的类。这个方法对只有本项目才会用到的类比较适用。</p>
<p>　　首先创建一个include目录，和application目录(此目录包含controller、model等二级目录)同级，include目录用来放置我们在项目中需要的自定义类。然后修改入口文件index.php:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p352code11'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p35211"><td class="code" id="p352code11"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//此代码添加到包含library库路径的代码下面。这个代码向包含路径中添加我们的include目录路径</span>
&nbsp;
<span style="color: #990000;">set_include_path</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span>PATH_SEPARATOR<span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #990000;">realpath</span><span style="color: #009900;">&#40;</span>APPLICATION_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/../include'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    <span style="color: #990000;">get_include_path</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//中间的其它代码</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//然后在$application-&amp;gt;bootstrap()-&amp;gt;run();代码的上面添加如下代码</span>
&nbsp;
Zend_Loader_AutoLoader<span style="color: #339933;">::</span><span style="color: #004000;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>setFallbackAutoLoader<span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$application</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>bootstrap<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>run<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>　　这样就完成了index.php文件对自定义类加载的修改。以后项目中的工具类、自定义的特殊类等等就可以放到include目录，在controller文件及model文件中就可以自动加载并使用了。</p>
<p>　　</p>
<p>　　原创文章如转载，请注明：转载自<a title="张文杰的博客" href="http://zhangwenjie.net/">张文杰的博客</a> [ <a title="张文杰的博客" href="http://zhangwenjie.net/">http://zhangwenjie.net</a> ]</p>
<p>　　本文链接地址：<a href="http://zhangwenjie.net/archives/352.html">http://zhangwenjie.net/archives/352.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://zhangwenjie.net/archives/352/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>搭建Sphinx搜索引擎的几个问题说明</title>
		<link>http://zhangwenjie.net/archives/348</link>
		<comments>http://zhangwenjie.net/archives/348#comments</comments>
		<pubDate>Fri, 02 Apr 2010 12:52:38 +0000</pubDate>
		<dc:creator>zhangwenjie</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[coreseek]]></category>
		<category><![CDATA[libiconv]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[sphinx]]></category>
		<category><![CDATA[全文检索]]></category>

		<guid isPermaLink="false">http://zhangwenjie.net/?p=348</guid>
		<description><![CDATA[Sphinx是一个基于SQL的全文检索引擎，可以结合MySQL,PostgreSQL做全文搜索，它可以提供比数据库本身更专业的搜索功能，使得应用程序更容易实现专业化的全文检索。]]></description>
			<content:encoded><![CDATA[<p>　　<strong>Sphinx及Coreseek</strong></p>
<p><strong>　　</strong><a title="sphinx" href="http://sphinxsearch.com">Sphinx</a>是一个基于SQL的全文检索引擎，可以结合MySQL,PostgreSQL做全文搜索，它可以提供比数据库本身更专业的搜索功能，使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口，如PHP、Python、Perl、Ruby等，同时为MySQL也设计了一个存储引擎插件phinxSE。关于更多sphinx的信息，请访问<a title="sphinx" href="http://sphinxsearch.com">这里</a>。</p>
<p>　　CoreSeek是基于sphinx的加入了中文分词搜索的开源软件。更多信息见<a title="coreseek" href="http://www.coreseek.cn">这里</a>。</p>
<p>　　Coreseek及spinx的安装请到网上搜索，教程很多。我只在这里说说安装过程中的几个问题及解决。</p>
<p>　　<strong>关于csft(这是Coreseek基于sphinx加入中文分词的产品名称)在make时，出现”undefined reference to libiconv_open”的问题</strong></p>
<p><strong>　　</strong>sphinx依赖于libiconv实现编码转换。所以在机器上提前要安装libiconv库。然后有configure完成后，使用命令 vim src/Makefile(在csft目录里)，找到 LIBS = -lm -lexpat -L/usr/local/lib 改为LIBS = -lm -lexpat -liconv -L/usr/local/lib重新make就可以了。网上有其它人将宏#define USE_LIBICONV改为0，表示不使用libiconv。虽然可以解决问题，但不推荐此方法。</p>
<p>　　<strong>关于在使用命令”bin/indexer”创建索引时，出现”error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory”的问题</strong></p>
<p><strong>　　</strong>在出现这个问题时，先看是否在 /usr/lib下有libiconv.so.2文件或此文件的软(硬)连接。没有的话就做一下连接(前提是安装了libiconv)。然后执行如下的命令：echo   /usr/lib &gt;&gt; /etc/ld.so.conf　接着执行ldconfig。这时就没有问题了。</p>
<p>　　</p>
<p>　　原创文章如转载，请注明：转载自<a title="张文杰的博客" href="http://zhangwenjie.net/">张文杰的博客</a> [ <a title="张文杰的博客" href="http://zhangwenjie.net/">http://zhangwenjie.net</a> ]</p>
<p>　　本文链接地址：<a href="http://zhangwenjie.net/archives/348.html">http://zhangwenjie.net/archives/348.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://zhangwenjie.net/archives/348/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>在Zend框架中结合Zend_Paginator和Smarty实现分页</title>
		<link>http://zhangwenjie.net/archives/339</link>
		<comments>http://zhangwenjie.net/archives/339#comments</comments>
		<pubDate>Tue, 30 Mar 2010 14:01:12 +0000</pubDate>
		<dc:creator>zhangwenjie</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[Zend]]></category>
		<category><![CDATA[Zend_Paginator]]></category>
		<category><![CDATA[分页]]></category>

		<guid isPermaLink="false">http://zhangwenjie.net/?p=339</guid>
		<description><![CDATA[在一般的Web程序中都要用到分页的功能。对于使用了Zend框架的Web程序来说，结合Zend自身的View和Zend_Paginator组件，实现分页是比较轻松的事。但在Zend中整合了Smarty模板语言后，又如何使用Zend_Paginator来实现分页呢。]]></description>
			<content:encoded><![CDATA[<p>　　在一般的Web程序中都要用到分页的功能。对于使用了Zend框架的Web程序来说，结合Zend自身的View和Zend_Paginator组件，实现分页是比较轻松的事。但在Zend中整合了Smarty模板语言后，又如何使用Zend_Paginator来实现分页呢。</p>
<p>　　其实，我们在分析了Zend_Paginator源代码后，会发现其实实现分页也是比较容易的。下面我们具体来看一下。</p>
<p>　　<strong>首先在Controller文件中，写如下的代码：</strong><br />
　　</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p339code12'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p33912"><td class="code" id="p339code12"><pre class="php" style="font-family:monospace;">　　<span style="color: #666666; font-style: italic;">//这里写生成$paginator的代码，我省略了.直接写输出代码</span>
　　Zend_Paginator<span style="color: #339933;">::</span><span style="color: #004000;">setDefaultScrollingStyle</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Sliding'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>　<span style="color: #666666; font-style: italic;">//设置分页方式</span>
　　<span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>view<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>pages <span style="color: #339933;">=</span> <span style="color: #000088;">$paginator</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getPages<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//获取关于分页的信息，又如当前是第几页，一共多少页等</span>
　　<span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>view<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>items <span style="color: #339933;">=</span> <span style="color: #000088;">$paginator</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getIterator<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//获取可以迭代的具体数据</span></pre></td></tr></table></div>

<p>　　<strong>然后在 tpl文件中如此写:</strong></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p339code13'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p33913"><td class="code" id="p339code13"><pre class="php" style="font-family:monospace;">   <span style="color: #666666; font-style: italic;">//输出具体数据 &amp;lt;**&amp;gt;是我的smarty模板中设置的输出界定符</span>
&nbsp;
　　<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*</span> <span style="color: #b1b100;">if</span> <span style="color: #000088;">$items</span> <span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
　　 <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*</span><span style="color: #b1b100;">foreach</span> name <span style="color: #339933;">=</span> index1 from <span style="color: #339933;">=</span> <span style="color: #000088;">$items</span><span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
      <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*</span><span style="color: #b1b100;">foreach</span> name <span style="color: #339933;">=</span> index2 from <span style="color: #339933;">=</span> <span style="color: #000088;">$index1</span><span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
        <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*</span><span style="color: #000088;">$index2</span><span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
      <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*/</span><span style="color: #b1b100;">foreach</span><span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
   <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*/</span><span style="color: #b1b100;">foreach</span><span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>　　<strong>下面输出页码：</strong></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p339code14'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p33914"><td class="code" id="p339code14"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*</span> <span style="color: #b1b100;">if</span> <span style="color: #000088;">$pages</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>pageCount<span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>div<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span>
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;!--</span> Previous page <span style="color: #990000;">link</span> <span style="color: #339933;">--&amp;</span>gt<span style="color: #339933;">;</span>
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*</span> <span style="color: #b1b100;">if</span> <span style="color: #000088;">$pages</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>previous <span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
  <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;/index/&amp;lt;* <span style="color: #006699; font-weight: bold;">$pages</span>-&amp;gt;previous*&amp;gt;&quot;</span><span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span>
    <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> Previous
  <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;/</span>a<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #339933;">|</span>
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*</span><span style="color: #b1b100;">else</span><span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
  <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>span<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span>lt<span style="color: #339933;">;</span> Previous<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;/</span>span<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #339933;">|</span>
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*/</span><span style="color: #b1b100;">if</span><span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;!--</span> Numbered page links <span style="color: #339933;">--&amp;</span>gt<span style="color: #339933;">;</span>
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*</span> <span style="color: #b1b100;">foreach</span> from <span style="color: #339933;">=</span> <span style="color: #000088;">$pages</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>pagesInRange name <span style="color: #339933;">=</span> page<span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
  <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*</span> <span style="color: #b1b100;">if</span> <span style="color: #000088;">$page</span> <span style="color: #339933;">!=</span> <span style="color: #000088;">$pages</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>current <span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
    <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;/index/&amp;lt;*<span style="color: #006699; font-weight: bold;">$page</span>*&amp;gt;&quot;</span><span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span>
        <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*</span><span style="color: #000088;">$page</span><span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
    <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;/</span>a<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #339933;">|</span>
  <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*</span><span style="color: #b1b100;">else</span><span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
    <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*</span><span style="color: #000088;">$page</span><span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #339933;">|</span>
  <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*/</span><span style="color: #b1b100;">if</span><span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*</span> <span style="color: #339933;">/</span><span style="color: #b1b100;">foreach</span><span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;!--</span> <span style="color: #990000;">Next</span> page <span style="color: #990000;">link</span> <span style="color: #339933;">--&amp;</span>gt<span style="color: #339933;">;</span>
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*</span> <span style="color: #b1b100;">if</span> <span style="color: #000088;">$pages</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>next <span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
  <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;/index/&amp;lt;* <span style="color: #006699; font-weight: bold;">$pages</span>-&amp;gt;next*&amp;gt;&quot;</span><span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span>
    <span style="color: #990000;">Next</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;;</span>
  <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;/</span>a<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span>
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*</span><span style="color: #b1b100;">else</span><span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
  <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>span<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span>Next <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>gt<span style="color: #339933;">;&amp;</span>lt<span style="color: #339933;">;/</span>span<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span>
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*/</span><span style="color: #b1b100;">if</span><span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span>
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;/</span>div<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span>
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;*/</span><span style="color: #b1b100;">if</span><span style="color: #339933;">*&amp;</span>gt<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>　　如此就完成了在Smarty下使用Zend_Paginator实现的效果。总结一下，在使用smarty时，controller文件中必须使用$paginator-&gt;getPages()和$paginator-&gt;getIterator()来获取分页信息及实际数据。然后在smarty模板文件中使用foreach语句输出就完成了。这个方式在我linux机器上测试成功。如果大家使用中还有什么问题，请留言。</p>
<p>　　原创文章如转载，请注明：转载自<a title="张文杰的博客" href="http://zhangwenjie.net/">张文杰的博客</a> [ <a title="张文杰的博客" href="http://zhangwenjie.net/">http://zhangwenjie.net</a> ]</p>
<p>　　本文链接地址：<a href="http://zhangwenjie.net/archives/339.html">http://zhangwenjie.net/archives/339.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://zhangwenjie.net/archives/339/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>500美元/个！！！谷歌悬赏Chrome漏洞</title>
		<link>http://zhangwenjie.net/archives/260</link>
		<comments>http://zhangwenjie.net/archives/260#comments</comments>
		<pubDate>Sat, 30 Jan 2010 13:20:47 +0000</pubDate>
		<dc:creator>zhangwenjie</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[互联网]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[浏览器]]></category>
		<category><![CDATA[谷歌]]></category>

		<guid isPermaLink="false">http://zhangwenjie.net/?p=260</guid>
		<description><![CDATA[大家想通过Chrome赚钱吗？怎么通过Chrome赚钱呢？现在机会来了，谷歌500美元/个悬赏Chrome漏洞。如果你对Chrome浏览器有研究，可以通过找漏洞来赚钱。。。]]></description>
			<content:encoded><![CDATA[<p>　　大家想通过Chrome赚钱吗？怎么通过Chrome赚钱呢？现在机会来了，谷歌500美元/个悬赏Chrome漏洞。如果你对Chrome浏览器有研究，可以通过找漏洞来赚钱。</p>
<p>　　本周，互联网巨头<a href="www.google.com" target="_blank">谷歌</a>公司为旗下的Chrome浏览器建立基金项目，向发现普通漏洞的研究人员支付500美元，最高可达1337美元。</p>
<p>　　据Chrome安全小组成员克里斯·伊万透露，谷歌成立该项目是为了进一步提高Chrome浏览器和Chromium软件的安全性。由于谷歌软件坚持开源原则，大部分代码都向公共开放，这也给产品的安全带来一定隐患。</p>
<p>　　但该项目暂时不包括还处在研发阶段的ChromeOS。伊万表示，此举主要是为了鼓励更多研究人员关注谷歌产品，谷歌会给予适当的物质奖励。</p>
<p>　　业界分析师阿米尼也认为，物质奖励会吸引更多的人参与到发现漏洞的活动中。上周，<a href="http://www.microsoft.com" target="_blank">微软</a>发布的八个IE重要漏洞中，至少有五个已经被ZDI安全机构发现，但并没有引起足够重视。</p>
<p>　　相比其他浏览器竞争对手，Chrome只能算是后起之秀。Chrome浏览器在各项浏览器性能测试中表现出色，得分高居榜首。它在不到两年的发展中，占据主流产品第三的位置但市场份额增长缓慢，与排名前列的IE和Firefox差距还很大。</p>
<p>　　据了解，谷歌并不是第一次作出这样尝试的大公司。微软早在数年前就已经启动类似的项目，而Mozilla基金会也在2004年开设过“最先值得赞助奖”。</p>
<p>　　不可否认，Google在向微软和Mozilla基金会学习此方法以提高Chrome浏览器的性能、质量及速度。</p>
<p>　　</p>
<p>　　首发张文杰的博客:zhangwenjie.net　（转载请保留，谢谢）</p>
]]></content:encoded>
			<wfw:commentRss>http://zhangwenjie.net/archives/260/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>网易(163)也要开通微博了</title>
		<link>http://zhangwenjie.net/archives/246</link>
		<comments>http://zhangwenjie.net/archives/246#comments</comments>
		<pubDate>Thu, 21 Jan 2010 15:00:26 +0000</pubDate>
		<dc:creator>zhangwenjie</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[互联网]]></category>
		<category><![CDATA[163]]></category>
		<category><![CDATA[微博]]></category>
		<category><![CDATA[网易]]></category>

		<guid isPermaLink="false">http://zhangwenjie.net/?p=246</guid>
		<description><![CDATA[已知网易微博今天开始内部测试。地址是http://t.163.com]]></description>
			<content:encoded><![CDATA[<p>　　已知网易微博今天开始内部测试。地址是<a rel="external" href="http://labs.chinamobile.com/go.php?url=http%3A%2F%2Ft.163.com%2F" target="_blank">http://t.163.com</a>。</p>
<p>　　目前呢，你可以通过上面的域名访问网易微博，等你使用已有的通行证登录后，会出现一个页面告诉你微博地址是什么，但要真正登录微博还需要邀请码，那邀请码哪里来呢，我也不知道。因为现在网易微博邀请码还没开放。具体开放日不确定，但是有内部消息是在2月7日前会通过博客活动发放一批微博邀请码。</p>
<p><a href="http://zhangwenjie.net/wp-content/uploads/2010/01/Untitled1.png"><img class="aligncenter size-medium wp-image-248" title="163微博" src="http://zhangwenjie.net/wp-content/uploads/2010/01/Untitled1-300x175.png" alt="163微博" width="300" height="175" /></a><a href="http://zhangwenjie.net/wp-content/uploads/2010/01/Untitled1.jpg"></a><br />
　　慢慢期待网易微博吧，目前曝光的图片没啥新意，跟新浪的差不多。其实天下的微博都差不多。现在的问题是像主流门户如新浪开通了微博，那163也不能太落后，一定要及时跟上。</p>
<p>　　目前所知你可以通过一下三种方式获得邀请码：</p>
<p><strong>　　一、网易现在正在搞口号征集活动，有千元的奖励还有激活获得网易微薄邀请码。</strong><br />
　　　　活动地址：<a rel="external" href="http://labs.chinamobile.com/go.php?url=http%3A%2F%2Fbbs.163.com%2Fspecial%2F001543L5%2Fslogan.html" target="_blank">http://bbs.163.com/special/001543L5/slogan.html</a></p>
<p><strong>　　二、通过博客途径获取网易微博邀请码。</strong><br />
　　　　活动地址：<a rel="external" href="http://labs.chinamobile.com/go.php?url=http%3A%2F%2Fnews.163.com%2Fspecial%2F00013R06%2Fmicro.html" target="_blank">http://news.163.com/special/00013R06/micro.html</a></p>
<p><strong>　　三、通过发有趣的事情获得网易微博邀请码。</strong><br />
　　　　地址：<a rel="external" href="http://labs.chinamobile.com/go.php?url=http%3A%2F%2Fservice.bbs.163.com%2Fbbs%2Fdoings%2F163330479%2C1.html" target="_blank">http://service.bbs.163.com/bbs/doings/163330479,1.html</a></p>
<p>　　首发张文杰的博客:http://zhangwenjie.net（转载请保留，谢谢）</p>
]]></content:encoded>
			<wfw:commentRss>http://zhangwenjie.net/archives/246/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

