<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:wfw="http://wellformedweb.org/CommentAPI/"
     >
  <channel>
    <title>Topdog.za.net</title>
    <link>http://www.topdog.za.net</link>
    <description>A bored sysadmin</description>
    <pubDate>Fri, 26 Feb 2016 10:06:56 GMT</pubDate>
    <generator>Blogofile</generator>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>PHP CouchDB Extension</title>
      <link>http://www.topdog.za.net/2010/08/11/php-couchdb-extension</link>
      <pubDate>Wed, 11 Aug 2010 09:00:00 SAST</pubDate>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[CouchDB]]></category>
      <guid isPermaLink="true">http://www.topdog.za.net/2010/08/11/php-couchdb-extension</guid>
      <description>PHP CouchDB Extension</description>
      <content:encoded><![CDATA[<p>The CouchDB extension allows PHP developers to easily manipulate CouchDB
documents stored on CouchDB servers using an object-oriented API. The
extension implements most of the CouchDB API with the ultimate goal being full
support. The server JSON responses are automatically decoded into native PHP
objects or arrays.</p>
<p>Development is on <a href="http://github.com/akissa/php-couchdb">Github</a> you can pull
the source from there.</p>
<h2>Features</h2>
<ul>
<li>Supports the largest part of the CouchDB API (Database API, Document API, View API, Bulk Document API).</li>
<li>Supports both Cookie and Basic authentication.</li>
<li>Supports built in encoding and decoding of JSON.</li>
<li>Supports replication.</li>
<li>Supports server functions (configuration, status, stats).</li>
<li>Supports user management.</li>
</ul>
<h2>Download</h2>
<p><a href="http://www.topdog-software.com/files/php-
couchdb/couchdb-0.0.2a.tgz">Download</a></p>
<h2>Installation</h2>
<h3>Using pecl command</h3>
<p>Download the source</p>
<p>Run the command </p>
<pre><code>pecl install couchdb-0.0.2a.tgz
</code></pre>
<p>Add "extension=couchdb.so" to your php.ini file</p>
<h3>Using sources</h3>
<p>Download the source
Unpack the tarball</p>
<pre><code>tar xzvf couchdb-0.0.2a.tgz
</code></pre>
<p>Enter the source directory and run</p>
<pre><code>phpize &amp;&amp; ./configure &amp;&amp; make &amp;&amp; make install
</code></pre>
<p>Add "extension=couchdb.so" to your php.ini file.</p>
<h3>Build into PHP</h3>
<p>Download the source
Unpack the tarball to the PHP extensions dir</p>
<pre><code>tar xzvf couchdb-0.0.2a.tgz -C $PHP_SOURCE/ext/"
</code></pre>
<p>Reconfigure the PHP source</p>
<pre><code>rm configure &amp;&amp; ./buildconf –force
</code></pre>
<p>Configure php with</p>
<pre><code>./configure –enable-couchdb
</code></pre>
<h2>Use</h2>
<p>The documentation is still a work in progress can be found <a href="http://www
.topdog-software.com/files/couchdb-manual/book.couchdb.html">here</a>, help in
expanding the documentation is welcome.</p>
<h2>Example</h2>
<p>The following example is included in the source tarball, provides some
guideline on using the extension.</p>
<div class="pygments_murphy"><pre><span class="cp">&lt;?php</span>
<span class="cm">/* $ Id: */</span>
<span class="cm">/*</span>
<span class="cm">Examples on how to use the PHP CouchDB extension</span>
<span class="cm">*/</span>

<span class="cm">/* Create the CouchdbClient object</span>
<span class="cm">The url can support authentication as well </span>
<span class="cm">- http://user:password@localhost:5984</span>

<span class="cm">- Authentication is both by basic and cookie</span>
<span class="cm">To use cookie authentication you need to set use_cookie_auth to true</span>
<span class="cm"> CouchdbClient(&quot;http://user:pass@localhost:5984&quot;,true);</span>

<span class="cm">The url could be https</span>
<span class="cm">- https://localhost:5984</span>
<span class="cm">You may have to set the CA info using CouchdbClient::setCAPath()</span>

<span class="cm">*/</span>
<span class="k">try</span> <span class="p">{</span>
    <span class="nv">$conn</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">CouchdbClient</span><span class="p">(</span><span class="s2">&quot;http://localhost:5984&quot;</span><span class="p">);</span>
    <span class="k">print</span> <span class="s2">&quot;Creating Database test_database :&quot;</span><span class="p">;</span>
    <span class="k">if</span><span class="p">(</span><span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">createDatabase</span><span class="p">(</span><span class="s2">&quot;test_database&quot;</span><span class="p">)){</span>
        <span class="k">print</span> <span class="s2">&quot;PASS</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="p">}</span><span class="k">else</span><span class="p">{</span>
        <span class="k">print</span> <span class="s2">&quot;FAIL</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="p">}</span>
    <span class="k">echo</span> <span class="s2">&quot;Getting Database list</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="nv">$result</span> <span class="o">=</span> <span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">listDatabases</span><span class="p">();</span>
    <span class="nb">print_r</span><span class="p">(</span><span class="nv">$result</span><span class="p">);</span>
    <span class="k">print</span> <span class="s2">&quot;===========================</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="k">print</span> <span class="s2">&quot;Selecting Database test_database</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">selectDB</span><span class="p">(</span><span class="s2">&quot;test_database&quot;</span><span class="p">);</span>
    <span class="k">print</span> <span class="s2">&quot;===========================</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="k">print</span> <span class="s2">&quot;Getting Database info</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="nv">$result</span> <span class="o">=</span> <span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">getDatabaseInfo</span><span class="p">();</span>
    <span class="nb">print_r</span><span class="p">(</span><span class="nv">$result</span><span class="p">);</span>
    <span class="k">print</span> <span class="s2">&quot;===========================</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="k">print</span> <span class="s2">&quot;Store document to DB</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="cm">/* The document can be created in multiple ways</span>
<span class="cm">   - PHP stdclass object</span>
<span class="cm">   - PHP array</span>
<span class="cm">   - JSON encoded string</span>

<span class="cm">   # Using PHP stdclass</span>
<span class="cm">   $new_doc = new stdClass();</span>
<span class="cm">   $new_doc-&gt;title = &quot;New content&quot;;</span>
<span class="cm">   $new_doc-&gt;_id = &quot;BlogPost65&quot;;</span>

<span class="cm">   # Using PHP array</span>
<span class="cm">   #$new_doc = array(_id=&gt;Blogpost65,title=&gt;&quot;New content&quot;);</span>

<span class="cm">   # Using JSON string</span>
<span class="cm">   $new_doc = &#39;{&quot;_id&quot;:&quot;Blogpost65&quot;,&quot;title&quot;:&quot;New content&quot;}&#39;;</span>
<span class="cm">   */</span>
    <span class="nv">$new_doc</span> <span class="o">=</span> <span class="s1">&#39;{&quot;_id&quot;:&quot;Blogpost65&quot;,&quot;title&quot;:&quot;New content&quot;}&#39;</span><span class="p">;</span>
    <span class="nv">$last_result</span> <span class="o">=</span> <span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">storeDoc</span><span class="p">(</span><span class="nv">$new_doc</span><span class="p">);</span>
    <span class="nb">print_r</span><span class="p">(</span><span class="nv">$last_result</span><span class="p">);</span>
    <span class="k">print</span> <span class="s2">&quot;===========================</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="k">print</span> <span class="s2">&quot;Store multiple documents to the DB</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="nv">$new_docs</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
        <span class="k">array</span><span class="p">(</span><span class="s1">&#39;type&#39;</span><span class="o">=&gt;</span><span class="s1">&#39;blogpost&#39;</span><span class="p">,</span><span class="s1">&#39;title&#39;</span><span class="o">=&gt;</span><span class="s1">&#39;post&#39;</span><span class="p">),</span>
        <span class="k">array</span><span class="p">(</span><span class="s1">&#39;type&#39;</span><span class="o">=&gt;</span><span class="s1">&#39;blogcomment&#39;</span><span class="p">,</span><span class="s1">&#39;blogpost&#39;</span><span class="o">=&gt;</span><span class="s1">&#39;post&#39;</span><span class="p">,</span><span class="s1">&#39;depth&#39;</span><span class="o">=&gt;</span><span class="mi">1</span><span class="p">),</span>
        <span class="k">array</span><span class="p">(</span><span class="s1">&#39;type&#39;</span><span class="o">=&gt;</span><span class="s1">&#39;blogcomment&#39;</span><span class="p">,</span><span class="s1">&#39;blogpost&#39;</span><span class="o">=&gt;</span><span class="s1">&#39;post&#39;</span><span class="p">,</span><span class="s1">&#39;depth&#39;</span><span class="o">=&gt;</span><span class="mi">2</span><span class="p">)</span>
        <span class="p">);</span>
    <span class="nv">$result</span> <span class="o">=</span> <span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">storeDocs</span><span class="p">(</span><span class="nv">$new_docs</span><span class="p">);</span>
    <span class="nb">print_r</span><span class="p">(</span><span class="nv">$result</span><span class="p">);</span>
    <span class="k">print</span> <span class="s2">&quot;===========================</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="cm">/* run in the examples directory or change the filename */</span>
        <span class="k">print</span> <span class="s2">&quot;Store attachment to DB</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="k">try</span> <span class="p">{</span>
        <span class="nv">$result</span> <span class="o">=</span> <span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">storeAttachment</span><span class="p">(</span><span class="s2">&quot;PHP_LOGO&quot;</span><span class="p">,</span><span class="s2">&quot;./php.gif&quot;</span><span class="p">,</span><span class="s2">&quot;php.gif&quot;</span><span class="p">,</span><span class="s2">&quot;image/gif&quot;</span><span class="p">);</span>
        <span class="nb">print_r</span><span class="p">(</span><span class="nv">$result</span><span class="p">);</span>
    <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">CouchdbClientException</span> <span class="nv">$f</span><span class="p">)</span> <span class="p">{</span>
        <span class="k">echo</span> <span class="nv">$f</span><span class="o">-&gt;</span><span class="na">getMessage</span><span class="p">()</span><span class="o">.</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="p">}</span>
    <span class="k">print</span> <span class="s2">&quot;===========================</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>  
    <span class="k">print</span> <span class="s2">&quot;Copy document to another document</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="nv">$result</span> <span class="o">=</span> <span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">copyDoc</span><span class="p">(</span><span class="s2">&quot;Blogpost65&quot;</span><span class="p">,</span><span class="s2">&quot;Blogpost66&quot;</span><span class="p">);</span>
    <span class="nb">print_r</span><span class="p">(</span><span class="nv">$result</span><span class="p">);</span>
    <span class="k">print</span> <span class="s2">&quot;===========================</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="k">print</span> <span class="s2">&quot;Get all documents in DB</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="nv">$result</span> <span class="o">=</span> <span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">getAllDocs</span><span class="p">();</span>
    <span class="nb">print_r</span><span class="p">(</span><span class="nv">$result</span><span class="p">);</span>
    <span class="k">print</span> <span class="s2">&quot;===========================</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="k">print</span> <span class="s2">&quot;Run a temp view query</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="nv">$view</span> <span class="o">=</span> <span class="s1">&#39;{&quot;map&quot; : &quot;function(doc) { if (doc.title==\&#39;New content\&#39;) { emit(null, doc); } }&quot;}&#39;</span><span class="p">;</span>
    <span class="nv">$result</span> <span class="o">=</span> <span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">getTempView</span><span class="p">(</span><span class="nv">$view</span><span class="p">);</span>
    <span class="nb">print_r</span><span class="p">(</span><span class="nv">$result</span><span class="p">);</span>
    <span class="k">print</span> <span class="s2">&quot;===========================</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="k">print</span> <span class="s2">&quot;Delete a document</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">deleteDoc</span><span class="p">(</span><span class="s2">&quot;Blogpost65&quot;</span><span class="p">,</span><span class="nv">$last_result</span><span class="o">-&gt;</span><span class="na">rev</span><span class="p">);</span>
    <span class="nv">$result</span> <span class="o">=</span> <span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">getLastResponse</span><span class="p">(</span><span class="k">true</span><span class="p">);</span>
    <span class="nb">print_r</span><span class="p">(</span><span class="nv">$result</span><span class="p">);</span>
    <span class="k">print</span> <span class="s2">&quot;===========================</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="k">print</span> <span class="s2">&quot;Compacting Database :&quot;</span><span class="p">;</span>
    <span class="k">if</span><span class="p">(</span><span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">compactDatabase</span><span class="p">())</span>
        <span class="k">print</span> <span class="s2">&quot;PASS</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="k">else</span>
        <span class="k">print</span> <span class="s2">&quot;FAIL</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="k">print</span> <span class="s2">&quot;===========================</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="k">print</span> <span class="s2">&quot;Getting updated Database info</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="nv">$result</span> <span class="o">=</span> <span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">getDatabaseInfo</span><span class="p">();</span>
    <span class="nb">print_r</span><span class="p">(</span><span class="nv">$result</span><span class="p">);</span>
    <span class="k">print</span> <span class="s2">&quot;===========================</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="k">print</span> <span class="s2">&quot;Create the replica database - test_replica_database :&quot;</span><span class="p">;</span>
    <span class="k">if</span><span class="p">(</span><span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">createDatabase</span><span class="p">(</span><span class="s2">&quot;test_replica_database&quot;</span><span class="p">))</span>
        <span class="k">print</span> <span class="s2">&quot;PASS</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="k">else</span>
        <span class="k">print</span> <span class="s2">&quot;FAIL</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="k">print</span> <span class="s2">&quot;Start Database replication</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="nv">$result</span> <span class="o">=</span> <span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">startReplication</span><span class="p">(</span><span class="s2">&quot;test_database&quot;</span><span class="p">,</span><span class="s2">&quot;test_replica_database&quot;</span><span class="p">);</span>
    <span class="nb">print_r</span><span class="p">(</span><span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">getLastResponse</span><span class="p">(</span><span class="k">true</span><span class="p">));</span>
    <span class="k">print</span> <span class="s2">&quot;===========================</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="c1">#print &quot;Sleeping 5 seconds to allow replication to start\n&quot;;</span>
    <span class="c1">#sleep(5);</span>
    <span class="c1">#print &quot;===========================\n&quot;;</span>
    <span class="k">print</span> <span class="s2">&quot;Drop the database :&quot;</span><span class="p">;</span>
    <span class="k">if</span><span class="p">(</span><span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">deleteDatabase</span><span class="p">(</span><span class="s2">&quot;test_database&quot;</span><span class="p">))</span>
        <span class="k">print</span> <span class="s2">&quot;PASS</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="k">else</span>
        <span class="k">print</span> <span class="s2">&quot;FAIL</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="k">print</span> <span class="s2">&quot;===========================</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="k">print</span> <span class="s2">&quot;Drop the replica database :&quot;</span><span class="p">;</span>
    <span class="k">if</span><span class="p">(</span><span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">deleteDatabase</span><span class="p">(</span><span class="s2">&quot;test_replica_database&quot;</span><span class="p">))</span>
        <span class="k">print</span> <span class="s2">&quot;PASS</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="k">else</span>
        <span class="k">print</span> <span class="s2">&quot;FAIL</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
    <span class="nb">print_r</span><span class="p">(</span><span class="nv">$conn</span><span class="o">-&gt;</span><span class="na">getLastResponse</span><span class="p">(</span><span class="k">true</span><span class="p">));</span>
    <span class="k">print</span> <span class="s2">&quot;===========================</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
<span class="p">}</span> <span class="k">catch</span><span class="p">(</span><span class="nx">CouchdbClientException</span> <span class="nv">$e</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="nv">$e</span><span class="o">-&gt;</span><span class="na">getMessage</span><span class="p">();</span>
<span class="p">}</span>    
<span class="nb">unset</span><span class="p">(</span><span class="nv">$conn</span><span class="p">);</span>
<span class="cp">?&gt;</span><span class="x"></span>
</pre></div>

<h2>Feedback</h2>
<p>Please send all requests, bug reports etc to topdog@fedoraproject.org</p>]]></content:encoded>
    </item>
  </channel>
</rss>
