﻿<?xml version="1.0" encoding="utf-8"?><rss version="2.0">
<channel>
<title>梁龙的博客</title>
<link>http://www.lianglong.org</link>
<description></description>
<language>zh-cn</language>
<copyright>粤ICP备08127484号  Copyright 梁龙的博客 www.lianglong.org  All Rights Reserved. Power by lianglong . Version:Demo


</copyright>
<pubDate>February 07,2012  15:22:45</pubDate>
<generator>diplodocus@126.com</generator>

<item>
  <title>7个免费强大的Ajax文件管理器 </title>
  <link>http://www.lianglong.org/article/217.html</link>
  <description><![CDATA[<p>如果你正在开发一个WEB应用，需要一个不错的强大的文件管理器，并且可以简单的定制，那么，下面的这七个免费开源的文件管理器你一会喜欢的。这些文件管理器都很强大，他们全部都支持PHP，Javascript和Ajax，有几个还支持别的WEB开发语言。这些管理理可以让你完成目录文件浏览，搜索，上传/下载，编辑，拷贝，移动，删除等等文件操作功能。</p>
<h3 class="title"><br />
&nbsp;</h3>
<h3 class="title">1. <a href="http://www.ajaxplorer.info/"><font color="#620091">AjaXplorer</font></a></h3>
<p>&nbsp;</p>
<p class="img"><img alt="Ajax File Manager" src="http://devsnippets.com/img/file-manager4.jpg" /></p>
<p>&nbsp;</p>
<p>AjaXplorer 是一个免费的 Ajax 文件管理器，其很容易安装。而且它的布局很丰富，可以用于多种应用，比如：文件管理，文件共享，图片库，代码库等等。不过它只支持(4&nbsp;呀 5) ，不支持数据库。</p>
<p>&nbsp;</p>
<ul>
    <li>改名/拷贝/移动/删除/下载文件或目录。</li>
    <li>以进度条的方式上传多个文件 (需要Flash 支持，不支持https)</li>
    <li>创建目录和空文件。</li>
    <li>编辑纯文本文件和代码 (js, php, html, java, sql, perl)，支持语法高亮。</li>
    <li>查看图片，有缩略图功能。</li>
    <li>可以在线地播放MP3文件。</li>
    <li>在线地查看Flash videos (FLV) 文件。</li>
    <li>可以在线地浏览或解压ZIP 文件。</li>
</ul>
<p>&nbsp;</p>
<p><strong>链接：</strong></p>
<ul>
    <li><strong>下载</strong> ：<a href="http://www.ajaxplorer.info/download/"><font color="#620091">http://www.ajaxplorer.info/download/</font></a></li>
    <li><strong>演示</strong> ：<a href="http://www.ajaxplorer.info/demo/"><font color="#620091">http://www.ajaxplorer.info/demo/</font></a></li>
</ul>
<p>&nbsp;</p>
<h3 class="title"><br />
&nbsp;</h3>
<h3 class="title">2. <a href="http://filenice.com/"><font color="#620091">fileNice</font></a></h3>
<p>&nbsp;</p>
<p class="img"><img alt="Ajax File Manager" src="http://devsnippets.com/img/file-manager1.jpg" /></p>
<p>&nbsp;</p>
<p>fileNice 是一个免费的PHP文件浏览器。</p>
<p><strong>链接：</strong></p>
<ul>
    <li><strong>主页：</strong> <a href="http://filenice.com/"><font color="#620091">http://filenice.com/</font></a></li>
    <li><strong>演示：</strong> <a href="http://filenice.com/demo/"><font color="#620091">http://filenice.com/demo/</font></a></li>
</ul>
<p>&nbsp;</p>
<h3 class="title"><br />
&nbsp;</h3>
<h3 class="title">3. <a href="http://www.solitude.dk/filethingie/"><font color="#620091">File Thingie</font></a></h3>
<p>&nbsp;</p>
<p class="img"><img alt="Ajax File Manager" src="http://devsnippets.com/img/file-manager2.jpg" /></p>
<p>&nbsp;</p>
<p>File Thingie 是一个小型的文件管理器。由PHP写成。他主要的目的是提示一个WEB界面的文件管理器（如果你不能使用或是不会使用FTP）。通过File Thingie你可以完成下面这些事：</p>
<ul>
    <li>安装简单&mdash; 只有一个文件</li>
    <li>多文件上传</li>
    <li>多用户和用户组</li>
    <li>创建子目录</li>
    <li>改名，移动，删除，拷贝文件和目录</li>
    <li>搜索文件或目录名</li>
    <li>通过黑/白名单进行文件级的存取控制</li>
    <li>编辑纯文本文件</li>
    <li>在线Unzip&nbsp;文件</li>
    <li>非常容易地进行CSS界面定制</li>
    <li>支持多国语言</li>
</ul>
<p><strong>链接：</strong></p>
<ul>
    <li><strong>教程：</strong> <a href="http://www.solitude.dk/filethingie/tour"><font color="#620091">http://www.solitude.dk/filethingie/tour</font></a></li>
    <li><strong>下载：</strong> <a href="http://www.solitude.dk/filethingie/download"><font color="#620091">http://www.solitude.dk/filethingie/download</font></a></li>
</ul>
<p>&nbsp;</p>
<h3 class="title"><br />
&nbsp;</h3>
<h3 class="title">4. <a href="http://og5.net/christoph/article/MooTools_based_FileManager"><font color="#620091">MooTools based FileManager</font></a></h3>
<p>&nbsp;</p>
<p class="img"><img alt="Ajax File Manager" src="http://devsnippets.com/img/file-manager3.jpg" /></p>
<p>&nbsp;</p>
<p>MooTools based File-Manager 提供了预览，上传和修改文件和目录的功能。其主要功能如下：</p>
<ul>
    <li>浏览文件和目录</li>
    <li>改名，删除，移动（拖放）,拷贝（Ctrl+拖放）和下载</li>
    <li>查看文件细节和预览图片文件，文本文件，压缩文件和音频文件。</li>
    <li>非常不错的UI设计&nbsp;</li>
    <li>通过FancyUpload 上传文件</li>
    <li>提供在上传时自动缩放图片尺寸的选项</li>
</ul>
<p><strong>链接：</strong></p>
<ul>
    <li><strong>演示：</strong> <a href="http://og5.net/christoph/Scripts/FileManager/Demos/"><font color="#620091">http://og5.net/christoph/Scripts/FileManager/Demos/</font></a></li>
    <li><strong>下载：</strong> <a href="http://og5.net/christoph/article/MooTools_based_FileManager"><font color="#620091">http://og5.net/christoph/article/MooTools_based_FileManager</font></a></li>
</ul>
<p>&nbsp;</p>
<h3 class="title"><br />
&nbsp;</h3>
<h3 class="title">5. <a href="http://ecosmear.com/relay/"><font color="#620091">Relay</font></a></h3>
<p>&nbsp;</p>
<p class="img"><img alt="Ajax File Manager" src="http://devsnippets.com/img/file-manager5.jpg" /></p>
<p>&nbsp;</p>
<p>Relay 是一个极牛的Ajax 文件管理器。在上传和下载文件它做得相当出色。下面是它的一些功能：</p>
<ul>
    <li>可以随意拖放文件和目录</li>
    <li>动态地载入文件目录结构&nbsp;</li>
    <li>上传文件进度条&nbsp;</li>
    <li>缩略图预览（包括PDF文件）&nbsp;</li>
    <li>多用户和帐号</li>
</ul>
<p><strong>链接：</strong></p>
<ul>
    <li><strong>演示：</strong> <a href="http://ecosmear.com/relay/demo/"><font color="#620091">http://ecosmear.com/relay/demo/</font></a></li>
    <li>&nbsp;<strong>主页：</strong> <a href="http://ecosmear.com/relay/"><font color="#620091">http://ecosmear.com/relay/</font></a></li>
</ul>
<p>&nbsp;</p>
<h3 class="title"><br />
&nbsp;</h3>
<h3 class="title">6. <a href="http://kfm.verens.com/"><font color="#620091">Kae&rsquo;s File Manager</font></a></h3>
<p>&nbsp;</p>
<p class="img"><img alt="Ajax File Manager" src="http://devsnippets.com/img/file-manager8.jpg" /></p>
<p>&nbsp;</p>
<p>KFM 是一个在线的文件管理器，它可以单独使用或是以一个插件的方式给一些编辑器使用。比如这些编辑器：FCKeditor 或TinyMCE。KFM 是一个开源的免费的项目，下面是它的一些特性：</p>
<ul>
    <li>鼠标拖放功能</li>
    <li>图标显示，列表显示</li>
    <li>支持插件</li>
    <li>图片操作，幻灯片播放</li>
    <li>简单的安装和升级</li>
    <li>文本编辑时语法高亮</li>
    <li>搜索引擎</li>
    <li>标签</li>
    <li>多语言</li>
    <li>mp3&nbsp;和视频播放插件</li>
</ul>
<p><strong>链接：</strong></p>
<ul>
    <li><strong>演示：</strong> <a href="http://kfm.verens.com/demo/1.3.1/?lang=en"><font color="#620091">http://kfm.verens.com/demo/1.3.1/?lang=en</font></a></li>
    <li><strong>主页：</strong> <a href="http://kfm.verens.com/"><font color="#620091">http://kfm.verens.com/</font></a></li>
</ul>
<p>&nbsp;</p>
<h3 class="title"><br />
&nbsp;</h3>
<h3 class="title">7. <a href="http://extplorer.sourceforge.net/"><font color="#620091">eXtplorer</font></a></h3>
<p>&nbsp;</p>
<p class="img"><img alt="Ajax File Manager" src="http://devsnippets.com/img/file-manager7.jpg" /></p>
<p>&nbsp;</p>
<p>eXtplorer 特性如下：</p>
<ul>
    <li>文件目录浏览</li>
    <li>编辑，复制，移动，删除文件</li>
    <li>搜索，上传和下载文件</li>
    <li>创建和释放压缩文件</li>
    <li>创建文件和目录</li>
    <li>更改文件和目录权限</li>
    <li>其它更多更多的内容</li>
</ul>
<p><strong>链接：</strong></p>
<ul>
    <li><strong>主页：</strong> &nbsp;<a href="http://extplorer.sourceforge.net/"><font color="#620091">http://extplorer.sourceforge.net/</font></a></li>
</ul>]]></description>
  <category>开发板块</category>
  <comments>http://www.lianglong.org/article/217.html#comment</comments>
  <guid>http://www.lianglong.org/article/217.html</guid>
  <pubDate>Tue, 06 Dec 2011 14:35:41 +0000</pubDate>
