<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">

    <channel>

    <title>CodeIgniter 中国 - 新闻</title>
    <link>https://codeigniter.org.cn/legacy/news</link>
    <description>CodeIgniter：帮助你编写 PHP 程序的开放源代码的 Web 应用程序框架</description>
    <dc:language>zh-cn</dc:language>
    <dc:creator>support@codeigniter.org.cn</dc:creator>

    <dc:rights>版权所有 2007-2009</dc:rights>
    <dc:date>2026-04-19 00:30:44+08:00</dc:date>
    <admin:generatorAgent rdf:resource="https://codeigniter.org.cn/legacy/" />

    <image>
    <title><![CDATA[CodeIgniter 中国]]></title>
    <link><![CDATA[https://codeigniter.org.cn/legacy/]]></link>
    <url><![CDATA[https://codeigniter.org.cn/legacy/images/design/favicon.ico]]></url>
    </image>

    <item>
      <title>CodeIgniter 发布 3.0.0 版</title>
      <link>https://codeigniter.org.cn/legacy/news/codeigniter_3.0.0_released</link>
      <description><![CDATA[<p>CodeIgniter 3.0.0 正式版发布了！<a href="/downloads" target="_blank">点击这里立即下载吧！</a></p>

<p>相对于 CodeIgniter 2.0，新版 CI 有以下一些变化：</p>

<ul>
<li>框架以 MIT 协议发布</li>
<li>数据库驱动进行了彻底的重构</li>
<li>PDO 和子驱动一起功能完备</li>
<li>全新 Session 类库</li>
<li>全新加密类库</li>
<li>增强了单元测试，并提高了代码覆盖率</li>
<li>推荐使用 PHP 5.4 或更高的版本，但 CI 也支持 PHP 5.2.4</li>
</ul>

<p>查看详细的更改记录请点击<a href="http://codeigniter.org.cn/user_guide/changelog.html" target="_blank">这里</a>。</p>

<p>查看如何从 CodeIgniter 2 升级到 CodeIgniter 3 请点击<a href="http://codeigniter.org.cn/user_guide/installation/upgrade_300.html" target="_blank">这里</a>。</p>

<p>特别感谢 @narf 引领 3.0 版本的开发，也要感谢 CodeIgniter 社区的支持和贡献。</p>]]></description>
      <dc:subject></dc:subject>
      <dc:date>2015-03-31 11:23:00+08:00</dc:date>
    </item>
    <item>
      <title>PHP 框架 CodeIgniter 找到新家</title>
      <link>https://codeigniter.org.cn/legacy/news/your_favorite_php_framework_codeigniter_has_a_new_home</link>
      <description><![CDATA[<p>当我们宣布要为 CodeIgniter 寻找一个新家的时候，我们从世界各地收到了大量的电子邮件，甚至持续到了今天。但，有一个简单问题：我们应该把框架托付给谁？事实证明，巨大的压力让我们的选择很纠结。</p>

<p>我们很快否决了一些经验不足的候选人。我们回绝了那些没有财力或时间来管理这个庞大项目的候选人。我们也把那些只为赚钱的人拒之门外。但还是有很多候选人，他们有能力也很有远见。不过，这其中只有一位候选人鹤立鸡群。</p>

<p>加拿大温哥华的<a href="http://www.bcit.ca/" target="_blank">不列颠哥伦比亚理工学院</a>（BCIT）是一所拥有超过 48000 名学生的高度重视应用技术的学院。令人印象深刻的是，BCIT 计算机科学和学术研究学学院每年培养 150 名 CodeIgniter 专业人才。现在，他们是 CodeIgniter 的新东家。</p>

<p>院长和整个学院都支持通过有活力的实验模型来实现真实的项目，因为这样可以让学生们实际接触并参与进来。他们已经在建筑、能源和健康领域建立了令人印象深刻的创新实验室（living labs）。CodeIgniter 非常适合这种模式，并且 BCIT 也有资源和基础设施去有效的管理这个项目。</p>

<p>James Parry 是 BCIT 计算机科学和学术研究学学院的一名有着多年 CodeIgniter 经验的 Web 技术讲师，他将领导这个项目。并且，他也会组建一个指导委员会，以改进和完善框架。委员会将包括 CodeIgniter 社区的成员，以及一些优秀的具有商业网站开发经验的学生。CodeIgniter 将是 BCIT 学生们获取方方面面的实际知识与经验的纽带。</p>

<p>这就是 BCIT 相比其他候选人最大的优势。如果你使用 CodeIgniter，你将直接从这个新东家那里获益。这些学生的成功本质上讲不只是教与学，而是在塑造 CodeIgniter 是现代编程技术最前沿的形象。每个人都使用它的结果就是拥有了可靠的扎实又新鲜的基础。</p>

<p>###</p>

<p><strong>关于 EllisLab</strong></p>

<p>EllisLab 是一家成立于 2001 年的技术型公司，他们开发了世界各地数以万计人使用的 Web 构建软件。他们最有名的主打产品是 ExpressionEngine®，一套受到中小企业和财富 100 强企业青睐的内容管理系统。EllisLab 也是 CodeIgniter，一个流行的轻量级 PHP 框架的创造者。更多信息请访问 <a href="http://ellislab.com/" target="_blank">https://ellislab.com</a>。</p>

<p>
Rick Ellis<br />
<a href="mailto:codeigniter@ellislab.com">codeigniter@ellislab.com</a>
</p>

<p><strong>关于 不列颠哥伦比亚理工学院</strong></p>

<p>不列颠哥伦比亚理工学院是一家拥有超过 48000 名学生的，每年大约开设 350 门课程的公立理工学院。</p>

<p>作为加拿大首屈一指的技术学院，BCIT 自 1964 年以来一直在建设不列颠哥伦比亚省的经济、社会和环境方面扮演重要角色，并在此期间培养了超过 15 万名优秀的毕业生。</p>

<p>作为应用教育的领导者，BCIT 为各领域相关技能的学习提供了宽广的途径和多样的方法，包括计算机，商业，造船，石油和天然气，医疗卫生，应用研究，媒体和工程等领域。</p>

<p>
Dave Pinton<br />
媒体关系经理,<br />
<a href="mailto:dave_pinton@bcit.ca">dave_pinton@bcit.ca</a>
</p>]]></description>
      <dc:subject></dc:subject>
      <dc:date>2014-10-08 15:02:00+08:00</dc:date>
    </item>
    <item>
      <title>CodeIgniter 发布 2.2.0 版</title>
      <link>https://codeigniter.org.cn/legacy/news/codeigniter_2.2.0_released</link>
      <description><![CDATA[<p>我们今天发布了 CodeIgniter 2.2.0 版，这是一个 2.x 版本的安全更新。在这个版本中包含了一个重要更新，所以请首先阅读“从 2.1.4 升级到 2.2.0”文档，以确保你的环境已经准备好升级框架。</p>

<p>由于大多数修改已经移到 GitHub 上的 3.0 开发版仓库中，所以这些修改只影响旧版本开发的网站。运行 3.x 开发版的网站不会受到影响，因为已经在这个版本中解决了这些问题。我们认为仍旧运行 2.x 的网站与受潜在漏洞影响的网站应该升级到这个版本。</p>

<p>你可以<a href="http://codeigniter.org.cn/download">下载 2.2.0 版</a>，也可以<a href="http://codeigniter.org.cn/user_guide/changelog.html" target="_blank">点击这里</a>阅读完整的变更记录。</p>]]></description>
      <dc:subject></dc:subject>
      <dc:date>2014-06-10 08:00:00+08:00</dc:date>
    </item>
    <item>
      <title>教程: CodeIgniter 整合 UCenter 全攻略</title>
      <link>https://codeigniter.org.cn/legacy/news/codeigniter_ucenter_how_to</link>
      <description><![CDATA[<p>原文：<a href="https://github.com/CodeIgniter-Chinese/ucenter-how-to">https://github.com/CodeIgniter-Chinese/ucenter-how-to</a></p>
<p>作者：Jeongee</p>

<p>本文默认你已详细阅读过 UCenter 官方手册并对 CodeIgniter 有一定的了解。</p>

<h4>下载相应的软件</h4>

<ul>
<li><a href="http://codeigniter.org.cn/downloads" target="_blank">CodeIgniter 2.1.4</a></li>
<li><a href="http://www.comsenz.com/downloads/install/ucenter#down_open" target="_blank">UCenter 1.6.0</a></li>
<li><a href="http://www.comsenz.com/downloads/install/discuzx" target="_blank">Discuz! X3</a></li>
</ul>

<p>简体 UTF-8，可以不下载 Discuz!，这里只是用来最后检验同步登录/登出是否成功。</p>

<h4>前置条件</h4>

<ul>

<li>
<p>项目目录结构如下</p>
<p><img src="/public/uploads/news/tree.png" alt="image" style="max-width:100%" /></p>
</li>

<li>
<p>搭建服务器</p>
<p>根目录指向 codeIgniter-ucenter</p>
<p>我设置了 hosts</p>
<pre><code>127.0.0.1   ci.connect.uc</code></pre>
<p>这个任意的，这里只是为了突出主题。</p>
</li>

</ul>

<h4>开始集成</h4>

<ul>
<li>
<p>安装 Ucenter</p>

<p>访问<a href="http://ci.connect.uc/uc">http://ci.connect.uc/uc</a>，按照向导安装即可。</p>

<p><img src="/public/uploads/news/install_uc.png" alt="image" style="max-width:100%" /></p>
</li>
<li>
<p>安装 Discuz!X</p>

<p>访问<a href="http://ci.connect.uc/discuz">http://ci.connect.uc/discuz</a>，按照向导，第二步时候选择只安装 Discuz!X，如下图，信息填写uc的安装信息</p>

<p><img src="/public/uploads/news/install_discuz.png" alt="image" style="max-width:100%" /></p>
</li>
<li>
<p>配置 CodeIgniter</p>

<ul>
<li>配置 application/config.php, 为使用 Session 类，需要设置 encryption_key，值任意。</li>
</ul>
<pre><code>$config['encryption_key'] = sha1('whatever it is!');</code></pre>

<ul>
<li>修改默认控制器 welcome.php 如下：</li>
</ul>
<div class="highlight"><pre><span class="o">&lt;?</span><span class="nx">php</span> <span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="nb">defined</span><span class="p">(</span><span class="s1">'BASEPATH'</span><span class="p">))</span> <span class="k">exit</span><span class="p">(</span><span class="s1">'No direct script access allowed'</span><span class="p">);</span>

    <span class="k">class</span> <span class="nc">Welcome</span> <span class="k">extends</span> <span class="nx">CI_Controller</span> <span class="p">{</span>

        <span class="k">public</span> <span class="k">function</span> <span class="nf">index</span><span class="p">()</span>
        <span class="p">{</span>
            <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">load</span><span class="o">-&gt;</span><span class="na">library</span><span class="p">(</span><span class="s1">'session'</span><span class="p">);</span>
            <span class="nv">$data</span><span class="p">[</span><span class="s1">'user'</span><span class="p">]</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">session</span><span class="o">-&gt;</span><span class="na">userdata</span><span class="p">(</span><span class="s1">'user'</span><span class="p">);</span>
            <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">load</span><span class="o">-&gt;</span><span class="na">view</span><span class="p">(</span><span class="s1">'welcome_message'</span><span class="p">,</span> <span class="nv">$data</span><span class="p">);</span>
        <span class="p">}</span>
    <span class="p">}</span>

</pre></div>

<ul>
<li>
<p>修改 views/welcome_message.php 中的 <strong>div#container</strong> 如下：</p>

<div class="highlight"><pre><span class="nt">&lt;div</span> <span class="na">id=</span><span class="s">"container"</span><span class="nt">&gt;</span>
  <span class="nt">&lt;h1&gt;</span>Welcome to CodeIgniter!<span class="nt">&lt;/h1&gt;</span>
  <span class="nt">&lt;div</span> <span class="na">id=</span><span class="s">"body"</span><span class="nt">&gt;</span>
      <span class="cp">&lt;?php if ($user): ?&gt;</span>
          <span class="nt">&lt;p&gt;</span>欢迎你, <span class="cp">&lt;?php echo $user['username']; ?&gt;</span>到<span class="nt">&lt;a</span> <span class="na">target=</span><span class="s">"_blank"</span> <span class="na">href=</span><span class="s">"http://ci.connect.uc/discuz"</span><span class="nt">&gt;</span>DiscuzX<span class="nt">&lt;/a&gt;</span>退出后再刷新这个页面吧!<span class="nt">&lt;/p&gt;</span>
      <span class="cp">&lt;?php else: ?&gt;</span>
          <span class="nt">&lt;p&gt;</span>尚未登录，到<span class="nt">&lt;a</span> <span class="na">target=</span><span class="s">"_blank"</span> <span class="na">href=</span><span class="s">"http://ci.connect.uc/discuz"</span><span class="nt">&gt;</span>DiscuzX<span class="nt">&lt;/a&gt;</span>登录后再刷新这个页面吧!<span class="nt">&lt;/p&gt;</span>
      <span class="cp">&lt;?php endif; ?&gt;</span>
  <span class="nt">&lt;/div&gt;</span>
  <span class="nt">&lt;p</span> <span class="na">class=</span><span class="s">"footer"</span><span class="nt">&gt;</span>Page rendered in <span class="nt">&lt;strong&gt;</span>0.0455<span class="nt">&lt;/strong&gt;</span> seconds<span class="nt">&lt;/p&gt;</span>
<span class="nt">&lt;/div&gt;</span>

</pre></div>
</li>
<li><p>在 UCenter 中添加新应用</p></li>
</ul>
<p>看图：<img src="/public/uploads/news/add_new_app.png" alt="image" style="max-width:100%" /></p>

<ul>
<li>在 CI 目录 application/config/ 目录下新建文件 ucenter.php</li>
</ul>
<p>内容为 UCenter 为新加应用生成的配置文件</p>

<div class="highlight"><pre><span class="o">&lt;?</span><span class="nx">php</span>
    <span class="nb">define</span><span class="p">(</span><span class="s1">'UC_CONNECT'</span><span class="p">,</span> <span class="s1">'mysql'</span><span class="p">);</span>
    <span class="nb">define</span><span class="p">(</span><span class="s1">'UC_DBHOST'</span><span class="p">,</span> <span class="s1">'localhost'</span><span class="p">);</span>
    <span class="nb">define</span><span class="p">(</span><span class="s1">'UC_DBUSER'</span><span class="p">,</span> <span class="s1">'root'</span><span class="p">);</span>
    <span class="nb">define</span><span class="p">(</span><span class="s1">'UC_DBPW'</span><span class="p">,</span> <span class="s1">'root'</span><span class="p">);</span>
    <span class="nb">define</span><span class="p">(</span><span class="s1">'UC_DBNAME'</span><span class="p">,</span> <span class="s1">'ucenter'</span><span class="p">);</span>
    <span class="nb">define</span><span class="p">(</span><span class="s1">'UC_DBCHARSET'</span><span class="p">,</span> <span class="s1">'utf8'</span><span class="p">);</span>
    <span class="nb">define</span><span class="p">(</span><span class="s1">'UC_DBTABLEPRE'</span><span class="p">,</span> <span class="s1">'`ucenter`.uc_'</span><span class="p">);</span>
    <span class="nb">define</span><span class="p">(</span><span class="s1">'UC_DBCONNECT'</span><span class="p">,</span> <span class="s1">'0'</span><span class="p">);</span>
    <span class="nb">define</span><span class="p">(</span><span class="s1">'UC_KEY'</span><span class="p">,</span> <span class="s1">'whatever you wanna set!'</span><span class="p">);</span>
    <span class="nb">define</span><span class="p">(</span><span class="s1">'UC_API'</span><span class="p">,</span> <span class="s1">'http://ci.connect.uc/uc'</span><span class="p">);</span>
    <span class="nb">define</span><span class="p">(</span><span class="s1">'UC_CHARSET'</span><span class="p">,</span> <span class="s1">'utf-8'</span><span class="p">);</span>
    <span class="nb">define</span><span class="p">(</span><span class="s1">'UC_IP'</span><span class="p">,</span> <span class="s1">''</span><span class="p">);</span>
    <span class="nb">define</span><span class="p">(</span><span class="s1">'UC_APPID'</span><span class="p">,</span> <span class="s1">'2'</span><span class="p">);</span>
    <span class="nb">define</span><span class="p">(</span><span class="s1">'UC_PPP'</span><span class="p">,</span> <span class="s1">'20'</span><span class="p">);</span>

</pre></div>

<ul>
<li>从 UCenter 安装包中复制 uc_client 到 CI 根目录</li>
<li>
<p>新增控制器 api/uc.php</p>

<p>内容如下：</p>

<div class="highlight"><pre><span class="o">&lt;?</span><span class="nx">php</span> <span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="nb">defined</span><span class="p">(</span><span class="s1">'BASEPATH'</span><span class="p">))</span> <span class="k">exit</span><span class="p">(</span><span class="s1">'No direct script access allowed'</span><span class="p">);</span>

<span class="sd">/**</span>
<span class="sd">*  Ucenter接口通知处理控制器</span>
<span class="sd">*</span>
<span class="sd">*  本类根据ucenter提供的通知处理实例代码编写，具体处理部分需要根据不同应用的逻辑自行编写处理逻辑。</span>
<span class="sd">*  具体请仔细阅读ucenter自带的手册。</span>
<span class="sd">*</span>
<span class="sd">*  @author     chekun &lt;234267695@qq.com&gt;</span>
<span class="sd">*/</span>

<span class="k">class</span> <span class="nc">Uc</span> <span class="k">extends</span> <span class="nx">CI_Controller</span>
<span class="p">{</span>
  <span class="k">const</span> <span class="no">UC_CLIENT_RELEASE</span> <span class="o">=</span> <span class="s1">'20110501'</span><span class="p">;</span>
  <span class="k">const</span> <span class="no">UC_CLIENT_VERSION</span> <span class="o">=</span> <span class="s1">'1.6.0'</span><span class="p">;</span>

  <span class="k">const</span> <span class="no">API_DELETEUSER</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
  <span class="k">const</span> <span class="no">API_RENAMEUSER</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
  <span class="k">const</span> <span class="no">API_GETTAG</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
  <span class="k">const</span> <span class="no">API_SYNLOGIN</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
  <span class="k">const</span> <span class="no">API_SYNLOGOUT</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
  <span class="k">const</span> <span class="no">API_UPDATEPW</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
  <span class="k">const</span> <span class="no">API_UPDATEBADWORDS</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
  <span class="k">const</span> <span class="no">API_UPDATEHOSTS</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
  <span class="k">const</span> <span class="no">API_UPDATEAPPS</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
  <span class="k">const</span> <span class="no">API_UPDATECLIENT</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
  <span class="k">const</span> <span class="no">API_UPDATECREDIT</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
  <span class="k">const</span> <span class="no">API_GETCREDITSETTINGS</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
  <span class="k">const</span> <span class="no">API_GETCREDIT</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
  <span class="k">const</span> <span class="no">API_UPDATECREDITSETTINGS</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>

  <span class="k">const</span> <span class="no">API_RETURN_SUCCEED</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
  <span class="k">const</span> <span class="no">API_RETURN_FAILED</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
  <span class="k">const</span> <span class="no">API_RETURN_FORBIDDEN</span> <span class="o">=</span> <span class="o">-</span><span class="mi">2</span><span class="p">;</span>

  <span class="k">public</span> <span class="k">function</span> <span class="nf">index</span><span class="p">()</span>
  <span class="p">{</span>
      <span class="k">include</span> <span class="nx">APPPATH</span><span class="o">.</span><span class="s1">'config/ucenter.php'</span><span class="p">;</span>
      <span class="nv">$get</span> <span class="o">=</span> <span class="nv">$post</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
      <span class="nv">$code</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">input</span><span class="o">-&gt;</span><span class="na">get</span><span class="p">(</span><span class="s1">'code'</span><span class="p">,</span> <span class="k">true</span><span class="p">);</span>
      <span class="nb">parse_str</span><span class="p">(</span><span class="k">self</span><span class="o">::</span><span class="na">authcode</span><span class="p">(</span><span class="nv">$code</span><span class="p">,</span> <span class="s1">'DECODE'</span><span class="p">,</span> <span class="nx">UC_KEY</span><span class="p">),</span> <span class="nv">$get</span><span class="p">);</span>
      <span class="nv">$timestamp</span> <span class="o">=</span> <span class="nb">time</span><span class="p">();</span>
      <span class="k">if</span> <span class="p">(</span><span class="nv">$timestamp</span> <span class="o">-</span> <span class="nv">$get</span><span class="p">[</span><span class="s1">'time'</span><span class="p">]</span> <span class="o">&gt;</span> <span class="mi">3600</span><span class="p">)</span>
      <span class="p">{</span>
          <span class="k">echo</span> <span class="s1">'授权已过期'</span><span class="p">;</span>
          <span class="k">return</span><span class="p">;</span>
      <span class="p">}</span>
      <span class="k">if</span> <span class="p">(</span><span class="k">empty</span><span class="p">(</span><span class="nv">$get</span><span class="p">))</span>
      <span class="p">{</span>
          <span class="k">echo</span> <span class="s1">'非法请求'</span><span class="p">;</span>
          <span class="k">return</span><span class="p">;</span>
      <span class="p">}</span>
      <span class="nv">$post</span> <span class="o">=</span> <span class="k">self</span><span class="o">::</span><span class="na">unserialize</span><span class="p">(</span><span class="nb">file_get_contents</span><span class="p">(</span><span class="s1">'php://input'</span><span class="p">));</span>
      <span class="k">if</span> <span class="p">(</span><span class="nb">in_array</span><span class="p">(</span><span class="nv">$get</span><span class="p">[</span><span class="s1">'action'</span><span class="p">],</span> <span class="k">array</span><span class="p">(</span>
          <span class="s1">'test'</span><span class="p">,</span>
          <span class="s1">'deleteuser'</span><span class="p">,</span>
          <span class="s1">'renameuser'</span><span class="p">,</span>
          <span class="s1">'gettag'</span><span class="p">,</span>
          <span class="s1">'synlogin'</span><span class="p">,</span>
          <span class="s1">'synlogout'</span><span class="p">,</span>
          <span class="s1">'updatepw'</span><span class="p">,</span>
          <span class="s1">'updatebadwords'</span><span class="p">,</span>
          <span class="s1">'updatehosts'</span><span class="p">,</span>
          <span class="s1">'updateapps'</span><span class="p">,</span>
          <span class="s1">'updateclient'</span><span class="p">,</span>
          <span class="s1">'updatecredit'</span><span class="p">,</span>
          <span class="s1">'getcreditsettings'</span><span class="p">,</span>
          <span class="s1">'updatecreditsettings'</span><span class="p">)))</span>
      <span class="p">{</span>

          <span class="k">echo</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="nv">$get</span><span class="p">[</span><span class="s1">'action'</span><span class="p">](</span><span class="nv">$get</span><span class="p">,</span> <span class="nv">$post</span><span class="p">);</span>
          <span class="k">return</span><span class="p">;</span>
      <span class="p">}</span>
      <span class="k">else</span>
      <span class="p">{</span>
          <span class="k">echo</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_FAILED</span><span class="p">;</span>
          <span class="k">return</span><span class="p">;</span>
      <span class="p">}</span>

  <span class="p">}</span>

  <span class="k">private</span> <span class="k">function</span> <span class="nf">test</span><span class="p">(</span><span class="nv">$get</span><span class="p">,</span> <span class="nv">$post</span><span class="p">)</span>
  <span class="p">{</span>
      <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_SUCCEED</span><span class="p">;</span>
  <span class="p">}</span>

  <span class="k">private</span> <span class="k">function</span> <span class="nf">deleteuser</span><span class="p">(</span><span class="nv">$get</span><span class="p">,</span> <span class="nv">$post</span><span class="p">)</span>
  <span class="p">{</span>
      <span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">self</span><span class="o">::</span><span class="na">API_DELETEUSER</span><span class="p">)</span>
      <span class="p">{</span>
          <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_FORBIDDEN</span><span class="p">;</span>
      <span class="p">}</span>
      <span class="nv">$uids</span> <span class="o">=</span> <span class="nv">$get</span><span class="p">[</span><span class="s1">'ids'</span><span class="p">];</span>
      <span class="c1">//delete your users here</span>
      <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_SUCCEED</span><span class="p">;</span>
  <span class="p">}</span>

  <span class="k">private</span> <span class="k">function</span> <span class="nf">gettag</span><span class="p">(</span><span class="nv">$get</span><span class="p">,</span> <span class="nv">$post</span><span class="p">)</span>
  <span class="p">{</span>
      <span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">self</span><span class="o">::</span><span class="na">API_GETTAG</span><span class="p">)</span>
      <span class="p">{</span>
          <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_FORBIDDEN</span><span class="p">;</span>
      <span class="p">}</span>
      <span class="c1">//</span>
      <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_SUCCEED</span><span class="p">;</span>
  <span class="p">}</span>

  <span class="k">private</span> <span class="k">function</span> <span class="nf">synlogin</span><span class="p">(</span><span class="nv">$get</span><span class="p">,</span> <span class="nv">$post</span><span class="p">)</span>
  <span class="p">{</span>
      <span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">self</span><span class="o">::</span><span class="na">API_SYNLOGIN</span><span class="p">)</span>
      <span class="p">{</span>
          <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_FORBIDDEN</span><span class="p">;</span>
      <span class="p">}</span>
      <span class="nx">header</span><span class="p">(</span><span class="s1">'P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'</span><span class="p">);</span>
      <span class="nv">$uid</span> <span class="o">=</span> <span class="nv">$get</span><span class="p">[</span><span class="s1">'uid'</span><span class="p">];</span>
      <span class="c1">//同步登录的代码在这里处理</span>
      <span class="k">include</span> <span class="nx">APPPATH</span><span class="o">.</span><span class="s1">'../uc_client/client.php'</span><span class="p">;</span>
      <span class="k">if</span> <span class="p">(</span><span class="nv">$uc_user</span> <span class="o">=</span> <span class="nx">uc_get_user</span><span class="p">(</span><span class="nv">$uid</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
      <span class="p">{</span>
          <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">load</span><span class="o">-&gt;</span><span class="na">library</span><span class="p">(</span><span class="s1">'session'</span><span class="p">);</span>
          <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">session</span><span class="o">-&gt;</span><span class="na">set_userdata</span><span class="p">(</span><span class="s1">'user'</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span>
              <span class="s1">'uid'</span> <span class="o">=&gt;</span> <span class="nv">$uid</span><span class="p">,</span>
              <span class="s1">'username'</span> <span class="o">=&gt;</span> <span class="nv">$uc_user</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
          <span class="p">));</span>
      <span class="p">}</span>

      <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_SUCCEED</span><span class="p">;</span>
  <span class="p">}</span>

  <span class="k">private</span> <span class="k">function</span> <span class="nf">synlogout</span><span class="p">(</span><span class="nv">$get</span><span class="p">,</span> <span class="nv">$post</span><span class="p">)</span>
  <span class="p">{</span>
      <span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">self</span><span class="o">::</span><span class="na">API_SYNLOGOUT</span><span class="p">)</span>
      <span class="p">{</span>
          <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_FORBIDDEN</span><span class="p">;</span>
      <span class="p">}</span>
      <span class="nx">header</span><span class="p">(</span><span class="s1">'P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'</span><span class="p">);</span>
      <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">load</span><span class="o">-&gt;</span><span class="na">library</span><span class="p">(</span><span class="s1">'session'</span><span class="p">);</span>
      <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">session</span><span class="o">-&gt;</span><span class="na">sess_destroy</span><span class="p">();</span>
      <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_SUCCEED</span><span class="p">;</span>
  <span class="p">}</span>

  <span class="k">private</span> <span class="k">function</span> <span class="nf">updatepw</span><span class="p">(</span><span class="nv">$get</span><span class="p">,</span> <span class="nv">$post</span><span class="p">)</span>
  <span class="p">{</span>
      <span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">self</span><span class="o">::</span><span class="na">API_UPDATEPW</span><span class="p">)</span>
      <span class="p">{</span>
          <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_FORBIDDEN</span><span class="p">;</span>
      <span class="p">}</span>
      <span class="c1">//这里做修改密码操作</span>
      <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_SUCCEED</span><span class="p">;</span>
  <span class="p">}</span>

  <span class="k">private</span> <span class="k">function</span> <span class="nf">updatebadwords</span><span class="p">(</span><span class="nv">$get</span><span class="p">,</span> <span class="nv">$post</span><span class="p">)</span>
  <span class="p">{</span>
      <span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">self</span><span class="o">::</span><span class="na">API_UPDATEBADWORDS</span><span class="p">)</span>
      <span class="p">{</span>
          <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_FORBIDDEN</span><span class="p">;</span>
      <span class="p">}</span>
      <span class="nv">$cachefile</span> <span class="o">=</span> <span class="nx">APPPATH</span><span class="o">.</span><span class="s1">'../uc_client/data/cache/badwords.php'</span><span class="p">;</span>
      <span class="o">@</span><span class="nb">unlink</span><span class="p">(</span><span class="nv">$cachefile</span><span class="p">);</span>
      <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_SUCCEED</span><span class="p">;</span>
  <span class="p">}</span>

  <span class="k">private</span> <span class="k">function</span> <span class="nf">updatehosts</span><span class="p">(</span><span class="nv">$get</span><span class="p">,</span> <span class="nv">$post</span><span class="p">)</span>
  <span class="p">{</span>
      <span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">self</span><span class="o">::</span><span class="na">API_UPDATEHOSTS</span><span class="p">)</span>
      <span class="p">{</span>
          <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_FORBIDDEN</span><span class="p">;</span>
      <span class="p">}</span>
      <span class="nv">$cachefile</span> <span class="o">=</span> <span class="nx">APPPATH</span><span class="o">.</span><span class="s1">'../uc_client/data/cache/hosts.php'</span><span class="p">;</span>
      <span class="o">@</span><span class="nb">unlink</span><span class="p">(</span><span class="nv">$cachefile</span><span class="p">);</span>
      <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_SUCCEED</span><span class="p">;</span>
  <span class="p">}</span>

  <span class="k">private</span> <span class="k">function</span> <span class="nf">updateapps</span><span class="p">(</span><span class="nv">$get</span><span class="p">,</span> <span class="nv">$post</span><span class="p">)</span>
  <span class="p">{</span>
      <span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">self</span><span class="o">::</span><span class="na">API_UPDATEAPPS</span><span class="p">)</span>
      <span class="p">{</span>
          <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_FORBIDDEN</span><span class="p">;</span>
      <span class="p">}</span>
      <span class="nv">$cachefile</span> <span class="o">=</span> <span class="nx">APPPATH</span><span class="o">.</span><span class="s1">'../uc_client/data/cache/apps.php'</span><span class="p">;</span>
      <span class="o">@</span><span class="nb">unlink</span><span class="p">(</span><span class="nv">$cachefile</span><span class="p">);</span>
      <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_SUCCEED</span><span class="p">;</span>
  <span class="p">}</span>

  <span class="k">private</span> <span class="k">function</span> <span class="nf">updateclient</span><span class="p">(</span><span class="nv">$get</span><span class="p">,</span> <span class="nv">$post</span><span class="p">)</span>
  <span class="p">{</span>
      <span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">self</span><span class="o">::</span><span class="na">API_UPDATECLIENT</span><span class="p">)</span>
      <span class="p">{</span>
          <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_FORBIDDEN</span><span class="p">;</span>
      <span class="p">}</span>
      <span class="nv">$cachefile</span> <span class="o">=</span> <span class="nx">APPPATH</span><span class="o">.</span><span class="s1">'../uc_client/data/cache/settings.php'</span><span class="p">;</span>
      <span class="o">@</span><span class="nb">unlink</span><span class="p">(</span><span class="nv">$cachefile</span><span class="p">);</span>
      <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_SUCCEED</span><span class="p">;</span>
  <span class="p">}</span>

  <span class="k">private</span> <span class="k">function</span> <span class="nf">updatecredit</span><span class="p">(</span><span class="nv">$get</span><span class="p">,</span> <span class="nv">$post</span><span class="p">)</span>
  <span class="p">{</span>
      <span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">self</span><span class="o">::</span><span class="na">API_UPDATECREDIT</span><span class="p">)</span>
      <span class="p">{</span>
          <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_FORBIDDEN</span><span class="p">;</span>
      <span class="p">}</span>
      <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_SUCCEED</span><span class="p">;</span>
  <span class="p">}</span>

  <span class="k">private</span> <span class="k">function</span> <span class="nf">getcredit</span><span class="p">(</span><span class="nv">$get</span><span class="p">,</span> <span class="nv">$post</span><span class="p">)</span>
  <span class="p">{</span>
      <span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">self</span><span class="o">::</span><span class="na">API_GETCREDIT</span><span class="p">)</span>
      <span class="p">{</span>
          <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_FORBIDDEN</span><span class="p">;</span>
      <span class="p">}</span>
      <span class="k">return</span> <span class="k">self</span><span class="o">::</span><span class="na">API_RETURN_SUCCEED</span><span class="p">;</span>
  <span class="p">}</span>

  <span class="k">public</span> <span class="k">static</span> <span class="k">function</span> <span class="nf">authcode</span><span class="p">(</span><span class="nv">$string</span><span class="p">,</span> <span class="nv">$operation</span> <span class="o">=</span> <span class="s1">'DECODE'</span><span class="p">,</span> <span class="nv">$key</span> <span class="o">=</span> <span class="s1">''</span><span class="p">,</span> <span class="nv">$expiry</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span>
  <span class="p">{</span>
      <span class="nv">$ckey_length</span> <span class="o">=</span> <span class="mi">4</span><span class="p">;</span>
      <span class="nv">$key</span> <span class="o">=</span> <span class="nb">md5</span><span class="p">(</span><span class="nv">$key</span> <span class="o">?</span> <span class="nv">$key</span> <span class="o">:</span> <span class="nx">UC_KEY</span><span class="p">);</span>
      <span class="nv">$keya</span> <span class="o">=</span> <span class="nb">md5</span><span class="p">(</span><span class="nx">substr</span><span class="p">(</span><span class="nv">$key</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">16</span><span class="p">));</span>
      <span class="nv">$keyb</span> <span class="o">=</span> <span class="nb">md5</span><span class="p">(</span><span class="nx">substr</span><span class="p">(</span><span class="nv">$key</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">16</span><span class="p">));</span>
      <span class="nv">$keyc</span> <span class="o">=</span> <span class="nv">$ckey_length</span> <span class="o">?</span> <span class="p">(</span><span class="nv">$operation</span> <span class="o">==</span> <span class="s1">'DECODE'</span> <span class="o">?</span> <span class="nx">substr</span><span class="p">(</span><span class="nv">$string</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nv">$ckey_length</span><span class="p">)</span><span class="o">:</span> <span class="nx">substr</span><span class="p">(</span><span class="nb">md5</span><span class="p">(</span><span class="nb">microtime</span><span class="p">()),</span> <span class="o">-</span><span class="nv">$ckey_length</span><span class="p">))</span> <span class="o">:</span> <span class="s1">''</span><span class="p">;</span>

      <span class="nv">$cryptkey</span> <span class="o">=</span> <span class="nv">$keya</span><span class="o">.</span><span class="nb">md5</span><span class="p">(</span><span class="nv">$keya</span><span class="o">.</span><span class="nv">$keyc</span><span class="p">);</span>
      <span class="nv">$key_length</span> <span class="o">=</span> <span class="nb">strlen</span><span class="p">(</span><span class="nv">$cryptkey</span><span class="p">);</span>

      <span class="nv">$string</span> <span class="o">=</span> <span class="nv">$operation</span> <span class="o">==</span> <span class="s1">'DECODE'</span> <span class="o">?</span> <span class="nb">base64_decode</span><span class="p">(</span><span class="nx">substr</span><span class="p">(</span><span class="nv">$string</span><span class="p">,</span> <span class="nv">$ckey_length</span><span class="p">))</span> <span class="o">:</span> <span class="nb">sprintf</span><span class="p">(</span><span class="s1">'%010d'</span><span class="p">,</span> <span class="nv">$expiry</span> <span class="o">?</span> <span class="nv">$expiry</span> <span class="o">+</span> <span class="nb">time</span><span class="p">()</span> <span class="o">:</span> <span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="nx">substr</span><span class="p">(</span><span class="nb">md5</span><span class="p">(</span><span class="nv">$string</span><span class="o">.</span><span class="nv">$keyb</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">16</span><span class="p">)</span><span class="o">.</span><span class="nv">$string</span><span class="p">;</span>
      <span class="nv">$string_length</span> <span class="o">=</span> <span class="nb">strlen</span><span class="p">(</span><span class="nv">$string</span><span class="p">);</span>

      <span class="nv">$result</span> <span class="o">=</span> <span class="s1">''</span><span class="p">;</span>
      <span class="nv">$box</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">255</span><span class="p">);</span>

      <span class="nv">$rndkey</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
      <span class="k">for</span><span class="p">(</span><span class="nv">$i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nv">$i</span> <span class="o">&lt;=</span> <span class="mi">255</span><span class="p">;</span> <span class="nv">$i</span><span class="o">++</span><span class="p">)</span>
      <span class="p">{</span>
          <span class="nv">$rndkey</span><span class="p">[</span><span class="nv">$i</span><span class="p">]</span> <span class="o">=</span> <span class="nb">ord</span><span class="p">(</span><span class="nv">$cryptkey</span><span class="p">[</span><span class="nv">$i</span> <span class="o">%</span> <span class="nv">$key_length</span><span class="p">]);</span>
      <span class="p">}</span>

      <span class="k">for</span><span class="p">(</span><span class="nv">$j</span> <span class="o">=</span> <span class="nv">$i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nv">$i</span> <span class="o">&lt;</span> <span class="mi">256</span><span class="p">;</span> <span class="nv">$i</span><span class="o">++</span><span class="p">)</span>
      <span class="p">{</span>
          <span class="nv">$j</span> <span class="o">=</span> <span class="p">(</span><span class="nv">$j</span> <span class="o">+</span> <span class="nv">$box</span><span class="p">[</span><span class="nv">$i</span><span class="p">]</span> <span class="o">+</span> <span class="nv">$rndkey</span><span class="p">[</span><span class="nv">$i</span><span class="p">])</span> <span class="o">%</span> <span class="mi">256</span><span class="p">;</span>
          <span class="nv">$tmp</span> <span class="o">=</span> <span class="nv">$box</span><span class="p">[</span><span class="nv">$i</span><span class="p">];</span>
          <span class="nv">$box</span><span class="p">[</span><span class="nv">$i</span><span class="p">]</span> <span class="o">=</span> <span class="nv">$box</span><span class="p">[</span><span class="nv">$j</span><span class="p">];</span>
          <span class="nv">$box</span><span class="p">[</span><span class="nv">$j</span><span class="p">]</span> <span class="o">=</span> <span class="nv">$tmp</span><span class="p">;</span>
      <span class="p">}</span>

      <span class="k">for</span><span class="p">(</span><span class="nv">$a</span> <span class="o">=</span> <span class="nv">$j</span> <span class="o">=</span> <span class="nv">$i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nv">$i</span> <span class="o">&lt;</span> <span class="nv">$string_length</span><span class="p">;</span> <span class="nv">$i</span><span class="o">++</span><span class="p">)</span>
      <span class="p">{</span>
          <span class="nv">$a</span> <span class="o">=</span> <span class="p">(</span><span class="nv">$a</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="mi">256</span><span class="p">;</span>
          <span class="nv">$j</span> <span class="o">=</span> <span class="p">(</span><span class="nv">$j</span> <span class="o">+</span> <span class="nv">$box</span><span class="p">[</span><span class="nv">$a</span><span class="p">])</span> <span class="o">%</span> <span class="mi">256</span><span class="p">;</span>
          <span class="nv">$tmp</span> <span class="o">=</span> <span class="nv">$box</span><span class="p">[</span><span class="nv">$a</span><span class="p">];</span>
          <span class="nv">$box</span><span class="p">[</span><span class="nv">$a</span><span class="p">]</span> <span class="o">=</span> <span class="nv">$box</span><span class="p">[</span><span class="nv">$j</span><span class="p">];</span>
          <span class="nv">$box</span><span class="p">[</span><span class="nv">$j</span><span class="p">]</span> <span class="o">=</span> <span class="nv">$tmp</span><span class="p">;</span>
          <span class="nv">$result</span> <span class="o">.=</span> <span class="nb">chr</span><span class="p">(</span><span class="nb">ord</span><span class="p">(</span><span class="nv">$string</span><span class="p">[</span><span class="nv">$i</span><span class="p">])</span> <span class="o">^</span> <span class="p">(</span><span class="nv">$box</span><span class="p">[(</span><span class="nv">$box</span><span class="p">[</span><span class="nv">$a</span><span class="p">]</span> <span class="o">+</span> <span class="nv">$box</span><span class="p">[</span><span class="nv">$j</span><span class="p">])</span> <span class="o">%</span> <span class="mi">256</span><span class="p">]));</span>
      <span class="p">}</span>

      <span class="k">if</span><span class="p">(</span><span class="nv">$operation</span> <span class="o">==</span> <span class="s1">'DECODE'</span><span class="p">)</span>
      <span class="p">{</span>
          <span class="k">if</span><span class="p">((</span><span class="nx">substr</span><span class="p">(</span><span class="nv">$result</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">||</span> <span class="nx">substr</span><span class="p">(</span><span class="nv">$result</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span> <span class="o">-</span> <span class="nb">time</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="nx">substr</span><span class="p">(</span><span class="nv">$result</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">16</span><span class="p">)</span> <span class="o">==</span> <span class="nx">substr</span><span class="p">(</span><span class="nb">md5</span><span class="p">(</span><span class="nx">substr</span><span class="p">(</span><span class="nv">$result</span><span class="p">,</span> <span class="mi">26</span><span class="p">)</span><span class="o">.</span><span class="nv">$keyb</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">16</span><span class="p">))</span>
          <span class="p">{</span>
              <span class="k">return</span> <span class="nx">substr</span><span class="p">(</span><span class="nv">$result</span><span class="p">,</span> <span class="mi">26</span><span class="p">);</span>
          <span class="p">}</span>
          <span class="k">else</span>
          <span class="p">{</span>
              <span class="k">return</span> <span class="s1">''</span><span class="p">;</span>
          <span class="p">}</span>
      <span class="p">}</span>
      <span class="k">else</span>
      <span class="p">{</span>
          <span class="k">return</span> <span class="nv">$keyc</span><span class="o">.</span><span class="nb">str_replace</span><span class="p">(</span><span class="s1">'='</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="nb">base64_encode</span><span class="p">(</span><span class="nv">$result</span><span class="p">));</span>
      <span class="p">}</span>
  <span class="p">}</span>

  <span class="k">public</span> <span class="k">static</span> <span class="k">function</span> <span class="nf">serialize</span><span class="p">(</span><span class="nv">$arr</span><span class="p">,</span> <span class="nv">$htmlOn</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span>
  <span class="p">{</span>
      <span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="nb">function_exists</span><span class="p">(</span><span class="s1">'xml_serialize'</span><span class="p">))</span>
      <span class="p">{</span>
          <span class="k">require</span> <span class="nx">APPPATH</span><span class="o">.</span><span class="s1">'../uc_client/lib/xml.class.php'</span><span class="p">;</span>
      <span class="p">}</span>
      <span class="k">return</span> <span class="nx">xml_serialize</span><span class="p">(</span><span class="nv">$arr</span><span class="p">,</span> <span class="nv">$htmlOn</span><span class="p">);</span>
  <span class="p">}</span>

  <span class="k">public</span> <span class="k">static</span> <span class="k">function</span> <span class="nf">unserialize</span><span class="p">(</span><span class="nv">$xml</span><span class="p">,</span> <span class="nv">$htmlOn</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span>
  <span class="p">{</span>
      <span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="nb">function_exists</span><span class="p">(</span><span class="s1">'xml_serialize'</span><span class="p">))</span>
      <span class="p">{</span>
          <span class="k">require</span> <span class="nx">APPPATH</span><span class="o">.</span><span class="s1">'../uc_client/lib/xml.class.php'</span><span class="p">;</span>
      <span class="p">}</span>
      <span class="k">return</span> <span class="nx">xml_unserialize</span><span class="p">(</span><span class="nv">$xml</span><span class="p">,</span> <span class="nv">$htmlOn</span><span class="p">);</span>
  <span class="p">}</span>

  <span class="k">public</span> <span class="k">static</span> <span class="k">function</span> <span class="nf">gbk2utf8</span><span class="p">(</span><span class="nv">$string</span><span class="p">)</span>
  <span class="p">{</span>
      <span class="k">return</span> <span class="nb">iconv</span><span class="p">(</span><span class="s2">"GB2312"</span><span class="p">,</span> <span class="s2">"UTF-8//IGNORE"</span><span class="p">,</span> <span class="nv">$string</span><span class="p">);</span>
  <span class="p">}</span>

  <span class="k">public</span> <span class="k">static</span> <span class="k">function</span> <span class="nf">utf82gbk</span><span class="p">(</span><span class="nv">$string</span><span class="p">)</span>
  <span class="p">{</span>
      <span class="k">return</span> <span class="nb">iconv</span><span class="p">(</span><span class="s2">"UTF-8"</span><span class="p">,</span> <span class="s2">"GB2312//IGNORE"</span><span class="p">,</span> <span class="nv">$string</span><span class="p">);</span>
  <span class="p">}</span>

<span class="p">}</span>

</pre></div>
</li>
</ul>
</li>
</ul>

<h4>运行</h4>

<ul>
<li>
<p>打开 <a href="http://ci.connect.uc/ci">http://ci.connect.uc/ci</a></p>

<p><img src="/public/uploads/news/demo_step_1.png" alt="image" style="max-width:100%" /></p>
</li>
<li>
<p>点击页面链接进行登录操作</p>

<p><img src="/public/uploads/news/demo_step_2_1.png" alt="image" style="max-width:100%" /></p>

<p><img src="/public/uploads/news/demo_step_2_2.png" alt="image" style="max-width:100%" /></p>
</li>
<li>
<p>刷新即可看到已登录</p>

<p><img src="/public/uploads/news/demo_step_3.png" alt="image" style="max-width:100%" /></p>
</li>
<li>
<p>点击页面链接进行退出操作</p>

<p><img src="/public/uploads/news/demo_step_4.png" alt="image" style="max-width:100%" /></p>
</li>
<li>
<p>再次刷新即可看到已退出</p>

<p><img src="/public/uploads/news/demo_step_5.png" alt="image" style="max-width:100%" /></p>
</li>
</ul>

<p>你还可以观看演示程序的运行视频：</p>
<p><embed src="http://player.youku.com/player.php/sid/XNjA1MDA2NzMy/v.swf" allowFullScreen="true" quality="high" width="480" height="400" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash"></embed></p>

<p>本教程不含自带用户数据库的情况下，在自有用户表的情况下，处理逻辑类似，要有一个字段记录 UCenter 的唯一用户 ID，同步登录和退出的逻辑里使用该 ID 进行相应的操作。</p>

<p>有任何问题请发 <a href="https://github.com/CodeIgniter-Chinese/ucenter-how-to/issues" target="_blank">issues</a>。</p>]]></description>
      <dc:subject></dc:subject>
      <dc:date>2013-09-04 17:00:00+08:00</dc:date>
    </item>
    <item>
      <title>CodeIgniter 中国社区官方微信开通！</title>
      <link>https://codeigniter.org.cn/legacy/news/codeigniter_weixin_wechat</link>
      <description><![CDATA[<p>CodeIgniter 中国社区官方微信目前主要提供搜索服务，陆续会根据大家的建议开发新的功能。</p>
<p>微信号: <span style="color:red">codeigniter-cn</span></p>
<p><img src="http://codeigniter.org.cn/images/weixin_qrcode.jpg" /></p>
<p>关注后会提示大家如何使用，谢谢！</p>]]></description>
      <dc:subject></dc:subject>
      <dc:date>2013-09-01 15:34:00+08:00</dc:date>
    </item>
    <item>
      <title>分享: 33号铺 - 开源淘宝客瀑布流发布和管理系统</title>
      <link>https://codeigniter.org.cn/legacy/news/project_33pu</link>
      <description><![CDATA[<p>33号铺是一个简单好用的淘宝客瀑布流发布、管理系统。</p>

<p>开源项目地址：<a href="https://github.com/yuguo/33pu">https://github.com/yuguo/33pu</a></p>

<p>作者：<a href="http://yuguo.us/">Yuguo</a></p>

<h4>设计理念</h4>

<p>33号铺的设计理念是，做一个体验最好的导购系统。</p>

<ul>
<li>相信PGC（Professional Generated Content），而不是蘑菇街那样的UGC。但不排除加入投票系统。</li>
<li>相信人工的推荐，而不是机器采集。机器采集的垃圾站我见过很多，大部分是根据taobao API批量拉取数据，这个功能很好做，但是我不希望做自动采集的站点，这对用户是没有好处的。所以33号铺的优化目标是尽量优化人工采集的流程，后台也好，书签也好，url转化也好。</li>
<li>重视用户体验，相信用户体验也可以卖钱。所以33号铺会不断优化站长和访客的体验。</li>
</ul>

<h4>下载</h4>

<p>Clone代码到本地，<code>git clone git://github.com/yuguo/33pu.git</code></p>

<p>或者下载最新的ZIP</p>

<h4>安装</h4>

<ol>
<li>配置 <code>application/config/config.php</code> 为你的站点url，配置 <code>application/config/site_info.php</code> 中的站点名称、appkey、secret还有最重要的taobaoke pid。</li>
<li>首先自己在数据库中创建一个数据库（比如使用phpmyadmin之类的可视化工具），然后配置 <code>application/database</code> 中的 <code>username</code>，<code>password</code>，<code>database</code></li>
<li>如果使用**Apache服务器**，配置 <code>.htaccess</code> 中的RewriteBase为程序锁在文件夹目录，比如<code>http://localhost/33pu/</code> 即为 <code>33pu</code> ，如果是在根目录比如 <code>http://localhost/</code> 即为 <code>/</code>。（如果使用**Nginx服务器**，配置见最后说明）如果没有正确配置.htaccess，可能会在后面的步骤中出现404，这时候在站点后面加上一个index.php即可。</li>
<li>访问 <code>站点url/login/install</code> ，输入管理员的email和密码</li>
<li>访问 <code>站点url/login</code> 登录</li>
<li>访问 <code>站点url/admin/cat</code> 新增你的站点的商品类别（类别会出现在首页tab中）</li>
<li>访问 <code>站点url/admin/cat</code> 修改类别slug为英文（中文url目前有bug，而且不优雅）</li>
<li>访问 <code>站点url/admin</code> ，选择类别之后搜索关键词，点击某个条目之后再选择图片，条目就会出现在首页（请选择类别之后再搜索关键词，这样条目会自动添加到该类别）</li>
<li>请修改 <code>application/views/home.php</code> 底部的统计代码为你自己的百度统计或者Google Analytics.</li>
</ol>

<h4>说明</h4>

<ul>
<li>后台搜索的时候的过滤条件在后台配置是，您可以自己修改配置<code>application/models/m_taobaoapi.php</code>：
<ul>
<li>佣金比5% - 50%</li>
<li>天猫商品</li>
<li>按卖家信用排序</li>
<li>每页80条</li>
</ul>
</li>
<li>关于为什么要想到做这个系统的两篇文章：<a href="http://yuguo.us/weblog/half-first/">先做一半</a> <a href="http://yuguo.us/weblog/a-cps-cms-build-with-taobao-api/">利用淘宝API构建淘宝客自动发布系统</a></li>
<li>为了帮助更多人，希望你能保留底部的版权，声明站点是由33号铺构建，但这并不是必须的</li>
</ul>

<h4>系统架构</h4>

<ul>
<li>整站大部分代码是PHP，基于<a href="http://codeigniter.org.cn/">CodeIgniter</a>构建，CodeIgniter是一个非常适合快速开发的PHP框架。</li>
<li>后台UI基于<a href="http://twitter.github.com/bootstrap/">Bootstrap</a>构建。</li>
<li>整站的JS都是基于<a href="http://jquery.com/">jQuery</a>构建。</li>
<li>数据来源于<a href="http://open.taobao.com/index.htm">淘宝开放平台</a>。</li>
</ul>

<h4>Nginx配置说明</h4>

<pre>location / {
    index index.php;
    if (-f $request_filename/index.php){
            rewrite (.*) $1/index.php;
    }
    if (!-f $request_filename){
            rewrite (.*) /index.php;
    }
}</pre>

<h4>联系</h4>

<p>遇到问题先看<a href="https://github.com/yuguo/33pu/wiki/FAQ">FAQ</a>，再更新到最新版看看问题有无解决，如果还有问题请联系Yuguo。</p>

<p>代码还在不断完善中，有任何意见和建议：</p>

<ul>
<li>QQ群：230831981（敲门砖：33号铺）</li>
<li>Email：<a href="mailto:fishguo321@gmail.com">fishguo321@gmail.com</a></li>
<li>腾讯微博：<a href="http://t.qq.com/chandleryu">http://t.qq.com/chandleryu</a></li>
<li>Twitter：<a href="https://twitter.com/yuguo">yuguo</a></li>
<li>个人主页：<a href="http://yuguo.us">http://yuguo.us</a></li>
</ul>]]></description>
      <dc:subject></dc:subject>
      <dc:date>2013-04-08 18:35:00+08:00</dc:date>
    </item>
    <item>
      <title>CodeIgniter 2.1.3 for SAE 发布了！</title>
      <link>https://codeigniter.org.cn/legacy/news/codeigniter_sina_app_engine_sae</link>
      <description><![CDATA[<p>今天，CodeIgniter 2.1.3 for SAE 发布了，CIer 可以无缝移植自己的 CI 代码到 SAE 平台了！</p>

<p>为适应SAE环境，主要修改如下：</p>

<ul>
<li>Mysql数据库 进行了读写的主从分离（主库写、从库读）</li>
<li>数据缓存 与 页面缓存 支持memcache和kvdb两种方式</li>
<li>Email类 使用原生SAE的邮件类</li>
<li>文件上传类 使用Storage保存</li>
<li>图像处理类 仅支持GD2函数</li>
<li>验证码类 使用原生SAE的Vcode类</li>
<li>日志类 使用原生SAE日志中心</li>
</ul>

<p>若需隐藏index.php，在config.yaml中添加以下代码，且修改配置文件 $config['index_page'] = '';</p>
<p>handle:<br />
  - rewrite: if(!is_dir() && !is_file() && path~"/") goto "/index.php/%{QUERY_STRING}"</p>

<p>当前版本由 <a href="http://weibo.com/moonight7">@月夜风KeN</a> 开发</p>

<p>安装请访问 SAE 应用商店：<a href="http://sae.sina.com.cn/?m=apps&a=detail&aid=161">http://sae.sina.com.cn/?m=apps&a=detail&aid=161</a></p>

<p>演示地址：<a href="http://codeigniter.sinaapp.com/">http://codeigniter.sinaapp.com/</a></p>

<p>感谢大家的支持！</p>]]></description>
      <dc:subject></dc:subject>
      <dc:date>2013-03-13 12:06:00+08:00</dc:date>
    </item>
    <item>
      <title>分享: 社交化登录类库 Oauth2 SocialAuth</title>
      <link>https://codeigniter.org.cn/legacy/news/oauth2_socialauth</link>
      <description><![CDATA[<p>本程序修改自 <a href="https://github.com/philsturgeon/codeigniter-oauth2">codeigniter-oauth2</a>. 代码默认适配 CodeIgniter 框架，简单修改可以适用于任何框架或者非框架使用。有任何疑问或想法请issue或者pull request。</p>

<p>开源项目地址：<a href="https://github.com/CodeIgniter-Chinese/Oauth2-SocialAuth-for-CodeIgniter">https://github.com/CodeIgniter-Chinese/Oauth2-SocialAuth-for-CodeIgniter</a></p>

<p>作者：<a href="http://codeigniter.org.cn/forums/space-uid-6570.html">Jeongee</a></p>

<p>修改点</p>
<ul>
<li>可以运行与spark或者none-spark环境下。</li>
<li>增加若干参数，支持国内各大平台。</li>
<li>加入csrf验证</li>
<li>原版providers被移动到provides/beyond the wall/文件夹中，使用者可根据需求自行移动出来使用。</li>
</ul>

<p>新增的 providers</p>
<ul>
<li>新浪微博</li>
<li>QQ</li>
<li>腾讯微博</li>
<li>百度</li>
<li>360</li>
<li>淘宝</li>
<li>网易微博</li>
<li>搜狐微博</li>
<li>豆瓣</li>
<li>天翼</li>
<li>人人</li>
<li>移动微博</li>
<li>开心网</li>
<li>多说评论系统</li>
<li>飞信</li>
</ul>

<p><a href="http://oauth24codeigniter.sinaapp.com/">演示站点</a></p>]]></description>
      <dc:subject></dc:subject>
      <dc:date>2013-03-12 13:43:00+08:00</dc:date>
    </item>
    <item>
      <title>CodeIgniter 中国第二次技术交流会</title>
      <link>https://codeigniter.org.cn/legacy/news/codeigniter_conference_2012_11</link>
      <description><![CDATA[<p>CI 中国第二次技术交流会将在 2012.11.18 于<b>北京</b>举办！现在开始接受大家的报名！</p>

<p>本次交流会主要以 CIer 交流和分享为主。</p>

<p>
<b>日期</b>：2012.11.18（周日）14:00 - 18:00<br />
<b>地点</b>：北京市朝阳区北三环西坝河西里18号 正通创意中心酷6网
</p>

<p>
<b>分享主题一：《创业团队开发模式和工作流程探讨》</b><br />
分享人：<a href="http://codeigniter.org.cn/forums/?2748" target="_blank">Saturn</a>；CI中国管理团队成员，<a href="http://codeigniter.org.cn/forums/forum-stblog-1.html" target="_blank">STblog</a>作者，广州游子公司创始人，印天网真公司技术总监<br />
主题介绍：以 CI 作为 Web 开发框架为例，探讨关于小型互联网团队从远程协作(Git-Flow)、程序开发(CodeIgniter)到自动化部署(Git Hook/Hudson)的低成本解决方案。
</p>

<p>
<b>分享主题二：《MVVM in CodeIgniter》</b><br />
分享人：<a href="http://codeigniter.org.cn/forums/?2031" target="_blank">Visvoy</a>；CI中国元老级版主，<a href="http://codeigniter.org.cn/forums/thread-1690-1-1.html" target="_blank">曾在CI中国引发关于Cache的大讨论</a>，目前在 okbuy.com(好乐买) 负责仓储和物流系统的研发<br />
主题介绍：将MvvM的数据驱动模型与CI结合的一次实践，实现Controller与View完全分离，View多态的特性，以及不用写JS即可实现JS验证的方法。
</p>

<p>
<b>分享主题三：《复杂业务逻辑的解决之道》</b><br />
分享人：<a href="http://codeigniter.org.cn/forums/?16818" target="_blank">rainer_H</a>；climbPHP 作者(基于 CI 的扩展框架)<br />
主题介绍：climbPHP，基于 CodeIgniter 的专注于处理复杂业务逻辑的扩展框架。涉及到的主要范围包括：Restful 架构，事件驱动，AOP，ORM。
</p>

<p><br /><span style="font-size:22px;font-weight:bold;">详情和报名请访问<a href="http://codeigniter.org.cn/forums/thread-14689-1-1.html">论坛报名贴</a>~~</span>
</p>

<p>
<br />
<img src="http://codeigniter.org.cn/forums/data/attachment/forum/201210/24/141655rq8il15ql2lqf2q0.jpg" alt="合影" />
</p>]]></description>
      <dc:subject></dc:subject>
      <dc:date>2012-10-31 16:46:00+08:00</dc:date>
    </item>
    <item>
      <title>CodeIgniter 发布 2.1.3 版</title>
      <link>https://codeigniter.org.cn/legacy/news/codeigniter_2.1.3_released</link>
      <description><![CDATA[<p>CodeIgniter 发布 2.1.3 版，主要带来一些安全性提升和功能增强。其中最重要的是，CodeIgniter 2.1.3 版改善了输入类中的 IP 地址解析功能，以防止在某些情况下可能出现的欺骗。所以，如果你的应用需要信任用户的 IP 地址，以实现访问控制等功能，那么你应该升级到 2.1.3 版。</p>

<p>在<a href="http://codeigniter.com/user_guide/changelog.html">更改记录</a>中可以找到完整的更新内容清单，你可以在<a href="http://codeigniter.org.cn/download">这里下载 2.1.3 版</a>，当然，<a href="http://codeigniter.com/user_guide/installation/upgrading.html">这里也有升级说明</a>，以帮助您从旧版本迁移到新版本。</p>]]></description>
      <dc:subject></dc:subject>
      <dc:date>2012-10-15 11:37:00+08:00</dc:date>
    </item>

    </channel>
</rss>