</item>
<item>
  <title>QueryPath, php上的jQuery </title>
  <link>http://www.lianglong.org/article/QueryPath.html</link>
  <description><![CDATA[<p>红得发紫的jQuery框架是专门用于页面Javascript程序设计的，它通过一种优雅的方式让我们轻松自如地操作页面的所有元素而无须担心浏览器版本以及兼容性等问题。受到jQuery的启发，一种试图让Web开发者在PHP中直接采用jQuery方式操纵和生成HTML/XML元素的 QueryPath计划开始了，库的发开者是<a href="http://technosophos.com/"><font color="#620091">Matt Butcher</font></a> 。</p>
<p>&nbsp;</p>
<p>QueryPath可以很方便地读入和生成HTML/XML，使用jQuery类似的语法和函数遍历文档对象，支持远程URL文件的读取和分析。支持标准的CSS3 Selector和XPath，这意味着我们可以使PHP像jQuery一样，随心所欲地玩转任何HTML！当然PHP5本身就带了不少DOM解析库，QueryPath本身也是在这些库上的二次加工，省下了我们不少的工作量。</p>
<p>QueryPath官方网站：<a target="_blank" href="http://querypath.org/"><font color="#620091">http://querypath.org/</font></a></p>
<p>&nbsp;</p>
<p>QueryPath使用一个qp()工厂函数，为各种需求生成不同的类，一个最简单的例子如下：</p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Php代码 &nbsp;</div>
</div>
<ol class="dp-c">
    <li><span><span class="keyword"><strong><font color="#7f0055">require</font></strong></span><span>&nbsp;</span><span class="string"><font color="#0000ff">'QueryPath/QueryPath.php'</font></span><span>;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span class="vars">$html</span><span>&nbsp;=&nbsp;qp(</span><span class="string"><font color="#0000ff">'a.html'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span class="vars">$html</span><span>-&gt;find(</span><span class="string"><font color="#0000ff">'title'</font></span><span>)-&gt;text(</span><span class="string"><font color="#0000ff">'hello&nbsp;world'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span class="vars">$html</span><span>-&gt;find(</span><span class="string"><font color="#0000ff">'.myInput'</font></span><span>)-&gt;attr(</span><span class="string"><font color="#0000ff">'value'</font></span><span>,&nbsp;</span><span class="string"><font color="#0000ff">'hello&nbsp;world'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span class="vars">$html</span><span>-&gt;find(</span><span class="string"><font color="#0000ff">'body'</font></span><span>)-&gt;css(</span><span class="string"><font color="#0000ff">'background-color'</font></span><span>,&nbsp;</span><span class="string"><font color="#0000ff">'red'</font></span><span>);&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre style="display: none" class="php" title="QueryPath, php上的jQuery" pre_index="0" source_url="http://justcoding.iteye.com/blog/673179" codeable_type="Blog" codeable_id="673179" name="code">
require 'QueryPath/QueryPath.php'; 
$html = qp('a.html');
$html-&gt;find('title')-&gt;text('hello world');
$html-&gt;find('.myInput')-&gt;attr('value', 'hello world');
$html-&gt;find('body')-&gt;css('background-color', 'red');</pre>
<p>&nbsp;</p>
<p>如果你对jQuery熟悉的话，几乎可以没有任何学习成本就能很快上手。我立刻就使用QueryPath来写了几个测试例程，分析和遍历了一个常去的网站的内容结构，抓取了和分析了不少有用的资料。感觉对于那些做网站采集程序的家伙们来说，QueryPath是不是又要让他们更加如鱼得水（抑或是无恶不作）了，LOL。</p>
<p>&nbsp;</p>
<p>使用过程中发现QueryPath库尚处于基本的开发状态，不少问题。但对于程序员来说，遇到问题读一下库的源代码，基本上就能搞定。下面列出两个常用问题的解决，与大家分享。</p>
<p>&nbsp;</p>
<p>1.当QueryPath查询到一个节点并操作完成后，它本身并不回到根节点，而是停留在节点上，不知道这样描述正确否，这样导致的结果是下一步的查询将很可能找不到数据。解决的方法是用top()函数回到根节点。如上面的例子可以直接这样用，用top回到根：</p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Php代码 &nbsp;</div>
</div>
<ol class="dp-c">
    <li><span><span class="vars">$html</span><span>-&gt;top()-&gt;find(</span><span class="string"><font color="#0000ff">'.myInput'</font></span><span>)-&gt;attr(</span><span class="string"><font color="#0000ff">'value'</font></span><span>,&nbsp;</span><span class="string"><font color="#0000ff">'hello&nbsp;world'</font></span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre style="display: none" class="php" title="QueryPath, php上的jQuery" pre_index="1" source_url="http://justcoding.iteye.com/blog/673179" codeable_type="Blog" codeable_id="673179" name="code">
$html-&gt;top()-&gt;find('.myInput')-&gt;attr('value', 'hello world');</pre>
<p>&nbsp;</p>
<p>支持的方法有top(), prev(), next(), child()，不用解释，很好理解。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>2.无法读取远程url，或不能识别非&quot;html&quot;的扩展名的html文件。QueryPath直接分析文件和url的扩展名，不为&quot;html&quot;的直接当做xml处理，寒一个。解决的办法是用url的传递参数在最后面伪装一个&quot;.html&quot;的参数，告诉QueryPath这是HTML文件。解决方法：</p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Php代码 &nbsp;</div>
</div>
<ol class="dp-c">
    <li><span><span class="vars">$qp</span><span>(</span><span class="string"><font color="#0000ff">'http://www.acwind.net/index.php?=.html'</font></span><span>);//伪装一个后缀名，搞定。&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre style="display: none" class="php" title="QueryPath, php上的jQuery" pre_index="2" source_url="http://justcoding.iteye.com/blog/673179" codeable_type="Blog" codeable_id="673179" name="code">
$qp('http://www.acwind.net/index.php?=.html');//伪装一个后缀名，搞定。</pre>
<p>&nbsp;</p>
<p>希望开发者能在将来的版本中改进，能自动识别文件类型那该多好。</p>
<p><strong><br />
</strong></p>
<p><strong>详解：</strong></p>
<p>&nbsp;</p>
<p>PHP 也曾在 Web 开发领域造成轰动。由于易于开发和以 Web 为中心的模型，PHP 使 Web 站点从小小的主页变成像 Yahoo! 这样强大的站点。但是，通过 PHP 来使用这三种技术 &mdash; 尤其是 XML &mdash; 有时候会比较复杂。在本文中，了解 QueryPath，这是一个 PHP 库，它在设计时考虑了两个目标：</p>
<ul>
    <li>简单性，使 HTML、XML 和 HTTP 变得容易使用</li>
    <li>健壮性，为使用这些技术提供丰富的工具</li>
</ul>
<p>本文探索如何构建 QueryPath 对象、遍历 XML 和 HTML、操纵 XML 和 HTML 以及使用 QueryPath 访问 Web 服务（使用 Twitter 作为示例服务）。</p>
<p>&nbsp;</p>
<p><strong><br />
</strong></p>
<p><span style="font-size: medium"><strong><a name="N100B7"><u><font size="3"><font color="#620091"><span class="atitle">剖析 QueryPath 链</span> </font></font></u></a></strong></span></p>
<p>&nbsp;</p>
<p>对于 QueryPath 的典型使用，有四个最重要的概念：</p>
<ul>
    <li>QueryPath 对象与一个 XML 或 HTML 文档相关联。</li>
    <li>QueryPath 可以查询文档，识别文档中的一组匹配项。</li>
    <li>QueryPath 可以操纵文档。可以添加新的部分，修改已有的部分，删除不想要的部分。</li>
    <li>QueryPath 方法可以链接在一起，在一个简洁的序列中执行很多操作。只需几行代码，就可以装载、解析、查询、修改和写入文档。</li>
</ul>
<p>清单 1 中的代码展示了所有这些要点。</p>
<p><br />
<a name="listing1"><u><font color="#620091"><strong>清单 1. 基本的 QueryPath 链</strong> </font></u></a></p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Php代码 &nbsp;</div>
</div>
<ol class="dp-c">
    <li><span><span>&lt;?php &nbsp;&nbsp;</span></span></li>
    <li><span class="keyword"><strong><font color="#7f0055">require</font></strong></span><span>&nbsp;</span><span class="string"><font color="#0000ff">'QueryPath/QueryPath.php'</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>qp(</span><span class="string"><font color="#0000ff">'sample.html'</font></span><span>)-&gt;find(</span><span class="string"><font color="#0000ff">'title'</font></span><span>)-&gt;text(</span><span class="string"><font color="#0000ff">'Hello&nbsp;World'</font></span><span>)-&gt;writeHTML(); &nbsp;&nbsp;</span></li>
    <li><span>?&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre style="display: none" class="php" title="QueryPath, php上的jQuery" pre_index="3" source_url="http://justcoding.iteye.com/blog/673179" codeable_type="Blog" codeable_id="673179" name="code">
&lt;?php
require 'QueryPath/QueryPath.php';
qp('sample.html')-&gt;find('title')-&gt;text('Hello World')-&gt;writeHTML();
?&gt;</pre>
<p>&nbsp; &nbsp;</p>
<p>以上例子需要一个库，即 <code>QueryPath/QueryPath.php</code> 。除非还要装载 QueryPath 扩展，否者只需包括这个库就可以使用 QueryPath。</p>
<p>
<table border="0" cellspacing="0" cellpadding="0" width="40%" align="right">
    <tbody>
        <tr>
            <td width="10"><img alt="" width="10" height="1" src="http://www.ibm.com/i/c.gif" /></td>
            <td>
            <table border="1" cellspacing="0" cellpadding="5" width="100%">
                <tbody>
                    <tr>
                        <td><a name="N100E6"><u><font color="#620091"><strong>PHP 对象语法</strong> </font></u></a><br />
                        具有面向过程编程背景的 PHP 开发人员可能不熟悉 PHP 的面向对象语法。一个对象可能有一些附属的函数。这些函数称作<em>方法（method）</em> 。可以通过<em>对象操作符</em> （-&gt;）调用对象的方法。</td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>例子中接下来一行代码是一个 QueryPath 链，它做以下事情。</p>
<ol>
    <li>创建一个新的 <code>QueryPath</code> 对象，该对象指向 sample.html 文档。当 <code>qp()</code> 运行时，它将创建一个新的 <code>QueryPath</code> 对象，后者随即装载和解析文档。</li>
    <li>使用 <code>find()</code> 方法，它使用 CSS 3 选择器 <code>title</code> 搜索整个文档，寻找所有 <code>&lt;title/&gt;</code> 元素。
    <p>在一个有效的 HTML 文档中，该搜索只能在文档的头部找到一个匹配的 <code>&lt;title/&gt;</code> 元素。</p>
    </li>
    <li>标题的文本值被设为 <code>Hello World</code> 。当执行到这里时，标题的子节点将被 CDATA（字符数据）字符串 <code>Hello World</code> 替换。任何已有的内容将被破坏。</li>
    <li>使用 <code>writeHTML()</code> 方法将整个文档写到标准输出中。</li>
</ol>
<p>以上例子实际上还可以缩短一点，因为 <code>qp()</code> 工厂函数带有一个 CSS 选择器作为可选的第二个参数。清单 2 显示了缩短后的版本。</p>
<p><br />
<a name="listing2"><u><font color="#620091"><strong>清单 2. 基本的 QueryPath 链缩短后的版本</strong> </font></u></a></p>
<p>&nbsp;</p>
<p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="code-outline">
            <div class="dp-highlighter">
            <div class="bar">
            <div class="tools">Php代码 <a title="复制代码" href="http://justcoding.iteye.com/blog/673179#"><img alt="复制代码" src="http://justcoding.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://justcoding.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" alt="" src="http://justcoding.iteye.com/images/spinner.gif" /></a></div>
            </div>
            <ol class="dp-c">
                <li><span><span>&lt;?php &nbsp;&nbsp;</span></span></li>
                <li><span class="keyword"><strong><font color="#7f0055">require</font></strong></span><span>&nbsp;</span><span class="string"><font color="#0000ff">'QueryPath/QueryPath.php'</font></span><span>; &nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;</span></li>
                <li><span>qp(</span><span class="string"><font color="#0000ff">'sample.html'</font></span><span>,&nbsp;</span><span class="string"><font color="#0000ff">'title'</font></span><span>)-&gt;text(</span><span class="string"><font color="#0000ff">'Hello&nbsp;World'</font></span><span>)-&gt;writeHTML(); &nbsp;&nbsp;</span></li>
                <li><span>?&gt;&nbsp;&nbsp;</span></li>
            </ol>
            </div>
            <pre style="display: none" class="php" title="QueryPath, php上的jQuery" pre_index="4" source_url="http://justcoding.iteye.com/blog/673179" codeable_type="Blog" codeable_id="673179" name="code">
&lt;?php
require 'QueryPath/QueryPath.php';

qp('sample.html', 'title')-&gt;text('Hello World')-&gt;writeHTML();
?&gt;</pre>
            &nbsp;</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>假设 <code>sample.html</code> 是一个最基本的 HTML 文档，以上代码（<a href="http://www.ibm.com/developerworks/cn/opensource/os-php-querypath/#listing1"><font color="#620091">清单 1</font></a> 或清单 2）的结果看上去将如清单 3 所示。加粗的行包含我们设置的标题。</p>
<p><br />
<a name="listing3"><u><font color="#620091"><strong>清单 3. 生成的 HTML 的例子</strong> </font></u></a></p>
<p>&nbsp;</p>
<p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="code-outline">
            <div class="dp-highlighter">
            <div class="bar">
            <div class="tools">Html代码 <a title="复制代码" href="http://justcoding.iteye.com/blog/673179#"><img alt="复制代码" src="http://justcoding.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://justcoding.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" alt="" src="http://justcoding.iteye.com/images/spinner.gif" /></a></div>
            </div>
            <ol class="dp-xml">
                <li><span><span>&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;&quot;-//W3C//DTD&nbsp;HTML&nbsp;4.01//EN&quot; &nbsp;&nbsp;</span></span></li>
                <li><span>&nbsp;&nbsp;&quot;http://www.w3.org/TR/html4/strict.dtd&quot;</span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></li>
                <li><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">html</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">lang</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">&quot;en&quot;</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></li>
                <li><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">head</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">title</span><span class="tag">&gt;</span></font></strong><span>Hello&nbsp;World</span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">title</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;</span></li>
                <li><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">head</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></li>
                <li><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></li>
                <li><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">body</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></li>
                <li><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">html</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></li>
            </ol>
            </div>
            <pre style="display: none" class="html" title="QueryPath, php上的jQuery" pre_index="5" source_url="http://justcoding.iteye.com/blog/673179" codeable_type="Blog" codeable_id="673179" name="code">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot;
  &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
	&lt;title&gt;Hello World&lt;/title&gt;

&lt;/head&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
            &nbsp;</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>这些简单的例子展示了 QueryPath 可以执行的一些常见的任务。接下来几个小节探索一些方法。然后，您将把这些构建块装配起来，创建一个简单的 Web 服务客户机。</p>
<p>&nbsp;</p>
<p><span style="font-size: medium"><strong><a name="N1015A"><u><font size="3"><font color="#620091"><span class="atitle"><code>qp()</code> 工厂函数</span> </font></font></u></a></strong></span></p>
<p>&nbsp;</p>
<p>QueryPath 库中最常用的函数是 <code>qp()</code> 工厂函数。实际上，它执行创建新的 QueryPath 对象的任务。它被用于传统的构造函数。</p>
<p>&nbsp;</p>
<p>如果您熟悉面向对象设计模式，那么可能会意识到 <code>qp()</code> 是工厂模式的一个变种。 QueryPath 不是用构造器方法定义一个工厂类，而是使用一个函数。这种方法除了可以节省键盘输入外（在链接方法时比较重要），还可以使 QueryPath 更贴近 jQuery，减少 jQuery 熟悉者的学习曲线。</p>
<p>&nbsp;</p>
<p>一个 <code>QueryPath</code> 对象与一个 XML 或 HTML 文档相关联。当构造 <code>QueryPath</code> 对象时，文档被绑定到该对象。<code>qp()</code> 函数带有 3 个参数，这 3 个参数都是可选的：</p>
<dl><dt><strong>一个文档</strong> </dt><dd>可以是一个文件名或 URL、一个 XML 或 HTML 字符串、一个 DOMDocument 或 DOMElement、一个 SimpleXMLElement 或者一个 DOMElement 数组。如果不为该参数提供任何值，QueryPath 将创建一个空白的 XML 文档，供后面进行操纵。</dd><dd><br />
</dd><dt><strong>一个 CSS3 选择器</strong> </dt><dd>如果提供了该参数，在装载文档时，QueryPath 将使用给定的选择器查询那个文档。</dd><dd><br />
</dd><dt><strong>一个关联的选项数组</strong> </dt><dd>为这个特定 QueryPath 实例提供一种传递一组复杂配置参数的方法。API 参考详细列出了这里可以传递的选项。</dd></dl>
<p>
<table border="0" cellspacing="0" cellpadding="0" width="40%" align="right">
    <tbody>
        <tr>
            <td width="10"><img alt="" width="10" height="1" src="http://www.ibm.com/i/c.gif" /></td>
            <td>
            <table border="1" cellspacing="0" cellpadding="5" width="100%">
                <tbody>
                    <tr>
                        <td><a name="N1019A"><u><font color="#620091"><strong>XML 还是 HTML？</strong> </font></u></a><br />
                        QueryPath 既可以处理 XML，也可以处理 HTML，但这两种格式有些区别。 QueryPath 试图自动检测所使用的格式，并作出相应的调整。XHTML（用 XML 实现的 HTML）被视作 XML。</td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><code>qp()</code> 支持将很多类型的数据作为第一个参数，从而方便构建 QueryPath 对象。QueryPath 可以以一个文件名或 URL 开始，然后装载一个文档。如果传递的是一个 XML 或 HTML 字符串，QueryPath 将解析该内容。当然，它可以接受另外两种常用的 XML 文档的对象表示：DOM 和 SimpleXML。清单 4 展示 <code>qp()</code> 函数如何解析包含 XML 的字符串。</p>
<p><br />
<a name="listing4"><u><font color="#620091"><strong>清单 4. 从 XML 字符串构建 QueryPath 对象</strong> </font></u></a></p>
<p>&nbsp;</p>
<p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="code-outline">
            <div class="dp-highlighter">
            <div class="bar">
            <div class="tools">Php代码 <a title="复制代码" href="http://justcoding.iteye.com/blog/673179#"><img alt="复制代码" src="http://justcoding.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://justcoding.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" alt="" src="http://justcoding.iteye.com/images/spinner.gif" /></a></div>
            </div>
            <ol class="dp-c">
                <li><span><span>&lt;?php &nbsp;&nbsp;</span></span></li>
                <li><span class="keyword"><strong><font color="#7f0055">require</font></strong></span><span>&nbsp;</span><span class="string"><font color="#0000ff">'QueryPath/QueryPath.php'</font></span><span>; &nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;</span></li>
                <li><span class="vars">$xml</span><span>&nbsp;=&nbsp;</span><span class="string"><font color="#0000ff">'&lt;?xml&nbsp;version=&quot;1.0&quot;?&gt;&lt;doc&gt;&lt;item/&gt;&lt;/doc&gt;'</font></span><span>; &nbsp;&nbsp;</span></li>
                <li><span class="vars">$qp</span><span>&nbsp;&nbsp;=&nbsp;qp(</span><span class="vars">$xml</span><span>); &nbsp;&nbsp;</span></li>
                <li><span>?&gt;&nbsp;&nbsp;</span></li>
            </ol>
            </div>
            <pre style="display: none" class="php" title="QueryPath, php上的jQuery" pre_index="6" source_url="http://justcoding.iteye.com/blog/673179" codeable_type="Blog" codeable_id="673179" name="code">
&lt;?php
require 'QueryPath/QueryPath.php';

$xml = '&lt;?xml version=&quot;1.0&quot;?&gt;&lt;doc&gt;&lt;item/&gt;&lt;/doc&gt;';
$qp  = qp($xml);
?&gt;</pre>
            &nbsp;</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>当清单 4 中的代码运行时， <code>$qp</code> 将引用一个 <code>QueryPath</code> 对象，该对象在内部指向 XML 解析后的表示。前面的例子传入的是一个文件名。如果 PHP 被配置为允许 HTTP/HTTPS 流包装器（在大多数 PHP V5 发行版中是标准配置），那么甚至可以装载远程 HTTP URL，如下所示。</p>
<p><br />
<a name="listing5"><u><font color="#620091"><strong>清单 5. 从 URL 构建 QueryPath 对象</strong> </font></u></a></p>
<p>&nbsp;</p>
<p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="code-outline">
            <div class="dp-highlighter">
            <div class="bar">
            <div class="tools">Php代码 <a title="复制代码" href="http://justcoding.iteye.com/blog/673179#"><img alt="复制代码" src="http://justcoding.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://justcoding.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" alt="" src="http://justcoding.iteye.com/images/spinner.gif" /></a></div>
            </div>
            <ol class="dp-c">
                <li><span><span>&lt;?php &nbsp;&nbsp;</span></span></li>
                <li><span class="keyword"><strong><font color="#7f0055">require</font></strong></span><span>&nbsp;</span><span class="string"><font color="#0000ff">'QueryPath/QueryPath.php'</font></span><span>; &nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;</span></li>
                <li><span class="vars">$qp</span><span>&nbsp;=&nbsp;qp(</span><span class="string"><font color="#0000ff">'http://example.com/file.xml'</font></span><span>); &nbsp;&nbsp;</span></li>
                <li><span>?&gt;&nbsp;&nbsp;</span></li>
            </ol>
            </div>
            <pre style="display: none" class="php" title="QueryPath, php上的jQuery" pre_index="7" source_url="http://justcoding.iteye.com/blog/673179" codeable_type="Blog" codeable_id="673179" name="code">
&lt;?php
require 'QueryPath/QueryPath.php';

$qp = qp('http://example.com/file.xml');
?&gt;</pre>
            &nbsp;</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>这样便可以使用 QueryPath 访问 Web 服务。（可以使用第 3 个参数 <code>qp()</code> 传递流上下文，以便对连接设置进行调整）。当创建新文档时，有一个添加样板 HTML 的快捷方式，如下所示。</p>
<p><br />
<a name="listing6"><u><font color="#620091"><strong>清单 6. 使用 <code>QueryPath::HTML_STUB</code> 常量</strong> </font></u></a></p>
<p>&nbsp;</p>
<p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="code-outline">
            <div class="dp-highlighter">
            <div class="bar">
            <div class="tools">Php代码 <a title="复制代码" href="http://justcoding.iteye.com/blog/673179#"><img alt="复制代码" src="http://justcoding.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://justcoding.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" alt="" src="http://justcoding.iteye.com/images/spinner.gif" /></a></div>
            </div>
            <ol class="dp-c">
                <li><span><span>&lt;?php &nbsp;&nbsp;</span></span></li>
                <li><span class="keyword"><strong><font color="#7f0055">require</font></strong></span><span>&nbsp;</span><span class="string"><font color="#0000ff">'QueryPath/QueryPath.php'</font></span><span>; &nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;</span></li>
                <li><span class="vars">$qp</span><span>&nbsp;=&nbsp;qp(QueryPath::HTML_STUB); &nbsp;&nbsp;</span></li>
                <li><span>?&gt;&nbsp;&nbsp;</span></li>
            </ol>
            </div>
            <pre style="display: none" class="php" title="QueryPath, php上的jQuery" pre_index="8" source_url="http://justcoding.iteye.com/blog/673179" codeable_type="Blog" codeable_id="673179" name="code">
&lt;?php
require 'QueryPath/QueryPath.php';

$qp = qp(QueryPath::HTML_STUB);
?&gt;</pre>
            &nbsp;</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p><code>QueryPath::HTML_STUB</code> 常量定义一个基本的 HTML 文档，如下所示。</p>
<p><br />
<a name="listing7"><u><font color="#620091"><strong>清单 7. <code>QueryPath::HTML_STUB</code> 文档</strong> </font></u></a></p>
<p>&nbsp;</p>
<p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="code-outline">
            <div class="dp-highlighter">
            <div class="bar">
            <div class="tools">Xml代码 <a title="复制代码" href="http://justcoding.iteye.com/blog/673179#"><img alt="复制代码" src="http://justcoding.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://justcoding.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" alt="" src="http://justcoding.iteye.com/images/spinner.gif" /></a></div>
            </div>
            <ol class="dp-xml">
                <li><span><strong><font color="#006699"><span class="tag">&lt;?</span><span class="tag-name">xml</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">version</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">&quot;1.0&quot;</font></span><span class="tag"><strong><font color="#006699">?&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li>
                <li><span>&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;&quot;-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Strict//EN&quot; &nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;</span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></li>
                <li><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">html</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">xmlns</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">&quot;http://www.w3.org/1999/xhtml&quot;</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></li>
                <li><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">head</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">meta</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">http-equiv</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">&quot;Content-Type&quot;</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">content</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">&quot;text/html;&nbsp;charset=utf-8&quot;</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">title</span><span class="tag">&gt;</span></font></strong><span>Untitled</span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">title</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></li>
                <li><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">head</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></li>
                <li><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">body</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></li>
                <li><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">html</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></li>
            </ol>
            </div>
            <pre style="display: none" class="xml" title="QueryPath, php上的jQuery" pre_index="9" source_url="http://justcoding.iteye.com/blog/673179" codeable_type="Blog" codeable_id="673179" name="code">
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;
  &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;/&gt;
	&lt;title&gt;Untitled&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;/body&gt;
&lt;/html&gt;</pre>
            &nbsp;</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>以这个框架文档为基础，可以更快地生成 HTML。</p>
<p>至此，您知道了如何创建新的指向文档的 QueryPath 对象，并且看到了一个简单的 CSS 选择器。下一小节讨论如何使用 QueryPath 遍历文档。</p>
<p>&nbsp;</p>
<p><span style="font-size: medium"><strong><a name="N101F9"><u><font size="3"><font color="#620091"><span class="atitle">遍历文档</span> </font></font></u></a></strong></span></p>
<p>&nbsp;</p>
<p>打开文档后，需要在文档中查找感兴趣的内容。QueryPath 的设计使得这一任务变得很容易。为了简化遍历需求，QueryPath 提供了一些用于遍历的方法。大多数方法使用 CSS3 选择器查找所需的节点。</p>
<p><br />
<a name="fig1"><u><font color="#620091"><strong>图 1. 重要的 QueryPath 遍历方法</strong> </font></u></a><br />
<u><font color="#620091"><img alt="重要的 QueryPath 遍历方法" width="308" height="221" src="http://www.ibm.com/developerworks/cn/opensource/os-php-querypath/QueryPathNav.gif" /></font></u></p>
<p>图 1 总结了常用的遍历函数。下面一一描述每个函数。虽然还有一些遍历函数没有提到，但这里覆盖了大多数常见的需求。</p>
<p>&nbsp;</p>
<p><a name="table1"><u><font color="#620091"><strong>表 1. 常见遍历方法</strong> </font></u></a></p>
<p>
<table class="data-table-2" border="0" cellspacing="0" summary="Traversal methods from
    QueryPath, together with descriptions and selector information" cellpadding="0">
    <tbody>
        <tr>
            <th scope="col">方法</th>
            <th scope="col">描述</th>
            <th scope="col">是否带 CSS 选择器</th>
        </tr>
        <tr>
            <td><code>find()</code></td>
            <td>选择与选择器匹配的任何元素（在当前选择的节点下）</td>
            <td>是</td>
        </tr>
        <tr>
            <td><code>xpath()</code></td>
            <td>选择与给定 XPath 查询匹配的元素</td>
            <td>否（使用 XPath 查询）</td>
        </tr>
        <tr>
            <td><code>top()</code></td>
            <td>选择文档元素（根元素）</td>
            <td>否</td>
        </tr>
        <tr>
            <td><code>parents()</code></td>
            <td>选择任何祖先元素</td>
            <td>是</td>
        </tr>
        <tr>
            <td><code>parent()</code></td>
            <td>选择直接父元素</td>
            <td>是</td>
        </tr>
        <tr>
            <td><code>siblings()</code></td>
            <td>选择所有同胞（sibling）元素（包括之前和之后的元素）</td>
            <td>是</td>
        </tr>
        <tr>
            <td><code>next()</code></td>
            <td>选择后一个同胞元素</td>
            <td>是</td>
        </tr>
        <tr>
            <td><code>nextAll()</code></td>
            <td>选择当前元素之后的所有同胞元素</td>
            <td>是</td>
        </tr>
        <tr>
            <td><code>prev()</code></td>
            <td>选择前一个同胞元素</td>
            <td>是</td>
        </tr>
        <tr>
            <td><code>prevAll()</code></td>
            <td>选择当前元素之前的所有同胞元素</td>
            <td>是</td>
        </tr>
        <tr>
            <td><code>children()</code></td>
            <td>选择当前元素的直接子元素</td>
            <td>是</td>
        </tr>
        <tr>
            <td><code>deepest()</code></td>
            <td>选择当前元素下最深的节点</td>
            <td>否</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>QueryPath 中的很多方法可以以查询作为参数，进一步指定应该选择什么项。如表 1 中第三列所示，几乎所有这些方法都带有一个作为可选参数的 CSS3 选择器。（<code>xpath()</code> 函数则带有一个 XPath 查询，而不是 CSS3 选择器）。只有 <code>top()</code> 和 <code>deepest()</code> 不使用查询作为参数。</p>
<p>可以通过另一个简单的例子了解如何进行遍历。假设有一个像下面这样的 XML 文档。</p>
<p><br />
<a name="listing8"><u><font color="#620091"><strong>清单 8. 一个简单的 XML 文档</strong> </font></u></a></p>
<p>&nbsp;</p>
<p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="code-outline">
            <div class="dp-highlighter">
            <div class="bar">
            <div class="tools">Xml代码 <a title="复制代码" href="http://justcoding.iteye.com/blog/673179#"><img alt="复制代码" src="http://justcoding.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://justcoding.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" alt="" src="http://justcoding.iteye.com/images/spinner.gif" /></a></div>
            </div>
            <ol class="dp-xml">
                <li><span><strong><font color="#006699"><span class="tag">&lt;?</span><span class="tag-name">xml</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">version</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">&quot;1.0&quot;</font></span><span class="tag"><strong><font color="#006699">?&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li>
                <li><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">root</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">child</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">id</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">&quot;one&quot;</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">child</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">id</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">&quot;two&quot;</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">child</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">id</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">&quot;three&quot;</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">ignore</span><span class="tag">/&gt;</span></font></strong><span>&nbsp;&nbsp;</span></li>
                <li><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">root</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
            </ol>
            </div>
            <pre style="display: none" class="xml" title="QueryPath, php上的jQuery" pre_index="10" source_url="http://justcoding.iteye.com/blog/673179" codeable_type="Blog" codeable_id="673179" name="code">
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;root&gt;
  &lt;child id=&quot;one&quot;/&gt;
  &lt;child id=&quot;two&quot;/&gt;
  &lt;child id=&quot;three&quot;/&gt;
  &lt;ignore/&gt;
&lt;/root&gt;            </pre>
            &nbsp;</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p><code>&lt;root/&gt;</code> 元素有 4 个子元素：其中有 3 个名为 <code>&lt;child/&gt;</code> ，还有一个名为 <code>&lt;ignore/&gt;</code> 。可以用一个 QueryPath 查询选择 <code>&lt;root/&gt;</code> 的所有 4 个子元素。</p>
<p><br />
<a name="listing9"><u><font color="#620091"><strong>清单 9. 选择所有子元素</strong> </font></u></a></p>
<p>&nbsp;</p>
<p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="code-outline">
            <div class="dp-highlighter">
            <div class="bar">
            <div class="tools">Php代码 <a title="复制代码" href="http://justcoding.iteye.com/blog/673179#"><img alt="复制代码" src="http://justcoding.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://justcoding.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" alt="" src="http://justcoding.iteye.com/images/spinner.gif" /></a></div>
            </div>
            <ol class="dp-c">
                <li><span><span>&lt;?php&nbsp; &nbsp;&nbsp;</span></span></li>
                <li><span class="keyword"><strong><font color="#7f0055">require</font></strong></span><span>&nbsp;</span><span class="string"><font color="#0000ff">'QueryPath/QueryPath.php'</font></span><span>; &nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;</span></li>
                <li><span class="vars">$xml</span><span>&nbsp;=&nbsp;'&lt;?xml&nbsp;version=</span><span class="string"><font color="#0000ff">&quot;1.0&quot;</font></span><span>?&gt; &nbsp;&nbsp;</span></li>
                <li><span>&lt;root&gt; &nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;&lt;child&nbsp;id=</span><span class="string"><font color="#0000ff">&quot;one&quot;</font></span><span>/&gt; &nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;&lt;child&nbsp;id=</span><span class="string"><font color="#0000ff">&quot;two&quot;</font></span><span>/&gt; &nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;&lt;child&nbsp;id=</span><span class="string"><font color="#0000ff">&quot;three&quot;</font></span><span>/&gt; &nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;&lt;ignore/&gt; &nbsp;&nbsp;</span></li>
                <li><span>&lt;/root&gt;'; &nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;</span></li>
                <li><span class="vars">$qp</span><span>&nbsp;=&nbsp;qp(</span><span class="vars">$xml</span><span>,&nbsp;</span><span class="string"><font color="#0000ff">'root'</font></span><span>)-&gt;children(); &nbsp;&nbsp;</span></li>
                <li><span>print&nbsp;</span><span class="vars">$qp</span><span>-&gt;size(); &nbsp;&nbsp;</span></li>
                <li><span>?&gt;&nbsp;&nbsp;</span></li>
            </ol>
            </div>
            <pre style="display: none" class="php" title="QueryPath, php上的jQuery" pre_index="11" source_url="http://justcoding.iteye.com/blog/673179" codeable_type="Blog" codeable_id="673179" name="code">
&lt;?php 
require 'QueryPath/QueryPath.php';

$xml = '&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;root&gt;
  &lt;child id=&quot;one&quot;/&gt;
  &lt;child id=&quot;two&quot;/&gt;
  &lt;child id=&quot;three&quot;/&gt;
  &lt;ignore/&gt;
&lt;/root&gt;';

$qp = qp($xml, 'root')-&gt;children();
print $qp-&gt;size();
?&gt;</pre>
            &nbsp;</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p><code>children()</code> 方法将选择 <code>&lt;root/&gt;</code> 元素的所有直接子元素。最后一行打印 <code>QueryPath</code> 对象中匹配项的数量，最终打印的结果为 <code>4</code> 。</p>
<p>假设只需选择 3 个 <code>&lt;child/&gt;</code> 元素，而不需要选择 <code>&lt;ignore/&gt;</code> 元素。 清单 10 显示了如何实现这一点。</p>
<p><br />
<a name="listing10"><u><font color="#620091"><strong>清单 10. 使用过滤器的查询</strong> </font></u></a></p>
<p>&nbsp;</p>
<p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="code-outline">
            <div class="dp-highlighter">
            <div class="bar">
            <div class="tools">Php代码 <a title="复制代码" href="http://justcoding.iteye.com/blog/673179#"><img alt="复制代码" src="http://justcoding.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://justcoding.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" alt="" src="http://justcoding.iteye.com/images/spinner.gif" /></a></div>
            </div>
            <ol class="dp-c">
                <li><span><span>&lt;?php&nbsp; &nbsp;&nbsp;</span></span></li>
                <li><span class="keyword"><strong><font color="#7f0055">require</font></strong></span><span>&nbsp;</span><span class="string"><font color="#0000ff">'QueryPath/QueryPath.php'</font></span><span>; &nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;</span></li>
                <li><span class="vars">$xml</span><span>&nbsp;=&nbsp;'&lt;?xml&nbsp;version=</span><span class="string"><font color="#0000ff">&quot;1.0&quot;</font></span><span>?&gt; &nbsp;&nbsp;</span></li>
                <li><span>&lt;root&gt; &nbsp;&nbsp;</span></li>
                <li><span>&lt;child&nbsp;id=</span><span class="string"><font color="#0000ff">&quot;one&quot;</font></span><span>/&gt; &nbsp;&nbsp;</span></li>
                <li><span>&lt;child&nbsp;id=</span><span class="string"><font color="#0000ff">&quot;two&quot;</font></span><span>/&gt; &nbsp;&nbsp;</span></li>
                <li><span>&lt;child&nbsp;id=</span><span class="string"><font color="#0000ff">&quot;three&quot;</font></span><span>/&gt; &nbsp;&nbsp;</span></li>
                <li><span>&lt;ignore/&gt; &nbsp;&nbsp;</span></li>
                <li><span>&lt;/root&gt;'; &nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;</span></li>
                <li><span class="vars">$qp</span><span>&nbsp;=&nbsp;qp(</span><span class="vars">$xml</span><span>,&nbsp;</span><span class="string"><font color="#0000ff">'root'</font></span><span>)-&gt;children(</span><span class="string"><font color="#0000ff">'child'</font></span><span>); &nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;</span></li>
                <li><span>print&nbsp;</span><span class="vars">$qp</span><span>-&gt;size(); &nbsp;&nbsp;</span></li>
                <li><span>?&gt;&nbsp;&nbsp;</span></li>
            </ol>
            </div>
            <pre style="display: none" class="php" title="QueryPath, php上的jQuery" pre_index="12" source_url="http://justcoding.iteye.com/blog/673179" codeable_type="Blog" codeable_id="673179" name="code">
&lt;?php 
require 'QueryPath/QueryPath.php';

$xml = '&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;root&gt;
&lt;child id=&quot;one&quot;/&gt;
&lt;child id=&quot;two&quot;/&gt;
&lt;child id=&quot;three&quot;/&gt;
&lt;ignore/&gt;
&lt;/root&gt;';

$qp = qp($xml, 'root')-&gt;children('child');

print $qp-&gt;size();
?&gt;</pre>
            &nbsp;</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>最后的 <code>print</code> 语句将打印 QueryPath 当前选择的项的数量。它将返回 <code>3</code> 。在内部，QueryPath 跟踪这 3 个元素。它们被存储为当前上下文。如果执行进一步的查询，那么查询将从这 3 个元素开始。如果试图附加数据，那么数据将被附加到这 3 个元素后。</p>
<p><a name="cssselectors"><u><font color="#620091"><span class="smalltitle">CSS 选择器</span> </font></u></a></p>
<p>
<table border="0" cellspacing="0" cellpadding="0" width="40%" align="right">
    <tbody>
        <tr>
            <td width="10"><u><font color="#620091"><img alt="" width="10" height="1" src="http://www.ibm.com/i/c.gif" /></font></u></td>
            <td>
            <table border="1" cellspacing="0" cellpadding="5" width="100%">
                <tbody>
                    <tr>
                        <td><a name="N10368"><u><font color="#620091"><strong>CSS 属性</strong> </font></u></a><br />
                        CSS3 选择器将一些属性视作专用属性。 <code>id</code> 和 <code>class</code> 属性都有专用的选择器语法。与其他 XML 技术不同，XML DTD 或模式不需要将这些属性指定为专用属性。这些属性仍是由 CSS3 选择器引擎处理。</td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>CSS 选择器是 CSS 语句的一部分，用于选择将应用某种样式的元素。CSS 选择器还可以在样式表上下文之外使用。QueryPath 使用选择器作为查询语言，并支持 CSS3 选择器 <a href="http://www.ibm.com/developerworks/cn/opensource/os-php-querypath/#resources"><font color="#620091">标准</font></a> 中描述的特性集。</p>
<p>CSS 选择器在 QueryPath 中扮演很重要的角色。您已经看到，有 10 个函数使用 CSS 选择器作为参数。到目前为止使用的选择器是简单的标记名查询。CSS3 选择器要比前面的例子强大得多。对 CSS3 选择器的详细描述超出了本文的范围，但表 2 提供了一些常见的选择器模式的例子。</p>
<p><br />
<a name="table2"><u><font color="#620091"><strong>表 2. 常见的 CSS3 选择器模式</strong> </font></u></a></p>
<p>
<table class="data-table-2" border="0" cellspacing="0" summary="Simple CSS3 selectors with
    descriptions and examples" cellpadding="0">
    <tbody>
        <tr>
            <th scope="col">选择器模式</th>
            <th scope="col">描述</th>
            <th scope="col">示例匹配项</th>
        </tr>
        <tr>
            <td><code>p</code></td>
            <td>找到标记名为 <code>&lt;p/&gt;</code> 的元素</td>
            <td>&lt;p&gt;</td>
        </tr>
        <tr>
            <td><code>.container</code></td>
            <td>找到 <code>class</code> 属性被设为 <code>container</code> 的元素</td>
            <td>&lt;div class=&quot;container&quot;/&gt;</td>
        </tr>
        <tr>
            <td><code>#menu</code></td>
            <td>找到 <code>id</code> 属性被设为 <code>menu</code> 的元素。基于 ID 的搜索以这种方式进行</td>
            <td>&lt;div id=&quot;menu&quot;/&gt;</td>
        </tr>
        <tr>
            <td><code>[type=&quot;inline&quot;]</code></td>
            <td>找到 <code>type</code> 属性的值为 <code>inline</code> 的元素</td>
            <td>&lt;code type=&quot;inline&quot;/&gt;</td>
        </tr>
        <tr>
            <td><code>tr &gt; th</code></td>
            <td>找到直接父元素为 <code>&lt;tr&gt;</code> 的 <code>&lt;th&gt;</code> 元素</td>
            <td>&lt;tr&gt;&lt;th/&gt;&lt;/tr&gt;</td>
        </tr>
        <tr>
            <td><code>table td</code></td>
            <td>找到祖先（例如父亲或祖父）中有 <code>&lt;table&gt;</code> 元素的 <code>&lt;td&gt;</code> 元素</td>
            <td>&lt;table&gt;&lt;tr&gt;&lt;td/&gt;&lt;/tr&gt;&lt;/table&gt;</td>
        </tr>
        <tr>
            <td><code>li:first</code></td>
            <td>获取第一个名为 <code>&lt;li/&gt;</code> 的元素。支持的伪类包括 <code>:last</code> 、 <code>:even</code> 和 <code>:odd</code></td>
            <td>&lt;li/&gt;</td>
        </tr>
        <tr>
            <td><code>RDF|seq</code></td>
            <td>找到 <code>&lt;RDF:seq&gt;</code> 元素。 QueryPath 包括用于 XML 名称空间的 CSS3 选择器。名称空间支持延伸到属性和元素</td>
            <td>&lt;RDF:seq&gt;</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>这些常见的选择器模式可以加以组合，形成复杂的选择器，例如</p>
<p>&nbsp;</p>
<p>
<table border="0" cellspacing="0" cellpadding="0" width="50%">
    <tbody>
        <tr>
            <td class="code-outline">
            <div class="dp-highlighter">
            <div class="bar">
            <div class="tools">Php代码 <a title="复制代码" href="http://justcoding.iteye.com/blog/673179#"><img alt="复制代码" src="http://justcoding.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://justcoding.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" alt="" src="http://justcoding.iteye.com/images/spinner.gif" /></a></div>
            </div>
            <ol class="dp-c">
                <li><span><span>div.content&nbsp;ul&gt;li:first&nbsp;&nbsp;</span></span></li>
            </ol>
            </div>
            <pre style="display: none" class="php" title="QueryPath, php上的jQuery" pre_index="13" source_url="http://justcoding.iteye.com/blog/673179" codeable_type="Blog" codeable_id="673179" name="code">
div.content ul&gt;li:first</pre>
            &nbsp;</td>
        </tr>
    </tbody>
</table>
</p>
<p><br />
。 这个选择器将搜索 class 为 <code>content</code> 的任何 <code>&lt;div/&gt;</code> 。在 <code>div</code> 中，它将搜索所有无序列表（<code>&lt;ul&gt;</code> ），返回每个列表的第一个列表项（<code>&lt;li&gt;</code> ）。</p>
<p>&nbsp;</p>
<p><span style="font-size: medium"><strong><a name="N1047A"><u><font size="3"><font color="#620091"><span class="smalltitle">迭代匹配项</span> </font></font></u></a></strong></span></p>
<p>&nbsp;</p>
<p>您了解了遍历文档的两个方面：QueryPath 提供的方法和 CSS3 选择器支持。第三个方面是迭代选择的项。</p>
<p>QueryPath 对象是<em>可遍历的（traversable）</em> 。在 PHP 中，这意味着对象可以当做迭代器。标准的 PHP 循环结构可以遍历 QueryPath 对象选择的元素。还记得吗，<a href="http://www.ibm.com/developerworks/cn/opensource/os-php-querypath/#listing10"><font color="#620091">清单 10</font></a> 中的例子是一个简单的查询，它从一个 XML 文档中检索 3 个元素。接下来的例子将以这个例子为基础。</p>
<p>如果要单独处理每个项，应该怎么办？很容易，因为 QueryPath 可以用作迭代器。清单 11 显示了一个例子。</p>
<p><br />
<a name="listing11"><u><font color="#620091"><strong>清单 11. 迭代选择的元素</strong> </font></u></a></p>
<p>&nbsp;</p>
<p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="code-outline">
            <div class="dp-highlighter">
            <div class="bar">
            <div class="tools">Php代码 <a title="复制代码" href="http://justcoding.iteye.com/blog/673179#"><img alt="复制代码" src="http://justcoding.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://justcoding.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" alt="" src="http://justcoding.iteye.com/images/spinner.gif" /></a></div>
            </div>
            <ol class="dp-c">
                <li><span><span>&lt;?php&nbsp; &nbsp;&nbsp;</span></span></li>
                <li><span class="keyword"><strong><font color="#7f0055">require</font></strong></span><span>&nbsp;</span><span class="string"><font color="#0000ff">'QueryPath/QueryPath.php'</font></span><span>; &nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;</span></li>
                <li><span class="vars">$xml</span><span>&nbsp;=&nbsp;'&lt;?xml&nbsp;version=</span><span class="string"><font color="#0000ff">&quot;1.0&quot;</font></span><span>?&gt; &nbsp;&nbsp;</span></li>
                <li><span>&lt;root&gt; &nbsp;&nbsp;</span></li>
                <li><span>&lt;child&nbsp;id=</span><span class="string"><font color="#0000ff">&quot;one&quot;</font></span><span>/&gt; &nbsp;&nbsp;</span></li>
                <li><span>&lt;child&nbsp;id=</span><span class="string"><font color="#0000ff">&quot;two&quot;</font></span><span>/&gt; &nbsp;&nbsp;</span></li>
                <li><span>&lt;child&nbsp;id=</span><span class="string"><font color="#0000ff">&quot;three&quot;</font></span><span>/&gt; &nbsp;&nbsp;</span></li>
                <li><span>&lt;ignore/&gt; &nbsp;&nbsp;</span></li>
                <li><span>&lt;/root&gt;'; &nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;</span></li>
                <li><span class="vars">$qp</span><span>&nbsp;=&nbsp;qp(</span><span class="vars">$xml</span><span>,&nbsp;</span><span class="string"><font color="#0000ff">'root'</font></span><span>)-&gt;children(</span><span class="string"><font color="#0000ff">'child'</font></span><span>); &nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;</span></li>
                <li><span class="keyword"><strong><font color="#7f0055">foreach</font></strong></span><span>&nbsp;(</span><span class="vars">$qp</span><span>&nbsp;</span><span class="keyword"><strong><font color="#7f0055">as</font></strong></span><span>&nbsp;</span><span class="vars">$child</span><span>)&nbsp;{ &nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;print&nbsp;</span><span class="vars">$child</span><span>-&gt;attr(</span><span class="string"><font color="#0000ff">'id'</font></span><span>)&nbsp;.&nbsp;PHP_EOL; &nbsp;&nbsp;</span></li>
                <li><span>} &nbsp;&nbsp;</span></li>
                <li><span>?&gt;&nbsp;&nbsp;</span></li>
            </ol>
            </div>
            <pre style="display: none" class="php" title="QueryPath, php上的jQuery" pre_index="14" source_url="http://justcoding.iteye.com/blog/673179" codeable_type="Blog" codeable_id="673179" name="code">
&lt;?php 
require 'QueryPath/QueryPath.php';

$xml = '&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;root&gt;
&lt;child id=&quot;one&quot;/&gt;
&lt;child id=&quot;two&quot;/&gt;
&lt;child id=&quot;three&quot;/&gt;
&lt;ignore/&gt;
&lt;/root&gt;';

$qp = qp($xml, 'root')-&gt;children('child');

foreach ($qp as $child) {
  print $child-&gt;attr('id') . PHP_EOL;
}
?&gt;</pre>
            &nbsp;</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>当 <code>foreach</code> 循环迭代时，它将每个匹配项赋给 <code>$child</code> 变量。但是，<code>$child</code> 不是真正的元素，它是指向当前元素的一个 <code>QueryPath</code> 对象。您可以任意使用所有常见的 QueryPath 方法。</p>
<p>&nbsp;</p>
<p>为了使 API 与 jQuery 的 API 类似， QueryPath 提供一些可同时作为 accessor 和 mutator &mdash; 或 getter 和 setter 的方法。取决于参数，同一个方法可以检索（access）数据，或者更改（mutate）数据。 <code>attr()</code> 函数就是一个例子。</p>
<p>&nbsp;</p>
<p><code>qp()-&gt;attr('name')</code> 检索 <code>name</code> 属性的值。 <code>qp()-&gt;attr('name', 'value')</code> 将 <code>name</code> 属性的值设为 <code>value</code> 。还有一些方法，包括 <code>text()</code> 、<code>html()</code> 和 <code>xml()</code> ，作为 accessor 和 mutator 同时执行两种任务。</p>
<p>&nbsp;</p>
<p>由于每个迭代的项包装在一个 QueryPath 对象中，所以可以通过 <code>$child</code> 任意使用所有标准的 QueryPath 方法。上面的例子使用了 <code>attr()</code> 函数，这是一个元素中的属性的 accessor 和 mutator。</p>
<p><code>attr()</code> 方法检索名为 <code>id</code> 的属性的值。下面显示以上代码的输出。</p>
<p><br />
<a name="listing12"><u><font color="#620091"><strong>清单 12. 清单 11 中迭代器例子的输出</strong> </font></u></a></p>
<p>&nbsp;</p>
<p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="code-outline">
            <div class="dp-highlighter">
            <div class="bar">
            <div class="tools">Php代码 <a title="复制代码" href="http://justcoding.iteye.com/blog/673179#"><img alt="复制代码" src="http://justcoding.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://justcoding.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" alt="" src="http://justcoding.iteye.com/images/spinner.gif" /></a></div>
            </div>
            <ol class="dp-c">
                <li><span><span>one &nbsp;&nbsp;</span></span></li>
                <li><span>two &nbsp;&nbsp;</span></li>
                <li><span>three&nbsp;&nbsp;</span></li>
            </ol>
            </div>
            <pre style="display: none" class="php" title="QueryPath, php上的jQuery" pre_index="15" source_url="http://justcoding.iteye.com/blog/673179" codeable_type="Blog" codeable_id="673179" name="code">
one
two
three</pre>
            &nbsp;</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>您已经了解了如何使用 QueryPath 方法、CSS3 选择器和迭代技术遍历文档。下一节探索如何用 QueryPath 修改文档。</p>
<p>&nbsp;</p>
<p><span style="font-size: medium"><strong><a name="N104F9"><u><font size="3"><font color="#620091"><span class="atitle">操纵文档</span> </font></font></u></a></strong></span></p>
<p>&nbsp;</p>
<p>除了使用 QueryPath 搜索文档外，还可以使用它添加、修改和移除文档中的数据。在清单 1 中可以大致了解 QueryPath 的功能。为了方便，下面再重复一遍。</p>
<p><br />
<a name="listing13"><u><font color="#620091"><strong>清单 13. 基本的 QueryPath 链</strong> </font></u></a></p>
<p>&nbsp;</p>
<p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="code-outline">
            <div class="dp-highlighter">
            <div class="bar">
            <div class="tools">Php代码 <a title="复制代码" href="http://justcoding.iteye.com/blog/673179#"><img alt="复制代码" src="http://justcoding.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://justcoding.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" alt="" src="http://justcoding.iteye.com/images/spinner.gif" /></a></div>
            </div>
            <ol class="dp-c">
                <li><span><span>&lt;?php &nbsp;&nbsp;</span></span></li>
                <li><span class="keyword"><strong><font color="#7f0055">require</font></strong></span><span>&nbsp;</span><span class="string"><font color="#0000ff">'QueryPath/QueryPath.php'</font></span><span>; &nbsp;&nbsp;</span></li>
                <li><span>&nbsp;&nbsp;</span></li>
                <li><span>qp(</span><span class="string"><font color="#0000ff">'sample.html'</font></span><span>)-&gt;find(</span><span class="string"><font color="#0000ff">'title'</font></span><span>)-&gt;text(</span><span class="string"><font color="#0000ff">'Hello&nbsp;World'</font></span><span>)-&gt;writeHTML(); &nbsp;&nbsp;</span></li>
                <li><span>?&gt;&nbsp;&nbsp;</span></li>
            </ol>
            </div>
            <pre style="display: none" class="php" title="QueryPath, php上的jQuery" pre_index="16" source_url="http://justcoding.iteye.com/blog/673179" codeable_type="Blog" codeable_id="673179" name="code">
&lt;?php
require 'QueryPath/QueryPath.php';

qp('sample.html')-&gt;find('title')-&gt;text('Hello World')-&gt;writeHTML();
?&gt;</pre>
            &nbsp;</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>在这个例子中，<code>text()</code> 函数用于修改 <code>&lt;title/&gt;</code> 元素的内容。QueryPath 提供了十几个用于更改文档的方法。图 2 展示一些常用的修改方法如何工作。这些方法都是添加或替换数据。绿色的标记表示当前被选中的元素。</p>
<p><br />
<a name="fig2"><u><font color="#620091"><strong>图 2. 用于添加或替换内容的 QueryPath 方法</strong> </font></u></a></p>
<p><br />
<u><font color="#620091"><img alt="用于添加或替换内容的 QueryPath 方法" width="254" height="150" src="http://www.ibm.com/developerworks/cn/opensource/os-php-querypath/QueryPathManip.gif" /></font></u></p>
<p>每个方法以字符串数据（通常是以 HTML 或 XML 片段的形式）作为参数，并将数据插入到文档中。随后立即可以访问和进一步操纵新插入的数据。</p>
<p>&nbsp;</p>
<p><a name="N1052B"><u><font color="#620091"><span class="smalltitle">使用 HTML 和 XML 片段</span> </font></u></a></p>
<p>实际]]></description>
  <category>生活点滴</category>
  <comments>http://www.lianglong.org/article/QueryPath.html#comment</comments>
  <guid>http://www.lianglong.org/article/QueryPath.html</guid>
  <pubDate>Tue, 06 Dec 2011 14:32:50 +0000</pubDate>
</item>
<item>
  <title>phpQuery—基于jQuery的PHP实现 </title>
  <link>http://www.lianglong.org/article/phpQuery.html</link>
  <description><![CDATA[<p style="padding-bottom: 0px; margin: 0px 0px 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; letter-spacing: normal; color: #000000" class="Apple-style-span"><span style="line-height: 24px; font-family: &quot;Microsoft Yahei&quot;, &quot;Lucida Grande&quot;, Helvetica, Arial, sans-serif; color: #333333; font-size: 14px" class="Apple-style-span">Query的选择器之强大是有目共睹的，<a style="color: #0066cc; text-decoration: none" target="_blank" href="http://code.google.com/p/phpquery/">phpQuery</a> 让php也拥有了这样的能力，它就相当于服务端的jQuery。</span><font size="3"> </font></span></p>
<p style="padding-bottom: 0px; margin: 0px 0px 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; letter-spacing: normal; color: #000000" class="Apple-style-span"><span style="line-height: 24px; font-family: &quot;Microsoft Yahei&quot;, &quot;Lucida Grande&quot;, Helvetica, Arial, sans-serif; color: #333333; font-size: 14px" class="Apple-style-span">先来看看官方简介：</span><font size="3"> </font></span></p>
<blockquote style="border-left: #cccccc 5px solid; padding-bottom: 10px; background-color: #eeeeee; margin: 15px 0px; padding-left: 10px; padding-right: 10px; padding-top: 10px">
<p style="padding-bottom: 0px; margin: 0px 0px 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; letter-spacing: normal; color: #000000" class="Apple-style-span"><span style="line-height: 24px; font-family: &quot;Microsoft Yahei&quot;, &quot;Lucida Grande&quot;, Helvetica, Arial, sans-serif; color: #333333; font-size: 14px" class="Apple-style-span">phpQuery is a server-side, chainable, CSS3 selector driven Document Object Model (DOM) API based on jQuery JavaScript Library.</span><font size="3"> </font></span></p>
<p style="padding-bottom: 0px; margin: 0px 0px 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; letter-spacing: normal; color: #000000" class="Apple-style-span"><span style="line-height: 24px; font-family: &quot;Microsoft Yahei&quot;, &quot;Lucida Grande&quot;, Helvetica, Arial, sans-serif; color: #333333; font-size: 14px" class="Apple-style-span">Library is written in PHP5 and provides additional Command Line Interface (CLI).</span><font size="3"> </font></span></p>
</blockquote>
<p>&nbsp;</p>
<h3 style="padding-bottom: 5px; background-color: #eeeeee; margin: 0px 0px 10px; padding-left: 5px; padding-right: 5px; font-size: 14px; border-top: #aaaaaa 1px solid; font-weight: bold; padding-top: 5px">存在的意义</h3>
<p style="padding-bottom: 0px; margin: 0px 0px 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px">我们有时需要抓取一个网页的内容，但只需要特定部分的信息，通常会用正则来解决，这当然没有问题。正则是一个通用解决方案，但特定情况下，往往有更简单快捷的方法。比如你想查询一个编程方面的问题，当然可以使用Google，但<a style="color: #0066cc; text-decoration: none" target="_blank" href="http://stackoverflow.com/">stackoverflow</a> 作为一个专业的编程问答社区，会提供给你更多，更靠谱的答案。</p>
<p style="padding-bottom: 0px; margin: 0px 0px 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px">对于html页面，不应该使用正则的原因主要有3个</p>
<p style="padding-bottom: 0px; margin: 0px 0px 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><strong>1、编写条件表达式比较麻烦</strong> <br />
尤其对于新手，看到一堆&rdquo;不知所云&rdquo;的字符评凑在一起，有种脑袋都要炸了的感觉。如果要分离的对象没有太明显的特征，正则写起来更是麻烦。</p>
<p style="padding-bottom: 0px; margin: 0px 0px 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><strong>2、效率不高</strong> <br />
对于php来说，正则应该是没有办法的办法，能通过字符串函数解决的，就不要劳烦正则了。用正则去处理一个30多k的文件，效率不敢保证。</p>
<p style="padding-bottom: 0px; margin: 0px 0px 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><strong>3、有phpQuery</strong> <br />
如果你使用过jQuery，想获取某个特定元素应该是轻而易举的事情，phpQuery让这成为了可能。</p>
<p>&nbsp;</p>
<h3 style="padding-bottom: 5px; background-color: #eeeeee; margin: 0px 0px 10px; padding-left: 5px; padding-right: 5px; font-size: 14px; border-top: #aaaaaa 1px solid; font-weight: bold; padding-top: 5px">浅析phpQuery</h3>
<p style="padding-bottom: 0px; margin: 0px 0px 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px">phpQuery是基于php5新添加的DOMDocument。而DOMDocument则是专门用来处理html/xml。它提供了强大xpath选择器及其他很多html/xml操作函数，使得处理html/xml起来非常方便。那为什么不直接使用呢？这个，去看一下<a style="color: #0066cc; text-decoration: none" target="_blank" href="http://www.php.net/manual/en/class.domdocument.php">官网的函数列表</a> 就知道了，如果对自己的记忆力很有信心，不妨一试。</p>
<p style="padding-bottom: 0px; margin: 0px 0px 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;</p>
<h3 style="padding-bottom: 5px; background-color: #eeeeee; margin: 0px 0px 10px; padding-left: 5px; padding-right: 5px; font-size: 14px; border-top: #aaaaaa 1px solid; font-weight: bold; padding-top: 5px">几个简单的例子</h3>
<p>&nbsp;</p>
<p><span style="text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; letter-spacing: normal; color: #000000" class="Apple-style-span"><span style="line-height: 24px; font-family: &quot;Microsoft Yahei&quot;, &quot;Lucida Grande&quot;, Helvetica, Arial, sans-serif; color: #333333; font-size: 14px" class="Apple-style-span">获取蓝色理想最热的招聘职位</span><font size="3"> </font></span></p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 &nbsp;</div>
</div>
<ol class="dp-j">
    <li><span><span>&lt;? &nbsp;&nbsp;</span></span></li>
    <li><span>include&nbsp;</span><span class="string"><font color="#0000ff">'phpQuery.php'</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>phpQuery::newDocumentFile(</span><span class="string"><font color="#0000ff">'http://job.blueidea.com'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>$companies&nbsp;=&nbsp;pq(</span><span class="string"><font color="#0000ff">'#hotcoms&nbsp;.coms'</font></span><span>)-&gt;find(</span><span class="string"><font color="#0000ff">'div'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>foreach($companies&nbsp;as&nbsp;$company) &nbsp;&nbsp;</span></li>
    <li><span>{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;echo&nbsp;pq($company)-&gt;find(</span><span class="string"><font color="#0000ff">'h3&nbsp;a'</font></span><span>)-&gt;text().</span><span class="string"><font color="#0000ff">&quot;&lt;br&gt;&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre style="display: none" class="java" title="phpQuery&mdash;基于jQuery的PHP实现" pre_index="0" source_url="http://justcoding.iteye.com/blog/660830" codeable_type="Blog" codeable_id="660830" name="code">
&lt;?
include 'phpQuery.php';
phpQuery::newDocumentFile('http://job.blueidea.com');
$companies = pq('#hotcoms .coms')-&gt;find('div');
foreach($companies as $company)
{
   echo pq($company)-&gt;find('h3 a')-&gt;text().&quot;&lt;br&gt;&quot;;
}</pre>
<p>&nbsp;</p>
<h3 style="padding-bottom: 5px; background-color: #eeeeee; margin: 0px 0px 10px; padding-left: 5px; padding-right: 5px; font-size: 14px; border-top: #aaaaaa 1px solid; font-weight: bold; padding-top: 5px"><span style="text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; letter-spacing: normal; color: #000000" class="Apple-style-span"><span style="line-height: 24px; font-family: &quot;Microsoft Yahei&quot;, &quot;Lucida Grande&quot;, Helvetica, Arial, sans-serif; color: #333333; font-size: 14px" class="Apple-style-span">小结</span><font size="3"> </font></span></h3>
<ul style="padding-bottom: 0px; margin: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px">
    <li style="padding-bottom: 0px; margin: 3px 30px 3px 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; letter-spacing: normal; color: #000000" class="Apple-style-span"><span style="line-height: 24px; font-family: &quot;Microsoft Yahei&quot;, &quot;Lucida Grande&quot;, Helvetica, Arial, sans-serif; color: #333333; font-size: 14px" class="Apple-style-span">pq()就像jQuery里的$()</span><font size="3"> </font></span></li>
    <li style="padding-bottom: 0px; margin: 3px 30px 3px 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; letter-spacing: normal; color: #000000" class="Apple-style-span"><span style="line-height: 24px; font-family: &quot;Microsoft Yahei&quot;, &quot;Lucida Grande&quot;, Helvetica, Arial, sans-serif; color: #333333; font-size: 14px" class="Apple-style-span">基本上jQuery的选择器都可以用在phpQuery上，只要把&rsquo;.'变成&rsquo;-&gt;&rsquo;</span><font size="3"> </font></span></li>
    <li style="padding-bottom: 0px; margin: 3px 30px 3px 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; letter-spacing: normal; color: #000000" class="Apple-style-span"><span style="line-height: 24px; font-family: &quot;Microsoft Yahei&quot;, &quot;Lucida Grande&quot;, Helvetica, Arial, sans-serif; color: #333333; font-size: 14px" class="Apple-style-span">phpQuery提供了好几种载入文件的方法，有的使用字符串，有的使用文件(包括url)，选择的时候要注意</span><font size="3"> </font></span></li>
    <li style="padding-bottom: 0px; margin: 3px 30px 3px 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; letter-spacing: normal; color: #000000" class="Apple-style-span"><span style="line-height: 24px; font-family: &quot;Microsoft Yahei&quot;, &quot;Lucida Grande&quot;, Helvetica, Arial, sans-serif; color: #333333; font-size: 14px" class="Apple-style-span">基本上<a style="color: #0066cc; text-decoration: none" target="_blank" href="http://code.google.com/p/phpquery/wiki/Basics">这一页</a> 就很能说明问题了</span><font size="3"> </font></span></li>
</ul>
<h3 style="padding-bottom: 5px; background-color: #eeeeee; margin: 0px 0px 10px; padding-left: 5px; padding-right: 5px; font-size: 14px; border-top: #aaaaaa 1px solid; font-weight: bold; padding-top: 5px"><span style="text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; letter-spacing: normal; color: #000000" class="Apple-style-span"><span style="line-height: 24px; font-family: &quot;Microsoft Yahei&quot;, &quot;Lucida Grande&quot;, Helvetica, Arial, sans-serif; color: #333333; font-size: 14px" class="Apple-style-span">其他解析器</span><font size="3"> </font></span></h3>
<p style="padding-bottom: 0px; margin: 0px 0px 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; letter-spacing: normal; color: #000000" class="Apple-style-span"><span style="line-height: 24px; font-family: &quot;Microsoft Yahei&quot;, &quot;Lucida Grande&quot;, Helvetica, Arial, sans-serif; color: #333333; font-size: 14px" class="Apple-style-span"><a style="color: #0066cc; text-decoration: none" target="_blank" href="http://simplehtmldom.sourceforge.net/">simplehtmldom</a> 也是个不错的html解析器，使用起来也挺方便，是基于正则的，所以没有phpQuery那么强大，如果没有太高的要求，也基本够用了。</span><font size="3"> </font></span></p>
<p style="padding-bottom: 0px; margin: 0px 0px 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; letter-spacing: normal; color: #000000" class="Apple-style-span"><span style="line-height: 24px; font-family: &quot;Microsoft Yahei&quot;, &quot;Lucida Grande&quot;, Helvetica, Arial, sans-serif; color: #333333; font-size: 14px" class="Apple-style-span"><a style="color: #0066cc; text-decoration: none" target="_blank" href="http://developer.yahoo.com/yql/">yql</a> 是yahoo出的一款使用类似SQL的语言，来获取相应的数据，也很强大，无须任何类库，可以直接调用，支持xpath，如果对SQL语句比较熟悉的话，可以考虑yql。</span></span></p>]]></description>
  <category>开发板块</category>
  <comments>http://www.lianglong.org/article/phpQuery.html#comment</comments>
  <guid>http://www.lianglong.org/article/phpQuery.html</guid>
  <pubDate>Tue, 06 Dec 2011 14:19:46 +0000</pubDate>
</item>
<item>
  <title>PclZip:强大的PHP压缩与解压缩zip类 </title>
  <link>http://www.lianglong.org/article/PclZip.html</link>
  <description><![CDATA[<p><strong>PclZip介绍</strong> <br />
PclZip library能够压缩与解压缩Zip格式的压缩档（WinZip、PKZIP）；且能对此类类档案进行处理，包括产生压缩档、列出压缩档的内容以及解压缩档案等等。由于能够在伺服器端进行压缩与解压缩的动作，所以相当方便使用。<br />
PclZip定义一个PclZip类别，其类别物件可视为一个ZIP档案，亦提供method来进行处理。</p>
<p>&nbsp;</p>
<p><strong>如何使用PclZip</strong></p>
<p><br />
1.基础<br />
所有的功能都由pclzip.lib.php这个档案提供，PclZip library可于其首页(www.phpconcept.net/pclzip/index.en.php)下载。所有的PKZIP档案其实就是一个 PclZip的类别物件。当产生一个PclZip档案（ie, PclZip类别物件），就会先产生一个压缩档，且档名已经指定，但此压缩档的内容尚未存在：</p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Php代码 &nbsp;</div>
</div>
<ol class="dp-c">
    <li><span><span>&lt;?PHP &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">require_once</font></strong></span><span>(</span><span class="string"><font color="#0000ff">'pclzip.lib.php'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$archive</span><span>&nbsp;=&nbsp;</span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span>&nbsp;PclZip(</span><span class="string"><font color="#0000ff">&quot;archive.zip&quot;</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>?&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre style="display: none" class="php" title="PclZip:强大的PHP压缩与解压缩zip类" pre_index="0" source_url="http://justcoding.iteye.com/blog/660812" codeable_type="Blog" codeable_id="660812" name="code">
&lt;?PHP
         require_once('pclzip.lib.php');
         $archive = new PclZip(&quot;archive.zip&quot;);
?&gt;</pre>
<p>&nbsp;</p>
<p>此物件提供了一些public method可用来处理此档案。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>2.参数<br />
每一个method有其各自可使用的参数，包括有必须与非必须的参数：</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Php代码 &nbsp;</div>
</div>
<ol class="dp-c">
    <li><span><span>&lt;?PHP &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">require_once</font></strong></span><span>(</span><span class="string"><font color="#0000ff">'pclzip.lib.php'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$archive</span><span>&nbsp;=&nbsp;</span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span>&nbsp;PclZip(</span><span class="string"><font color="#0000ff">'archive.zip'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$v_list</span><span>&nbsp;=&nbsp;</span><span class="vars">$archive</span><span>-&gt;add(</span><span class="string"><font color="#0000ff">'dev/file.txt'</font></span><span>, &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCLZIP_OPT_REMOVE_PATH,&nbsp;</span><span class="string"><font color="#0000ff">'dev'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>?&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre style="display: none" class="php" title="PclZip:强大的PHP压缩与解压缩zip类" pre_index="1" source_url="http://justcoding.iteye.com/blog/660812" codeable_type="Blog" codeable_id="660812" name="code">
&lt;?PHP
         require_once('pclzip.lib.php');
         $archive = new PclZip('archive.zip');
 
         $v_list = $archive-&gt;add('dev/file.txt',
                                    PCLZIP_OPT_REMOVE_PATH, 'dev');
?&gt;</pre>
<p>&nbsp;</p>
<p>上例中的&rsquo;dev/file.txt&rsquo;就是必须参数；&rsquo;PCLZIP_OPT_REMOVE_PATH&rsquo;则为非必须参数。当然有些method也可以只包含非必须的参数：</p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Php代码 &nbsp;</div>
</div>
<ol class="dp-c">
    <li><span><span>&lt;?PHP &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$list</span><span>&nbsp;=&nbsp;</span><span class="vars">$archive</span><span>-&gt;extract(PCLZIP_OPT_PATH,&nbsp;</span><span class="string"><font color="#0000ff">&quot;folder&quot;</font></span><span>, &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCLZIP_OPT_REMOVE_PATH,&nbsp;</span><span class="string"><font color="#0000ff">&quot;data&quot;</font></span><span>, &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCLZIP_CB_PRE_EXTRACT,&nbsp;</span><span class="string"><font color="#0000ff">&quot;callback_pre_extract&quot;</font></span><span>,); &nbsp;&nbsp;</span></li>
    <li><span>?&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre style="display: none" class="php" title="PclZip:强大的PHP压缩与解压缩zip类" pre_index="2" source_url="http://justcoding.iteye.com/blog/660812" codeable_type="Blog" codeable_id="660812" name="code">
&lt;?PHP
         $list = $archive-&gt;extract(PCLZIP_OPT_PATH, &quot;folder&quot;,
                          PCLZIP_OPT_REMOVE_PATH, &quot;data&quot;,
                                PCLZIP_CB_PRE_EXTRACT, &quot;callback_pre_extract&quot;,);
?&gt;</pre>
<p>&nbsp;</p>
<p>上例中原本压缩档内档案存放的路径为/data，不过你可以指定解压缩至/folder中。此外，在解压缩之前，会呼叫callback function（&rsquo;callback_pre_extract()&rsquo;），此function可让使用者在解压缩的过程中变更档案存放路径与档名，或是选择某些档案不解压缩。<br />
所有可用的非必要参数可参考网址(www.phpconcept.net/pclzip/man/en/index.php)。</p>
<p>&nbsp;</p>
<p>3.回传值<br />
每个method所回传的值可能会不同，将会在每个method中说明。不过大部分的method回传0、error或是阵列。</p>
<p>&nbsp;</p>
<p>4.错误处理<br />
从版本1.3之后，错误处理已经整合至PclZip类别中，当一个method回传错误码，可以得知一些额外的讯息以方便错误处理：<br />
* errorName()：回传错误名称<br />
* errorCode()：回传错误码<br />
* errorInfo()：回传错误的描述</p>
<p>接下来会举几个例子来说明如何使用PclZip。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>PclZip实例1、产生ZIP压缩档 </strong><br />
PclZip($zipname)：为PclZip constructor，$zipname为PKZIP压缩档的档名。<br />
主要是产生一个PclZip物件，即一个PKZIP压缩档；但此时，只有压缩档产生出来，并做一些检查（例如是否有开启zlib extension&hellip;等），除此之外，并没有做其他动作。</p>
<p>create($filelist, [optional arguments list])：将参数$filelist指定的档案或目录（包含当中所有档案与子目录）加入上述所产生的压缩档中。<br />
而非必要的参数则能够修改压缩档内的档案存放路径。<br />
此method可用的参数可以参考网志(www.phpconcept.net/pclzip/man/en/index.php)。</p>
<p>下面的示例说明如何产生PKZIP压缩档(档名为archive.zip)，并将file.txt、data/text.txt以及目录 folder(包含当中的档案与子目录)加入刚刚产生的archive.zip中：</p>
<p>&nbsp;</p>
<p><span style="text-indent: 0px; border-collapse: separate; font: small Simsun; white-space: normal; letter-spacing: normal; color: #000000" class="Apple-style-span"><font size="2"><span class="Apple-style-span">&nbsp;<br />
用法一：</span> </font></span></p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Php代码 &nbsp;</div>
</div>
<ol class="dp-c">
    <li><span><span>&lt;?&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span class="keyword"><strong><font color="#7f0055">include_once</font></strong></span><span>(</span><span class="string"><font color="#0000ff">'pclzip.lib.php'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="vars">$archive</span><span>&nbsp;=&nbsp;</span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span>&nbsp;PclZip(</span><span class="string"><font color="#0000ff">'archive.zip'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="vars">$v_list</span><span>&nbsp;=&nbsp;</span><span class="vars">$archive</span><span>-&gt;create(</span><span class="string"><font color="#0000ff">'file.txt,data/text.txt,folder'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="keyword"><strong><font color="#7f0055">if</font></strong></span><span>&nbsp;(</span><span class="vars">$v_list</span><span>&nbsp;==&nbsp;0)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="keyword"><strong><font color="#7f0055">die</font></strong></span><span>(</span><span class="string"><font color="#0000ff">&quot;Error&nbsp;:&nbsp;&quot;</font></span><span>.</span><span class="vars">$archive</span><span>-&gt;errorInfo(true)); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>?&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre style="display: none" class="php" title="PclZip:强大的PHP压缩与解压缩zip类" pre_index="3" source_url="http://justcoding.iteye.com/blog/660812" codeable_type="Blog" codeable_id="660812" name="code">
&lt;? 
include_once('pclzip.lib.php');
 $archive = new PclZip('archive.zip');
 $v_list = $archive-&gt;create('file.txt,data/text.txt,folder');
 if ($v_list == 0) {
 die(&quot;Error : &quot;.$archive-&gt;errorInfo(true));
 }
?&gt;</pre>
<p>&nbsp;</p>
<p>用法二：</p>
<p>&nbsp;</p>
<p>下面的示例说明基本上与上例一样产生archive.zip，但在将file.txt与text.txt压缩于其中时，将路径由data/改为 install/ ；因此，在archive.zip中这两个档案的路径会是install/file.txt与install/text.txt</p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Php代码 &nbsp;</div>
</div>
<ol class="dp-c">
    <li><span><span>&lt;?&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span class="keyword"><strong><font color="#7f0055">include_once</font></strong></span><span>(</span><span class="string"><font color="#0000ff">'pclzip.lib.php'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="vars">$archive</span><span>&nbsp;=&nbsp;</span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span>&nbsp;PclZip(</span><span class="string"><font color="#0000ff">'archive.zip'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="vars">$v_list</span><span>&nbsp;=&nbsp;</span><span class="vars">$archive</span><span>-&gt;create(</span><span class="string"><font color="#0000ff">'data/file.txt,data/text.txt'</font></span><span>, &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;PCLZIP_OPT_REMOVE_PATH,&nbsp;</span><span class="string"><font color="#0000ff">'data'</font></span><span>, &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;PCLZIP_OPT_ADD_PATH,&nbsp;</span><span class="string"><font color="#0000ff">'install'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="keyword"><strong><font color="#7f0055">if</font></strong></span><span>&nbsp;(</span><span class="vars">$v_list</span><span>&nbsp;==&nbsp;0)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="keyword"><strong><font color="#7f0055">die</font></strong></span><span>(</span><span class="string"><font color="#0000ff">&quot;Error&nbsp;:&nbsp;&quot;</font></span><span>.</span><span class="vars">$archive</span><span>-&gt;errorInfo(true)); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>?&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre style="display: none" class="php" title="PclZip:强大的PHP压缩与解压缩zip类" pre_index="4" source_url="http://justcoding.iteye.com/blog/660812" codeable_type="Blog" codeable_id="660812" name="code">
&lt;? 
include_once('pclzip.lib.php');
 $archive = new PclZip('archive.zip');
 $v_list = $archive-&gt;create('data/file.txt,data/text.txt',
 PCLZIP_OPT_REMOVE_PATH, 'data',
 PCLZIP_OPT_ADD_PATH, 'install');
 if ($v_list == 0) {
 die(&quot;Error : &quot;.$archive-&gt;errorInfo(true));
 }
?&gt;</pre>
<p>&nbsp;</p>
<p><strong>PclZip实例2、列出压缩档内容 </strong></p>
<p>listContent( ) ：列出压缩档中的内容，包括档案的属性与目录：</p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Php代码 &nbsp;</div>
</div>
<ol class="dp-c">
    <li><span><span>&lt;?PHP &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">include_once</font></strong></span><span>(</span><span class="string"><font color="#0000ff">'pclzip.lib.php'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$zip</span><span>&nbsp;=&nbsp;</span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span>&nbsp;PclZip(</span><span class="string"><font color="#0000ff">&quot;test.zip&quot;</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">if</font></strong></span><span>&nbsp;((</span><span class="vars">$list</span><span>&nbsp;=&nbsp;</span><span class="vars">$zip</span><span>-&gt;listContent())&nbsp;==&nbsp;0)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">die</font></strong></span><span>(</span><span class="string"><font color="#0000ff">&quot;Error&nbsp;:&nbsp;&quot;</font></span><span>.</span><span class="vars">$zip</span><span>-&gt;errorInfo(true)); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">for</font></strong></span><span>&nbsp;(</span><span class="vars">$i</span><span>=0;&nbsp;</span><span class="vars">$i</span><span>&lt;sizeof&nbsp;(</span><span class="vars">$list</span><span>);&nbsp;</span><span class="vars">$i</span><span>++)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">for</font></strong></span><span>(reset(</span><span class="vars">$list</span><span>[</span><span class="vars">$i</span><span>]);&nbsp;</span><span class="vars">$key</span><span>&nbsp;=&nbsp;key(</span><span class="vars">$list</span><span>[</span><span class="vars">$i</span><span>]);&nbsp;next(</span><span class="vars">$list</span><span>[</span><span class="vars">$i</span><span>]))&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="func">echo</span><span>&nbsp;</span><span class="string"><font color="#0000ff">&quot;File&nbsp;$i&nbsp;/&nbsp;[$key]&nbsp;=&nbsp;&quot;</font></span><span>.</span><span class="vars">$list</span><span>[</span><span class="vars">$i</span><span>][</span><span class="vars">$key</span><span>].</span><span class="string"><font color="#0000ff">&quot;&lt;br&gt;&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="func">echo</span><span>&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;br&nbsp;/&gt;&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>?&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre style="display: none" class="php" title="PclZip:强大的PHP压缩与解压缩zip类" pre_index="5" source_url="http://justcoding.iteye.com/blog/660812" codeable_type="Blog" codeable_id="660812" name="code">
&lt;?PHP
        include_once('pclzip.lib.php');
        $zip = new PclZip(&quot;test.zip&quot;);
 
        if (($list = $zip-&gt;listContent()) == 0) {
        die(&quot;Error : &quot;.$zip-&gt;errorInfo(true));
        }
 
        for ($i=0; $i&lt;sizeof ($list); $i++) {
            for(reset($list[$i]); $key = key($list[$i]); next($list[$i])) {
                echo &quot;File $i / [$key] = &quot;.$list[$i][$key].&quot;&lt;br&gt;&quot;;
            }
            echo &quot;&lt;br /&gt;&quot;;
        }
?&gt;</pre>
<p>&nbsp;</p>
<p>上例将会回传结果：<br />
File 0 / [filename] = data/file1.txt<br />
File 0 / [stored_filename] = data/file1.txt<br />
File 0 / [size] = 53<br />
File 0 / [compressed_size] = 36<br />
File 0 / [mtime] = 1010440428<br />
File 0 / [comment] =<br />
File 0 / [folder] = 0<br />
File 0 / [index] = 0<br />
File 0 / [status] = ok</p>
<p>File 1 / [filename] = data/file2.txt<br />
File 1 / [stored_filename] = data/file2.txt<br />
File 1 / [size] = 54<br />
File 1 / [compressed_size] = 53<br />
File 1 / [mtime] = 1011197724<br />
File 1 / [comment] =<br />
File 1 / [folder] = 0<br />
File 1 / [index] = 1<br />
File 1 / [status] = ok</p>
<p>&nbsp;</p>
<p><strong>PclZip实例3、解压缩档案</strong> <br />
extract([options list]) ：解压缩PKZIP中的档案或目录。<br />
[options list]可用的参数可参考网址(www.phpconcept.net/pclzip/man/en/index.php)。这些参数能让使用者在解压缩的时候有更多的选项，譬如指定变更解压缩档案的路径、指定只解压缩某些档案或不解压缩某些档案或者是将档案解压缩成字串输出(可用于readme档)。</p>
<p>&nbsp;</p>
<p>下例是一个简单的解压缩档案示例，将压缩档archive.zip内的档案解压缩至目前的目录：</p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Php代码 &nbsp;</div>
</div>
<ol class="dp-c">
    <li><span><span>&lt;?PHP &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">require_once</font></strong></span><span>(</span><span class="string"><font color="#0000ff">'pclzip.lib.php'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$archive</span><span>&nbsp;=&nbsp;</span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span>&nbsp;PclZip(</span><span class="string"><font color="#0000ff">'archive.zip'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">if</font></strong></span><span>&nbsp;(</span><span class="vars">$archive</span><span>-&gt;extract()&nbsp;==&nbsp;0)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">die</font></strong></span><span>(</span><span class="string"><font color="#0000ff">&quot;Error&nbsp;:&nbsp;&quot;</font></span><span>.</span><span class="vars">$archive</span><span>-&gt;errorInfo(true)); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>?&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre style="display: none" class="php" title="PclZip:强大的PHP压缩与解压缩zip类" pre_index="6" source_url="http://justcoding.iteye.com/blog/660812" codeable_type="Blog" codeable_id="660812" name="code">
&lt;?PHP
        require_once('pclzip.lib.php');
        $archive = new PclZip('archive.zip');
 
 
        if ($archive-&gt;extract() == 0) {
            die(&quot;Error : &quot;.$archive-&gt;errorInfo(true));
        }
?&gt;</pre>
<p>&nbsp;</p>
<p>下例是进阶的解压缩档案使用，archive.zip中所有档案都解压缩于data/中，而特别指明在install/release中的所有档案也直接丢于data/中，而非data/install/ release：</p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Php代码 &nbsp;</div>
</div>
<ol class="dp-c">
    <li><span><span>&lt;?PHP &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">include</font></strong></span><span>(</span><span class="string"><font color="#0000ff">'pclzip.lib.php'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$archive</span><span>&nbsp;=&nbsp;</span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span>&nbsp;PclZip(</span><span class="string"><font color="#0000ff">'archive.zip'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">if</font></strong></span><span>&nbsp;(</span><span class="vars">$archive</span><span>-&gt;extract(PCLZIP_OPT_PATH,&nbsp;</span><span class="string"><font color="#0000ff">'data'</font></span><span>, &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCLZIP_OPT_REMOVE_PATH,&nbsp;</span><span class="string"><font color="#0000ff">'install/release'</font></span><span>)&nbsp;==&nbsp;0)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">die</font></strong></span><span>(</span><span class="string"><font color="#0000ff">&quot;Error&nbsp;:&nbsp;&quot;</font></span><span>.</span><span class="vars">$archive</span><span>-&gt;errorInfo(true)); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>?&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre style="display: none" class="php" title="PclZip:强大的PHP压缩与解压缩zip类" pre_index="7" source_url="http://justcoding.iteye.com/blog/660812" codeable_type="Blog" codeable_id="660812" name="code">
&lt;?PHP
        include('pclzip.lib.php');
        $archive = new PclZip('archive.zip');
        if ($archive-&gt;extract(PCLZIP_OPT_PATH, 'data',
                  PCLZIP_OPT_REMOVE_PATH, 'install/release') == 0) {
                                die(&quot;Error : &quot;.$archive-&gt;errorInfo(true));
        }
?&gt;</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>看见create方法的参数没有，再看看方法原型你就知道如何做了。至少我还没有这样用过。</p>
<p>相关文档：<br />
PclZip官方地址 <span>：http://www.phpconcept.net/pclzip/index.php </span><br />
PclZip手册地址 <span>：http://www.phpconcept.net/pclzip/man/en/index.php </span><br />
PEAR类创建 ZIP档案文件 <span>：http://www.ccvita.com/10.html </span><br />
PclZip简介与使用 <span>：http://www.ccvita.com/59.html </span><br />
PclZip:强大的PHP压缩与解压缩zip类 <span>：http://www.ccvita.com/330.html </span></p>]]></description>
  <category>开发板块</category>
  <comments>http://www.lianglong.org/article/PclZip.html#comment</comments>
  <guid>http://www.lianglong.org/article/PclZip.html</guid>
  <pubDate>Tue, 06 Dec 2011 14:17:03 +0000</pubDate>
</item>
<item>
  <title>PHP RSS/Feed 生成类库(支持RSS 1.0/2.0和ATOM) </title>
  <link>http://www.lianglong.org/article/213.html</link>
  <description><![CDATA[<div id="blog_content" class="blog_content">
<p>通用PHP RSS/Feed 生成类库(支持RSS 1.0/2.0和ATOM)<br />
PHP Universal Feed Generator (supports RSS 1.0, RSS 2.0 and ATOM)</p>
<p>下载 : <a title="通用PHP RSS/Feed 类库(支持RSS 1.0/2.0和ATOM)" href="http://www.21andy.com/blog/download/FeedWriter.zip"><font color="#620091">FeedWriter</font></a></p>
<p>&nbsp;</p>
<p><strong>可生成的RSS版本:</strong></p>
<ul>
    <li><strong>RSS 1.0</strong> (which officially obsoleted RSS 0.90)</li>
    <li><strong>RSS 2.0</strong> (which officially obsoleted RSS 0.91, 0.92, 0.93 and 0.94)</li>
    <li><strong>ATOM 1.0</strong></li>
</ul>
<p><strong>功能:</strong></p>
<ul>
    <li>可生成RSS 1.0, RSS 2.0 和ATOM 1.0 feeds</li>
    <li>所有生成的Feed可经过验证 <a rel="nofollow" target="_blank" href="http://feedvalidator.org/"><font color="#620091">feed validator</font></a> .</li>
    <li>支持所有Feed属性.</li>
    <li>容易的设置channel 和 feed 条目</li>
    <li>为不同的版本使用命名空间.</li>
    <li>自动转换日期格式.</li>
    <li>为ATOM feeds生成 UUID (通用唯一标识符 Universally Unique Identifier).</li>
    <li>支持子标签和子标签属性. (如: image 和 encloser tags)</li>
    <li>完全的 PHP5面向对像构造 class structure.</li>
    <li>为需要的标签CDATA 编码.</li>
    <li>使用差不多的代码生成所有版本的feed</li>
</ul>
<p><strong>使用范例：</strong></p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Php代码 &nbsp;</div>
</div>
<ol class="dp-c">
    <li><span><span>&lt;?php &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span><span class="comment"><font color="#008200">//&nbsp;This&nbsp;is&nbsp;a&nbsp;minimum&nbsp;example&nbsp;of&nbsp;using&nbsp;the&nbsp;class </font></span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">include</font></strong></span><span>(</span><span class="string"><font color="#0000ff">&quot;FeedWriter.php&quot;</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span><span class="comment"><font color="#008200">//Creating&nbsp;an&nbsp;instance&nbsp;of&nbsp;FeedWriter&nbsp;class. </font></span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span><span class="vars">$TestFeed</span><span>&nbsp;=&nbsp;</span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span>&nbsp;FeedWriter(RSS2); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span><span class="comment"><font color="#008200">//Setting&nbsp;the&nbsp;channel&nbsp;elements </font></span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span><span class="comment"><font color="#008200">//Use&nbsp;wrapper&nbsp;functions&nbsp;for&nbsp;common&nbsp;channel&nbsp;elements </font></span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span><span class="vars">$TestFeed</span><span>-&gt;setTitle(</span><span class="string"><font color="#0000ff">'Testing&nbsp;&amp;&nbsp;Checking&nbsp;the&nbsp;RSS&nbsp;writer&nbsp;class'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span><span class="vars">$TestFeed</span><span>-&gt;setLink(</span><span class="string"><font color="#0000ff">'http://www.ajaxray.com/projects/rss'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span><span class="vars">$TestFeed</span><span>-&gt;setDescription(</span><span class="string"><font color="#0000ff">'This&nbsp;is&nbsp;test&nbsp;of&nbsp;creating&nbsp;a&nbsp;RSS&nbsp;2.0&nbsp;feed&nbsp;Universal&nbsp;Feed&nbsp;Writer'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span><span class="comment"><font color="#008200">//Image&nbsp;title&nbsp;and&nbsp;link&nbsp;must&nbsp;match&nbsp;with&nbsp;the&nbsp;'title'&nbsp;and&nbsp;'link'&nbsp;channel&nbsp;elements&nbsp;for&nbsp;valid&nbsp;RSS&nbsp;2.0 </font></span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span><span class="vars">$TestFeed</span><span>-&gt;setImage(</span><span class="string"><font color="#0000ff">'Testing&nbsp;the&nbsp;RSS&nbsp;writer&nbsp;class'</font></span><span>,</span><span class="string"><font color="#0000ff">'http://www.ajaxray.com/projects/rss'</font></span><span>,</span><span class="string"><font color="#0000ff">'http://www.rightbrainsolution.com/images/logo.gif'</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment"><font color="#008200">//Detriving&nbsp;informations&nbsp;from&nbsp;database&nbsp;addin&nbsp;feeds </font></span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$db</span><span>-&gt;query(</span><span class="vars">$query</span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$result</span><span>&nbsp;=&nbsp;</span><span class="vars">$db</span><span>-&gt;result; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">while</font></strong></span><span>(</span><span class="vars">$row</span><span>&nbsp;=&nbsp;mysql_fetch_array(</span><span class="vars">$result</span><span>,&nbsp;MYSQL_ASSOC)) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment"><font color="#008200">//Create&nbsp;an&nbsp;empty&nbsp;FeedItem </font></span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$newItem</span><span>&nbsp;=&nbsp;</span><span class="vars">$TestFeed</span><span>-&gt;createNewItem(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment"><font color="#008200">//Add&nbsp;elements&nbsp;to&nbsp;the&nbsp;feed&nbsp;item&nbsp;&nbsp;&nbsp; </font></span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$newItem</span><span>-&gt;setTitle(</span><span class="vars">$row</span><span>[</span><span class="string"><font color="#0000ff">'title'</font></span><span>]); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$newItem</span><span>-&gt;setLink(</span><span class="vars">$row</span><span>[</span><span class="string"><font color="#0000ff">'link'</font></span><span>]); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$newItem</span><span>-&gt;setDate(</span><span class="vars">$row</span><span>[</span><span class="string"><font color="#0000ff">'create_date'</font></span><span>]); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$newItem</span><span>-&gt;setDescription(</span><span class="vars">$row</span><span>[</span><span class="string"><font color="#0000ff">'description'</font></span><span>]); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment"><font color="#008200">//Now&nbsp;add&nbsp;the&nbsp;feed&nbsp;item </font></span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$TestFeed</span><span>-&gt;addItem(</span><span class="vars">$newItem</span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span><span class="comment"><font color="#008200">//OK.&nbsp;Everything&nbsp;is&nbsp;done.&nbsp;Now&nbsp;genarate&nbsp;the&nbsp;feed. </font></span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span><span class="vars">$TestFeed</span><span>-&gt;genarateFeed(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>?&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre style="display: none" class="php" title="PHP RSS/Feed 生成类库(支持RSS 1.0/2.0和ATOM)" pre_index="0" source_url="http://justcoding.iteye.com/blog/655603" codeable_type="Blog" codeable_id="655603" name="code">
&lt;?php
  // This is a minimum example of using the class
  include(&quot;FeedWriter.php&quot;);
 
  //Creating an instance of FeedWriter class.
  $TestFeed = new FeedWriter(RSS2);
 
  //Setting the channel elements
  //Use wrapper functions for common channel elements
  $TestFeed-&gt;setTitle('Testing &amp; Checking the RSS writer class');
  $TestFeed-&gt;setLink('http://www.ajaxray.com/projects/rss');
  $TestFeed-&gt;setDescription('This is test of creating a RSS 2.0 feed Universal Feed Writer');
 
  //Image title and link must match with the 'title' and 'link' channel elements for valid RSS 2.0
  $TestFeed-&gt;setImage('Testing the RSS writer class','http://www.ajaxray.com/projects/rss','http://www.rightbrainsolution.com/images/logo.gif');
 
    //Detriving informations from database addin feeds
    $db-&gt;query($query);
    $result = $db-&gt;result;
 
    while($row = mysql_fetch_array($result, MYSQL_ASSOC))
    {
        //Create an empty FeedItem
        $newItem = $TestFeed-&gt;createNewItem();
        
        //Add elements to the feed item   
        $newItem-&gt;setTitle($row['title']);
        $newItem-&gt;setLink($row['link']);
        $newItem-&gt;setDate($row['create_date']);
        $newItem-&gt;setDescription($row['description']);
        
        //Now add the feed item
        $TestFeed-&gt;addItem($newItem);
    }
 
  //OK. Everything is done. Now genarate the feed.
  $TestFeed-&gt;genarateFeed();
 
?&gt;</pre>
&nbsp;
<p><strong>补充：<br />
另一个生成RSS 2.0的PHP Class&nbsp;&nbsp;&nbsp; </strong>下载: <a href="http://www.21andy.com/blog/wp-content/plugins/coolcode/coolcode.php?p=1575&amp;download=class_rss_writer.php"><font color="#620091">class_rss_writer.php</font></a></p>
<p>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Php代码 &nbsp;</div>
</div>
<ol class="dp-c">
    <li><span><span>&lt;?php &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span class="comment"><font color="#008200">/** </font></span>&nbsp;</li>
    <li><span><span class="comment"><font color="#008200">&nbsp;*&nbsp;使用范例： </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp;*&nbsp;============================================================== </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp;&nbsp;&nbsp;&nbsp;$feed&nbsp;=&nbsp;new&nbsp;RSS(); </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp;&nbsp;&nbsp;&nbsp;$feed-&gt;title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&quot;RSS&nbsp;Feed&nbsp;Title&quot;; </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp;&nbsp;&nbsp;&nbsp;$feed-&gt;link&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&quot;http://www.newyork.com/&quot;; </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp;&nbsp;&nbsp;&nbsp;$feed-&gt;description&nbsp;=&nbsp;&quot;Recent&nbsp;articles&nbsp;on&nbsp;newyork.com.&quot;; </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp; </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp;&nbsp;&nbsp;&nbsp;$db-&gt;query($query); </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp;&nbsp;&nbsp;&nbsp;$result&nbsp;=&nbsp;$db-&gt;result; </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp;&nbsp;&nbsp;&nbsp;while($row&nbsp;=&nbsp;mysql_fetch_array($result,&nbsp;MYSQL_ASSOC)) </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp;&nbsp;&nbsp;&nbsp;{ </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$item&nbsp;=&nbsp;new&nbsp;RSSItem(); </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$item-&gt;title&nbsp;=&nbsp;$title; </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$item-&gt;link&nbsp;&nbsp;=&nbsp;$link; </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$item-&gt;setPubDate($create_date); </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$item-&gt;description&nbsp;=&nbsp;&quot;&lt;![CDATA[&nbsp;$html&nbsp;]]&gt;&quot;; </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$feed-&gt;addItem($item); </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp;&nbsp;&nbsp;&nbsp;} </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$feed-&gt;serve(); </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp;*&nbsp;============================================================== </font></span>&nbsp;</span></li>
    <li><span><span class="comment"><font color="#008200">&nbsp;*/</font></span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span>&nbsp;RSS &nbsp;&nbsp;</span></li>
    <li><span>{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;</span><span class="vars">$title</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;</span><span class="vars">$link</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;</span><span class="vars">$description</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;</span><span class="vars">$language</span><span>&nbsp;=&nbsp;</span><span class="string"><font color="#0000ff">&quot;en-us&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;</span><span class="vars">$pubDate</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;</span><span class="vars">$items</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;</span><span class="vars">$tags</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">function</font></strong></span><span>&nbsp;RSS()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;items&nbsp;=&nbsp;</span><span class="keyword"><strong><font color="#7f0055">array</font></strong></span><span>(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;tags&nbsp;&nbsp;=&nbsp;</span><span class="keyword"><strong><font color="#7f0055">array</font></strong></span><span>(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">function</font></strong></span><span>&nbsp;addItem(</span><span class="vars">$item</span><span>)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;items[]&nbsp;=&nbsp;</span><span class="vars">$item</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">function</font></strong></span><span>&nbsp;setPubDate(</span><span class="vars">$when</span><span>)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">if</font></strong></span><span>(</span><span class="func">strtotime</span><span>(</span><span class="vars">$when</span><span>)&nbsp;==&nbsp;false) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;pubDate&nbsp;=&nbsp;</span><span class="func">date</span><span>(</span><span class="string"><font color="#0000ff">&quot;D,&nbsp;d&nbsp;M&nbsp;Y&nbsp;H:i:s&nbsp;&quot;</font></span><span>,&nbsp;</span><span class="vars">$when</span><span>)&nbsp;.&nbsp;</span><span class="string"><font color="#0000ff">&quot;GMT&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">else</font></strong></span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;pubDate&nbsp;=&nbsp;</span><span class="func">date</span><span>(</span><span class="string"><font color="#0000ff">&quot;D,&nbsp;d&nbsp;M&nbsp;Y&nbsp;H:i:s&nbsp;&quot;</font></span><span>,&nbsp;</span><span class="func">strtotime</span><span>(</span><span class="vars">$when</span><span>))&nbsp;.&nbsp;</span><span class="string"><font color="#0000ff">&quot;GMT&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">function</font></strong></span><span>&nbsp;getPubDate()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">if</font></strong></span><span>(</span><span class="func">empty</span><span class="keyword"><strong><font color="#7f0055">empty</font></strong></span><span>(</span><span class="vars">$this</span><span>-&gt;pubDate)) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">return</font></strong></span><span>&nbsp;</span><span class="func">date</span><span>(</span><span class="string"><font color="#0000ff">&quot;D,&nbsp;d&nbsp;M&nbsp;Y&nbsp;H:i:s&nbsp;&quot;</font></span><span>)&nbsp;.&nbsp;</span><span class="string"><font color="#0000ff">&quot;GMT&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">else</font></strong></span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">return</font></strong></span><span>&nbsp;</span><span class="vars">$this</span><span>-&gt;pubDate; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">function</font></strong></span><span>&nbsp;addTag(</span><span class="vars">$tag</span><span>,&nbsp;</span><span class="vars">$value</span><span>)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;tags[</span><span class="vars">$tag</span><span>]&nbsp;=&nbsp;</span><span class="vars">$value</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">function</font></strong></span><span>&nbsp;out()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;&nbsp;=&nbsp;</span><span class="vars">$this</span><span>-&gt;header(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;channel&gt;\n&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;title&gt;&quot;</font></span><span>&nbsp;.&nbsp;</span><span class="vars">$this</span><span>-&gt;title&nbsp;.&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;/title&gt;\n&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;link&gt;&quot;</font></span><span>&nbsp;.&nbsp;</span><span class="vars">$this</span><span>-&gt;link&nbsp;.&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;/link&gt;\n&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;description&gt;&quot;</font></span><span>&nbsp;.&nbsp;</span><span class="vars">$this</span><span>-&gt;description&nbsp;.&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;/description&gt;\n&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;language&gt;&quot;</font></span><span>&nbsp;.&nbsp;</span><span class="vars">$this</span><span>-&gt;language&nbsp;.&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;/language&gt;\n&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;pubDate&gt;&quot;</font></span><span>&nbsp;.&nbsp;</span><span class="vars">$this</span><span>-&gt;getPubDate()&nbsp;.&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;/pubDate&gt;\n&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">foreach</font></strong></span><span>(</span><span class="vars">$this</span><span>-&gt;tags&nbsp;</span><span class="keyword"><strong><font color="#7f0055">as</font></strong></span><span>&nbsp;</span><span class="vars">$key</span><span>&nbsp;=&gt;&nbsp;</span><span class="vars">$val</span><span>) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;$key&gt;$val&lt;/$key&gt;\n&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">foreach</font></strong></span><span>(</span><span class="vars">$this</span><span>-&gt;items&nbsp;</span><span class="keyword"><strong><font color="#7f0055">as</font></strong></span><span>&nbsp;</span><span class="vars">$item</span><span>) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="vars">$item</span><span>-&gt;out(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;/channel&gt;\n&quot;</font></span><span>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="vars">$this</span><span>-&gt;footer(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;=&nbsp;</span><span class="func">str_replace</span><span>(</span><span class="string"><font color="#0000ff">&quot;&amp;&quot;</font></span><span>,&nbsp;</span><span class="string"><font color="#0000ff">&quot;&amp;amp;&quot;</font></span><span>,&nbsp;</span><span class="vars">$out</span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">return</font></strong></span><span>&nbsp;</span><span class="vars">$out</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">function</font></strong></span><span>&nbsp;serve(</span><span class="vars">$contentType</span><span>&nbsp;=&nbsp;</span><span class="string"><font color="#0000ff">&quot;application/xml&quot;</font></span><span>)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$xml</span><span>&nbsp;=&nbsp;</span><span class="vars">$this</span><span>-&gt;out(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header(</span><span class="string"><font color="#0000ff">&quot;Content-type:&nbsp;$contentType&quot;</font></span><span>); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="func">echo</span><span>&nbsp;</span><span class="vars">$xml</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">function</font></strong></span><span>&nbsp;header()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;&nbsp;=&nbsp;</span><span class="string"><font color="#0000ff">'&lt;?xml&nbsp;version=&quot;1.0&quot;&nbsp;encoding=&quot;utf-8&quot;?&gt;'</font></span><span>&nbsp;.&nbsp;</span><span class="string"><font color="#0000ff">&quot;\n&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="string"><font color="#0000ff">'&lt;rss&nbsp;version=&quot;2.0&quot;&nbsp;xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot;&gt;'</font></span><span>&nbsp;.&nbsp;</span><span class="string"><font color="#0000ff">&quot;\n&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">return</font></strong></span><span>&nbsp;</span><span class="vars">$out</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">function</font></strong></span><span>&nbsp;footer()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">return</font></strong></span><span>&nbsp;</span><span class="string"><font color="#0000ff">'&lt;/rss&gt;'</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span>&nbsp;RSSItem &nbsp;&nbsp;</span></li>
    <li><span>{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;</span><span class="vars">$title</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;</span><span class="vars">$link</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;</span><span class="vars">$description</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;</span><span class="vars">$pubDate</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;</span><span class="vars">$guid</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;</span><span class="vars">$tags</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;</span><span class="vars">$attachment</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;</span><span class="vars">$length</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">var</font></strong></span><span>&nbsp;</span><span class="vars">$mimetype</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">function</font></strong></span><span>&nbsp;RSSItem()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;tags&nbsp;=&nbsp;</span><span class="keyword"><strong><font color="#7f0055">array</font></strong></span><span>(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">function</font></strong></span><span>&nbsp;setPubDate(</span><span class="vars">$when</span><span>)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">if</font></strong></span><span>(</span><span class="func">strtotime</span><span>(</span><span class="vars">$when</span><span>)&nbsp;==&nbsp;false) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;pubDate&nbsp;=&nbsp;</span><span class="func">date</span><span>(</span><span class="string"><font color="#0000ff">&quot;D,&nbsp;d&nbsp;M&nbsp;Y&nbsp;H:i:s&nbsp;&quot;</font></span><span>,&nbsp;</span><span class="vars">$when</span><span>)&nbsp;.&nbsp;</span><span class="string"><font color="#0000ff">&quot;GMT&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">else</font></strong></span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;pubDate&nbsp;=&nbsp;</span><span class="func">date</span><span>(</span><span class="string"><font color="#0000ff">&quot;D,&nbsp;d&nbsp;M&nbsp;Y&nbsp;H:i:s&nbsp;&quot;</font></span><span>,&nbsp;</span><span class="func">strtotime</span><span>(</span><span class="vars">$when</span><span>))&nbsp;.&nbsp;</span><span class="string"><font color="#0000ff">&quot;GMT&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">function</font></strong></span><span>&nbsp;getPubDate()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">if</font></strong></span><span>(</span><span class="func">empty</span><span class="keyword"><strong><font color="#7f0055">empty</font></strong></span><span>(</span><span class="vars">$this</span><span>-&gt;pubDate)) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">return</font></strong></span><span>&nbsp;</span><span class="func">date</span><span>(</span><span class="string"><font color="#0000ff">&quot;D,&nbsp;d&nbsp;M&nbsp;Y&nbsp;H:i:s&nbsp;&quot;</font></span><span>)&nbsp;.&nbsp;</span><span class="string"><font color="#0000ff">&quot;GMT&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">else</font></strong></span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">return</font></strong></span><span>&nbsp;</span><span class="vars">$this</span><span>-&gt;pubDate; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">function</font></strong></span><span>&nbsp;addTag(</span><span class="vars">$tag</span><span>,&nbsp;</span><span class="vars">$value</span><span>)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;tags[</span><span class="vars">$tag</span><span>]&nbsp;=&nbsp;</span><span class="vars">$value</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">function</font></strong></span><span>&nbsp;out()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;item&gt;\n&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;title&gt;&quot;</font></span><span>&nbsp;.&nbsp;</span><span class="vars">$this</span><span>-&gt;title&nbsp;.&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;/title&gt;\n&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;link&gt;&quot;</font></span><span>&nbsp;.&nbsp;</span><span class="vars">$this</span><span>-&gt;link&nbsp;.&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;/link&gt;\n&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;description&gt;&quot;</font></span><span>&nbsp;.&nbsp;</span><span class="vars">$this</span><span>-&gt;description&nbsp;.&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;/description&gt;\n&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;pubDate&gt;&quot;</font></span><span>&nbsp;.&nbsp;</span><span class="vars">$this</span><span>-&gt;getPubDate()&nbsp;.&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;/pubDate&gt;\n&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">if</font></strong></span><span>(</span><span class="vars">$this</span><span>-&gt;attachment&nbsp;!=&nbsp;</span><span class="string"><font color="#0000ff">&quot;&quot;</font></span><span>) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;enclosure&nbsp;url='{$this-&gt;attachment}'&nbsp;length='{$this-&gt;length}'&nbsp;type='{$this-&gt;mimetype}'&nbsp;/&gt;&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">if</font></strong></span><span>(</span><span class="func">empty</span><span class="keyword"><strong><font color="#7f0055">empty</font></strong></span><span>(</span><span class="vars">$this</span><span>-&gt;guid))&nbsp;</span><span class="vars">$this</span><span>-&gt;guid&nbsp;=&nbsp;</span><span class="vars">$this</span><span>-&gt;link; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;guid&gt;&quot;</font></span><span>&nbsp;.&nbsp;</span><span class="vars">$this</span><span>-&gt;guid&nbsp;.&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;/guid&gt;\n&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">foreach</font></strong></span><span>(</span><span class="vars">$this</span><span>-&gt;tags&nbsp;</span><span class="keyword"><strong><font color="#7f0055">as</font></strong></span><span>&nbsp;</span><span class="vars">$key</span><span>&nbsp;=&gt;&nbsp;</span><span class="vars">$val</span><span>)&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;$key&gt;$val&lt;/$key\n&gt;&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$out</span><span>&nbsp;.=&nbsp;</span><span class="string"><font color="#0000ff">&quot;&lt;/item&gt;\n&quot;</font></span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">return</font></strong></span><span>&nbsp;</span><span class="vars">$out</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword"><strong><font color="#7f0055">function</font></strong></span><span>&nbsp;enclosure(</span><span class="vars">$url</span><span>,&nbsp;</span><span class="vars">$mimetype</span><span>,&nbsp;</span><span class="vars">$length</span><span>)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;attachment&nbsp;=&nbsp;</span><span class="vars">$url</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;mimetype&nbsp;&nbsp;&nbsp;=&nbsp;</span><span class="vars">$mimetype</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;length&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;</span><span class="vars">$length</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre style="display: none" class="php" title="PHP RSS/Feed 生成类库(支持RSS 1.0/2.0和ATOM)" pre_index="1" source_url="http://justcoding.iteye.com/blog/655603" codeable_type="Blog" codeable_id="655603" name="code">
&lt;?php
 
/**
 * 使用范例：
 * ==============================================================
    $feed = new RSS();
    $feed-&gt;title       = &quot;RSS Feed Title&quot;;
    $feed-&gt;link        = &quot;http://www.newyork.com/&quot;;
    $feed-&gt;description = &quot;Recent articles on newyork.com.&quot;;
 
    $db-&gt;query($query);
    $result = $db-&gt;result;
    while($row = mysql_fetch_array($result, MYSQL_ASSOC))
    {
        $item = new RSSItem();
        $item-&gt;title = $title;
        $item-&gt;link  = $link;
        $item-&gt;setPubDate($create_date);
        $item-&gt;description = &quot;&lt;![CDATA[ $html ]]&gt;&quot;;
        $feed-&gt;addItem($item);
    }
    echo $feed-&gt;serve();
 * ==============================================================
 */
 
class RSS
{
    var $title;
    var $link;
    var $description;
    var $language = &quot;en-us&quot;;
    var $pubDate;
    var $items;
    var $tags;
 
    function RSS() {
        $this-&gt;items = array();
        $this-&gt;tags  = array();
    }
 
    function addItem($item) {
        $this-&gt;items[] = $item;
    }
 
    function setPubDate($when) {
        if(strtotime($when) == false)
            $this-&gt;pubDate = date(&quot;D, d M Y H:i:s &quot;, $when) . &quot;GMT&quot;;
        else
            $this-&gt;pubDate = date(&quot;D, d M Y H:i:s &quot;, strtotime($when)) . &quot;GMT&quot;;
    }
 
    function getPubDate() {
        if(empty($this-&gt;pubDate))
            return date(&quot;D, d M Y H:i:s &quot;) . &quot;GMT&quot;;
        else
            return $this-&gt;pubDate;
    }
 
    function addTag($tag, $value) {
        $this-&gt;tags[$tag] = $value;
    }
 
    function out() {
        $out  = $this-&gt;header();
        $out .= &quot;&lt;channel&gt;\n&quot;;
        $out .= &quot;&lt;title&gt;&quot; . $this-&gt;title . &quot;&lt;/title&gt;\n&quot;;
        $out .= &quot;&lt;link&gt;&quot; . $this-&gt;link . &quot;&lt;/link&gt;\n&quot;;
        $out .= &quot;&lt;description&gt;&quot; . $this-&gt;description . &quot;&lt;/description&gt;\n&quot;;
        $out .= &quot;&lt;language&gt;&quot; . $this-&gt;language . &quot;&lt;/language&gt;\n&quot;;
        $out .= &quot;&lt;pubDate&gt;&quot; . $this-&gt;getPubDate() . &quot;&lt;/pubDate&gt;\n&quot;;
 
        foreach($this-&gt;tags as $key =&gt; $val)
            $out .= &quot;&lt;$key&gt;$val&lt;/$key&gt;\n&quot;;
        foreach($this-&gt;items as $item)
            $out .= $item-&gt;out();
 
        $out .= &quot;&lt;/channel&gt;\n&quot;;           
        $out .= $this-&gt;footer();
 
        $out = str_replace(&quot;&amp;&quot;, &quot;&amp;amp;&quot;, $out);
        return $out;
    }
    
    function serve($contentType = &quot;application/xml&quot;) {
        $xml = $this-&gt;out();
        header(&quot;Content-type: $contentType&quot;);
        echo $xml;
    }
 
    function header() {
        $out  = '&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;' . &quot;\n&quot;;
        $out .= '&lt;rss version=&quot;2.0&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot;&gt;' . &quot;\n&quot;;
        return $out;
    }
 
    function footer() {
        return '&lt;/rss&gt;';
    }
}
 
class RSSItem
{
    var $title;
    var $link;
    var $description;
    var $pubDate;
    var $guid;
    var $tags;
    var $attachment;
    var $length;
    var $mimetype;
 
    function RSSItem() {
        $this-&gt;tags = array();
    }
 
    function setPubDate($when) {
        if(strtotime($when) == false)
            $this-&gt;pubDate = date(&quot;D, d M Y H:i:s &quot;, $when) . &quot;GMT&quot;;
        else
            $this-&gt;pubDate = date(&quot;D, d M Y H:i:s &quot;, strtotime($when)) . &quot;GMT&quot;;
    }
 
    function getPubDate() {
        if(empty($this-&gt;pubDate))
            return date(&quot;D, d M Y H:i:s &quot;) . &quot;GMT&quot;;
        else
            return $this-&gt;pubDate;
    }
 
    function addTag($tag, $value) {
        $this-&gt;tags[$tag] = $value;
    }
 
    function out() {
        $out .= &quot;&lt;item&gt;\n&quot;;
        $out .= &quot;&lt;title&gt;&quot; . $this-&gt;title . &quot;&lt;/title&gt;\n&quot;;
        $out .= &quot;&lt;link&gt;&quot; . $this-&gt;link . &quot;&lt;/link&gt;\n&quot;;
        $out .= &quot;&lt;description&gt;&quot; . $this-&gt;description . &quot;&lt;/description&gt;\n&quot;;
        $out .= &quot;&lt;pubDate&gt;&quot; . $this-&gt;getPubDate() . &quot;&lt;/pubDate&gt;\n&quot;;
 
        if($this-&gt;attachment != &quot;&quot;)
            $out .= &quot;&lt;enclosure url='{$this-&gt;attachment}' length='{$this-&gt;length}' type='{$this-&gt;mimetype}' /&gt;&quot;;
 
        if(empty($this-&gt;guid)) $this-&gt;guid = $this-&gt;link;
        $out .= &quot;&lt;guid&gt;&quot; . $this-&gt;guid . &quot;&lt;/guid&gt;\n&quot;;
 
        foreach($this-&gt;tags as $key =&gt; $val) $out .= &quot;&lt;$key&gt;$val&lt;/$key\n&gt;&quot;;
        $out .= &quot;&lt;/item&gt;\n&quot;;
        return $out;
    }
 
    function enclosure($url, $mimetype, $length) {
        $this-&gt;attachment = $url;
        $this-&gt;mimetype   = $mimetype;
        $this-&gt;length     = $length;
    }
}</pre>
&nbsp;
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
<div class="attachments">
<ul>
    <li><a href="http://dl.iteye.com/topics/download/23efb25d-c7d3-338f-9bec-05865c1b2cc1"><font color="#620091">FeedWriter.zip</font></a> (7.5 KB)</li>
</ul>
</div>]]></description>
  <category>开发板块</category>
  <comments>http://www.lianglong.org/article/213.html#comment</comments>
  <guid>http://www.lianglong.org/article/213.html</guid>
  <pubDate>Tue, 06 Dec 2011 14:12:47 +0000</pubDate>
</item>
<item>
  <title>让PHP支持页面后退的两种方法 </title>
  <link>http://www.lianglong.org/article/211.html</link>
  <description><![CDATA[<div id="blog_content" class="blog_content">
<p><strong>让PHP支持页面后退的两种方法（Cache-control &nbsp;php back form）</strong></p>
<div><span style="font-size: xx-small"><br />
<br />
</span></div>
<p>在开发过程中，往往因为表单出错而返回页面的时候填写的信息都不见了，为了支持页面回跳，可以通过两种方法实现。<br />
<strong>第一，使用Header方法设置消息头Cache-control</strong> <br />
&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Php代码 &nbsp;</div>
</div>
<ol class="dp-c">
    <li><span><span>header(</span><span class="string"><font color="#0000ff">'Cache-control:&nbsp;private,&nbsp;must-revalidate'</font></span><span>);&nbsp;</span><span class="comment"><font color="#008200">//支持页面回跳</font></span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre style="display: none" class="php" title="让PHP支持页面后退的两种方法" pre_index="0" source_url="http://justcoding.iteye.com/blog/547756" codeable_type="Blog" codeable_id="547756" name="code">
header('Cache-control: private, must-revalidate'); //支持页面回跳</pre>
&nbsp;
<p><br />
<br />
<strong>第二，使用session_cache_limiter方法</strong> <br />
&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Php代码</div>
<div class="tools"><span><span class="comment"><font color="#008200">//注意要写在session_start方法之前 </font></span><span>&nbsp;&nbsp;</span></span></div>
</div>
<ol class="dp-c">
    <li><span>session_cache_limiter(</span><span class="string"><font color="#0000ff">'private,&nbsp;must-revalidate'</font></span><span>);&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre style="display: none" class="php" title="让PHP支持页面后退的两种方法" pre_index="1" source_url="http://justcoding.iteye.com/blog/547756" codeable_type="Blog" codeable_id="547756" name="code">
//注意要写在session_start方法之前
session_cache_limiter('private, must-revalidate');
</pre>
&nbsp;
<p><br />
PS：Cache-Control消息头域说明<br />
Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if- cached，响应消息中的指令包括public、private、no-cache、no-store、no-transform、must- revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下：<br />
<br />
Public指示响应可被任何缓存区缓存。<br />
Private指示对于单个用户的整个或部分响应消息，不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息，此响应消息对于其他用户的请求无效。<br />
no-cache指示请求或响应消息不能缓存<br />
no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。<br />
max-age指示客户机可以接收生存期不大于指定时间（以秒为单位）的响应。<br />
min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。<br />
max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值，那么客户机可以接收超出超时期指定值之内的响应消息。</p>
</div>]]></description>
  <category>开发板块</category>
  <comments>http://www.lianglong.org/article/211.html#comment</comments>
  <guid>http://www.lianglong.org/article/211.html</guid>
  <pubDate>Tue, 06 Dec 2011 13:41:27 +0000</pubDate>
</item>
</channel>
</rss>

