<?xml version="1.0" encoding="iso-8859-1"?>
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns="http://purl.org/rss/1.0/"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
>
    <channel rdf:about="http://pear.php.net">
    <link>http://pear.php.net/</link>
    <dc:creator>pear-webmaster@lists.php.net</dc:creator>
    <dc:publisher>pear-webmaster@lists.php.net</dc:publisher>
    <dc:language>en-us</dc:language><items>
<rdf:Seq><rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=638"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=614"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=709"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=687"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=626"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=605"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=585"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=273"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=650"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=645"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=623"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=601"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=578"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=536"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=528"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=457"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=441"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=435"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=431"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=381"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=361"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=350"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=346"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=267"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=248"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=171"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=132"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=105"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=60"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=58"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=18"/>
<rdf:li rdf:resource="http://pear.php.net/pepr/pepr-proposal-show.php?id=14"/>
</rdf:Seq>
</items>

<title>PEPr: Latest proposals containing config</title>
<description>The latest PEPr proposals containing config</description>
</channel>

<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=638">
 <title>PEPr Proposal [638]: HTTP::HTTP_OAuth2</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=638</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        HTTP::HTTP_OAuth2&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/laurence&quot;&gt;Laurence Miao&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2010-06-16T23:02:16-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=614">
 <title>PEPr Proposal [614]: HTTP::HTTP_Browser</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=614</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        HTTP::HTTP_Browser&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/ddoxey&quot;&gt;Dylan Doxey&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2009-09-27T00:23:34-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=709">
 <title>PEPr Proposal [709]: HTTP::HTTP_Request</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=709</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        HTTP::HTTP_Request&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/cequiel&quot;&gt;Gonzalo Chumillas&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;A library for sending HTTP requests from the server side. For example:&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// in this case we use a configuration object&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;HttpRequestConfig&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;setOption&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;follow_location&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;setOption&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;user_agent&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;setContentTypeOption&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;charset&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;iso-8859-1&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// sends a POST request to mysite.com and attaches some files&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$req &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;HttpRequestPost&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$req&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;setParam&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;upload-image&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$req&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;setFormParam&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;image&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;HttpRequestFormFile&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;/path/to/image.jpg&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;));&lt;br /&gt;
echo &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$req&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;send&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;http://www.mysite.com&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;

 </content:encoded>
 <dc:date>2015-01-09T15:54:08-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=687">
 <title>PEPr Proposal [687]: Database::DB_DataObject_FormBuilder_Frontend</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=687</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        Database::DB_DataObject_FormBuilder_Frontend&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/madsliejensen&quot;&gt;Mads Lie Jensen&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;Package to build frontends for database editing. The most basic use requires very little code, most is done in a config-file written in xml.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;It displays list of tables that can be edited, lists the contents of the tables and forms for editing/adding/deleting records from these tables.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Database access is done using DB_DataObjects, forms for editing is made using DB_DataObject_FormBuilder and the lists of tables or table-contents with Structures_DataGrid. This makes the behavior and output very flexible. But if not flexible enough, the package can be easily expanded using plugins and different forms of callback-methods.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Code can be found on &lt;a href=&quot;https://github.com/gartner/DB_DataObject_FormBuilder_Frontend&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;Github&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;

 </content:encoded>
 <dc:date>2012-12-20T11:54:13-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=626">
 <title>PEPr Proposal [626]: HTML::HTML_Template</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=626</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        HTML::HTML_Template&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/jan267&quot;&gt;Jaco&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2010-02-01T00:08:01-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=605">
 <title>PEPr Proposal [605]: Mail::Mail_CheckUser</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=605</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        Mail::Mail_CheckUser&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/miyauchi&quot;&gt;Takayuki Miyauchi&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2009-07-15T14:35:10-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=585">
 <title>PEPr Proposal [585]: RFC::Unit tests, new packages, good practice</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=585</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        RFC::Unit tests, new packages, good practice&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/doconnor&quot;&gt;Daniel O'Connor&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2008-12-30T03:46:02-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=273">
 <title>PEPr Proposal [273]: Console::Console_Wizard</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=273</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        Console::Console_Wizard&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/clay&quot;&gt;Clay Loveless&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;The Console_Wizard package provides methods for creating, validating and processing multi-screen interactive console applications.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Similar in many ways to HTML_QuickForm and HTML_QuickForm_Controller, Console_Wizard's features include:&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
    &lt;li&gt;Intuitive handling of multiple-choice questions, yes/no questions and user-input questions.&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;QuickForm-style validation rules for responses.&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;Customizable application headers, footers, prompts, and default answers.&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;Configurable per-response callback function/method and &amp;quot;goto&amp;quot; settings.&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;Wizard-wide process callback handling.&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;Automatic generation of multiple-choice indexes for multiple-choice questions.&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;Easily extendable filters and rules.&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;For those aiming to maximize their financial gains, &lt;a href=&quot;https://pureprofitpoint.org&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;pure profit point&lt;/a&gt; offers a comprehensive toolkit tailored for modern investors.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;

 </content:encoded>
 <dc:date>2005-07-08T08:39:08-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=650">
 <title>PEPr Proposal [650]: Web Services::Services_Twitter_Uploader</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=650</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        Web Services::Services_Twitter_Uploader&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/withgod&quot;&gt;takumi taka&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;simple &amp;amp; easy post OAuth Echo Upload services.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4 id=&quot;toc0&quot;&gt; support upload service&lt;/h4&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
    &lt;li&gt;&lt;a href=&quot;http://img.ly/api/docs&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;http://img.ly/api/docs&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;&lt;a href=&quot;http://twitgoo.com/a/help&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;http://twitgoo.com/a/help&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;&lt;a href=&quot;http://dev.twitpic.com/&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;http://dev.twitpic.com/&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;&lt;a href=&quot;http://code.google.com/p/imageshackapi/&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;http://code.google.com/p/imageshackapi/&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;&lt;a href=&quot;http://p.twipple.jp/wiki/Main_Page&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;http://p.twipple.jp/wiki/Main_Page&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;&lt;a href=&quot;http://plixi.com/api&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;http://plixi.com/api&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;&lt;a href=&quot;http://apidocs.posterous.com/pages/twitter&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;http://apidocs.posterous.com/pages/twitter&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;&lt;a href=&quot;http://developers.mobypicture.com/documentation/&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;http://developers.mobypicture.com/documentation/&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4 id=&quot;toc1&quot;&gt; sample code&lt;/h4&gt;&lt;br /&gt;
&lt;a href=&quot;https://gist.github.com/748086&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;https://gist.github.com/748086&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;require_once &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;Services/Twitter/Uploader.php&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;
 &lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$oauth &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;HTTP_OAuth_Consumer&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'APP KEY'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'APP SECRET'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'TOKEN'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'SECRET'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
 &lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$uploader &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Services_Twitter_Uploader&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;factory&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'yfrog'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$oauth&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//twitpic require api key http://dev.twitpic.com/apps/new&lt;br /&gt;
//$uploader = Services_Twitter_Uploader::factory('twitpic', $this-&amp;gt;oauth, 'apiKey');&lt;br /&gt;
//proxy&lt;br /&gt;
//$req = new HTTP_Request2();&lt;br /&gt;
//$req-&amp;gt;setConfig(array( 'proxy_host' =&amp;gt; 'HOST', 'proxy_port' =&amp;gt; 'PORT'));&lt;br /&gt;
//$uploader = Services_Twitter_Uploader::factory('yfrog', $oauth, null, $req);&lt;br /&gt;
 &lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;try {&lt;br /&gt;
    &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$url &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$uploader&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;upload&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'/path/to/upload.jpg'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'from Services_OAuthUploader'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
    &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;var_dump&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$url&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;); &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// upload URL&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;} catch(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Twitter_Uploader_Exception $e&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;) {&lt;br /&gt;
    &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;var_dump&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$e&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
}&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4 id=&quot;toc2&quot;&gt; links&lt;/h4&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
    &lt;li&gt;&lt;a href=&quot;https://github.com/withgod/Services_Twitter_Uploader&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;https://github.com/withgod/Services_Twitter_Uploader&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;&lt;a href=&quot;http://sakura.withgod.jp/jenkins/&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;http://sakura.withgod.jp/jenkins/&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;

 </content:encoded>
 <dc:date>2010-12-20T12:30:03-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=645">
 <title>PEPr Proposal [645]: Configuration::Config_Lite</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=645</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        Configuration::Config_Lite&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/pce&quot;&gt;Patrick Engel&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;a simple, lightweight and fast class for ini style configuration files, with the native PHP function &amp;quot;parse_ini_file&amp;quot; under the hood.&lt;br /&gt;&lt;br /&gt;
Config_Lite is inspired by Pythons ConfigParser.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;A &amp;quot;Config_Lite&amp;quot; file consists of  global options as &amp;quot;name = value&amp;quot; entries on top  and sections, &amp;quot;[section]&amp;quot;, followed by &amp;quot;name = value&amp;quot; entries.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4 id=&quot;toc3&quot;&gt; Examples&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;The Config_Lite Pear Package:&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/pce/config_lite&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;https://github.com/pce/config_lite&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;A Configuration File: `test.ini'&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;br /&gt;
public_key_file =  &amp;quot;~/.ssh/id_rsa.pub&amp;quot;&lt;br /&gt;
debug = yes&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
lang = &amp;quot;en&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[db]&lt;br /&gt;
user = &amp;quot;dionysis&amp;quot;&lt;br /&gt;
password = &amp;quot;c2oiVnY!f8sf&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;br /&gt;
Read Configuration file: &lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;require_once &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'Config/Lite.php'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Config_Lite&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'test.ini'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;br /&gt;
echo &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'db'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'user'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;); &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// dionysis&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;echo &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'public_key_file'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;); &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// ~/.ssh/id_rsa.pub&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;if (&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;true &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=== &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;getBool&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'debug'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)) {&lt;br /&gt;
        echo &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// read with ArrayAccess&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;echo &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'db'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'password'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;]; &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// c2oiVnY!f8sf&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Save Configuration file: &lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'db'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'user'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'JohnDoe'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&lt;br /&gt;
        -&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'db'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'password'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'d0g1tcVs$HgIn1'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// set with ArrayAccess&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'public_key_file'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;] = &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'~/.ssh/id_rsa.pub'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'general'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;] = array(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'lang' &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'de'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// save object to file&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;save&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Create configuration file: &lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$config &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Config_Lite&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'test.ini'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'db'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'user'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'JohnDoe'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&lt;br /&gt;
        -&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'db'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'password'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'d0g1tcVs$HgIn1'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// set global bool 'debug'&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'debug'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// save object to file&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;save&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Alternative file creation with write: &lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$config &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Config_Lite&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'test.ini'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, array(&lt;br /&gt;
                        &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'public_key_file' &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt;  &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;~/.ssh/id_rsa.pub&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&lt;br /&gt;
                        &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'general' &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt; array(&lt;br /&gt;
                                &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'lang' &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'fr'&lt;br /&gt;
                        &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;),&lt;br /&gt;
                        &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'db' &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt; array(&lt;br /&gt;
                                &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'user' &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'dionysis'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&lt;br /&gt;
                                &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'password' &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'d0g1tcVs$HgIn1'&lt;br /&gt;
                        &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&lt;br /&gt;
                );&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
global Configuration options (without sections) : &lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'private_key_file'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'~/.ssh/id_rsa'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// set with arrayaccess&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'public_key_file'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;] = &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'~/.ssh/id_rsa.pub'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;sync&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;
&lt;br /&gt;
echo &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'public_key_file'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// get with arrayaccess&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;echo &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'private_key_file'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;];&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4 id=&quot;toc4&quot;&gt; Notes &amp;amp; Limitations&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;Use getString and setString to save and read Strings with double and single-quotes.&lt;br /&gt;&lt;br /&gt;
Use getBool if you need a real bool type, eg. for strict equality comparision.&lt;br /&gt;&lt;br /&gt;
The methods `set' and `get' keep values untouched, but the write method normalize &amp;quot;bool&amp;quot; values to a human readable representation, doublequotes strings and numeric values without any quotes.&lt;br /&gt;&lt;br /&gt;
File locking is not part of this Class.&lt;br /&gt;&lt;br /&gt;
No support of comments and multiline strings, because reading with &amp;quot;parse_ini_file&amp;quot; does not support it.&lt;br /&gt;&lt;br /&gt;
If you want to save a regex, i'd recommend to use &amp;quot;get&amp;quot; with base64_decode and &amp;quot;set&amp;quot; with base64_encode.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
Save regex (as global option) base64 encoded : &lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$config &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Config_Lite&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'regex-test.ini'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$regex &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'/Hello \&quot;(.*?)\&quot;/'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'regex'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;base64_encode&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$regex&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;));&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// save object, here sync to read it back, just to test&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;sync&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// in 'regex-test.ini': regex = &quot;L0hlbGxvIFwiKC4qPylcIi8=&quot;&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$regex &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;base64_decode&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'regex'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;));&lt;br /&gt;
if (&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;preg_match&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$regex&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'Hello &quot;World&quot;!'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)) {&lt;br /&gt;
    &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;printf&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;matched. regex:%s&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$regex&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
} else {&lt;br /&gt;
    &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;printf&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;no match found. regex:%s&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$regex&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
}&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
Game &lt;a href=&quot;https://berita360.com/&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;MENANG123&lt;/a&gt; merupakan game gacor terpercaya.
 </content:encoded>
 <dc:date>2010-08-31T02:15:49-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=623">
 <title>PEPr Proposal [623]: Images::Image_QRCode</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=623</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        Images::Image_QRCode&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/richsage&quot;&gt;Rich Sage&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2009-12-13T19:30:53-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=601">
 <title>PEPr Proposal [601]: PEAR::PEAR_TestListener</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=601</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        PEAR::PEAR_TestListener&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/farell&quot;&gt;Laurent Laville&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2009-06-09T02:19:05-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=578">
 <title>PEPr Proposal [578]: Logging::Log_FirePHP</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=578</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        Logging::Log_FirePHP&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/farell&quot;&gt;Laurent Laville&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2008-10-11T09:57:41-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=536">
 <title>PEPr Proposal [536]: Streams::Stream_Iterate</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=536</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        Streams::Stream_Iterate&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/jausions&quot;&gt;Philippe Jausions&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3 id=&quot;toc5&quot;&gt; Overview&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;Here's a little class to allow accessing a traversable variable (array, Iterator, etc...) as a stream using callbacks. The variable is transversed and each key/value is passed to the callback(s) to be transformed into a string to be piped into the stream. The stream is read forward-only, and has an undetermined length.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;I first developed this class to use with MDB2_Iterator and HTTP_Download (note that HTTP_Download needs the patch of &lt;a href=&quot;http://pear.php.net/bugs/13125&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;bug #13125&lt;/a&gt; to handle undetermined content size.)&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;With PHP 5.3+ there will be stream context support for copy(). That will allow to very easily dump data to file (&lt;a href=&quot;http://code.google.com/p/php-stream-iterate/source/browse/trunk/php-stream-iterate/docs/examples/copy.php&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;see example&lt;/a&gt;)&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3 id=&quot;toc6&quot;&gt; Code Sample&lt;/h3&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;require_once &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'Stream/Iterate.php'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// Register class as &quot;foreach&quot; protocol&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;stream_wrapper_register&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'foreach'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'Stream_Iterate'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// Some data we can iterate over with foreach (array, Traversable, etc...)&lt;br /&gt;
// We'll assume $db MDB2 connection is configured somewhere else&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;MDB2_Iterate&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$db&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;query&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'SELECT * FROM sometable'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;));&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// Callback to convert the data into a string that will be&lt;br /&gt;
// piped into the stream (any valid callback will do)&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$callback &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;create_function&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'$key, $value, $iteration'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'return $key.&quot;=&quot;.implode('&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;', $value).&quot;\r\n&quot;;'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// Create the context for the stream&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$context &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;stream_context_create&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(array(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'foreach' &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt; array(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'subject' &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'toString' &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$callback&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)));&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$fp &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;fopen&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'foreach://subject'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'r'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$context&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;HTTP_Download&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;staticSend&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(array(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'resource' &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$fp&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;));&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3 id=&quot;toc7&quot;&gt; URL Examples&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;(assuming &amp;quot;&lt;tt&gt;foreach&lt;/tt&gt;&amp;quot; is the name of the registered protocol):&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&amp;quot;&lt;tt&gt;key&lt;/tt&gt;&amp;quot; and &amp;quot;&lt;tt&gt;value&lt;/tt&gt;&amp;quot; specify which of the key and value should be passed to the callback and in which order.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
    &lt;li&gt;&lt;tt&gt;foreach://key:value@subject&lt;/tt&gt;&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;&lt;tt&gt;foreach://value:key@subject&lt;/tt&gt;&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;&lt;tt&gt;foreach://key@subject&lt;/tt&gt;&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;&lt;tt&gt;foreach://value@subject&lt;/tt&gt;&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;&lt;tt&gt;foreach://subject&lt;/tt&gt;&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;If not specified, &amp;quot;&lt;tt&gt;key:value&lt;/tt&gt;&amp;quot; will be assumed. So &lt;tt&gt;protocol://subject&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;
is equivalent to &lt;tt&gt;protocol://key:value@subject&lt;/tt&gt;&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3 id=&quot;toc8&quot;&gt; Callback / Formatter in URL&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;To each of the URL examples above you can append a query string made up of. These substitute for the context options, possibly leading to more self-explanatory URLs.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
    &lt;li&gt;&lt;tt&gt;toString=function_name&lt;/tt&gt;&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;&lt;tt&gt;toString=class::method&lt;/tt&gt;&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;&lt;tt&gt;formatter=class_name&lt;/tt&gt; (class_name must implements Stream_Iterate_FormatterInterface)&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Example: &lt;tt&gt;foreach://value@subject?toString=serialize&lt;/tt&gt;&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3 id=&quot;toc9&quot;&gt; TODO&lt;/h3&gt;&lt;br /&gt;
&lt;p&gt;* Documentation / more examples (besides the test suite)&lt;br /&gt;&lt;br /&gt;
&lt;a href=&quot;https://cstfirenze.com/cypher-market&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;darknet market links&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;

 </content:encoded>
 <dc:date>2008-03-05T19:04:19-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=528">
 <title>PEPr Proposal [528]: File System::File_Mogile</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=528</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        File System::File_Mogile&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/sbw&quot;&gt;Steve Williams&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2008-01-30T00:16:25-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=457">
 <title>PEPr Proposal [457]: GUI::XML_SWFGauge</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=457</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        GUI::XML_SWFGauge&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/jherr&quot;&gt;Jack Herrington&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2006-10-25T22:26:14-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=441">
 <title>PEPr Proposal [441]: PHP::PHP_Annotation</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=441</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        PHP::PHP_Annotation&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/kouichi66&quot;&gt;Kouichi Sakamoto&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;PHP_Annotation, Attribute Extension is supported to Class,Function,Method and Property. And, the DI library is supported.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;-- Function list --&lt;br /&gt;&lt;br /&gt;
1. Get Annotation Object&lt;br /&gt;&lt;br /&gt;
  - PHP_Annotation::parse(string $class_name);                                                  &lt;br /&gt;&lt;br /&gt;
  - PHP_Annotation::parse(string $function_name);                                            &lt;br /&gt;&lt;br /&gt;
  - PHP_Annotation::parseFunction(string $function_name);                                &lt;br /&gt;&lt;br /&gt;
  - PHP_Annotation::parseMethod(string $class_name, string $method_name);       &lt;br /&gt;&lt;br /&gt;
  - PHP_Annotation::parseProperty(string $class_name, string $property_name);    &lt;br /&gt;&lt;br /&gt;
  - PHP_Annotation::parse(Reflector $ref);                                                       &lt;br /&gt;&lt;br /&gt;
  &lt;br /&gt;&lt;br /&gt;
  * Parse Comment by using getDocComment() of Reflector.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
2. Getting  processing result useing by Annotation Object.&lt;br /&gt;&lt;br /&gt;
  - PHP_Annotation::exec(PHP_Annotation_Factory $factory=null); &lt;em&gt;support java.lang.annotation format.&lt;br /&gt;&lt;br /&gt;
  - PHP_Annotation::exec[Command Name](); &lt;/em&gt;ref:PHP_Annotation::__call()&lt;br /&gt;&lt;br /&gt;
  - PHP_Annotation::exec_[Command Full Name](); //ref:PHP_Annotation::__call()&lt;br /&gt;&lt;br /&gt;
    &lt;br /&gt;&lt;br /&gt;
    * Support PhpDocumentor and  java.lang.annotation format.&lt;br /&gt;&lt;br /&gt;
      Because used Command design pattern, An easily original format can be built in. &lt;br /&gt;&lt;br /&gt;
 &lt;p&gt;3.Use DI library&lt;br /&gt;&lt;br /&gt;
  - PHP_Annotation_ContainerFactory::singleton()&lt;br /&gt;&lt;br /&gt;
  - PHP_Annotation_ContainerFactory::setContainerConfig( PHP_Annotation_ContainerConfig $config=null)&lt;br /&gt;&lt;br /&gt;
  - PHP_Annotation_ContainerFactory::getComponent( string $name )&lt;br /&gt;&lt;br /&gt;
  &lt;br /&gt;&lt;br /&gt;
  * Support annotation: @construct, @instance, @property&lt;br /&gt;&lt;br /&gt;
  * Exsample: sample6.php&lt;br /&gt;&lt;br /&gt;
. &lt;br /&gt;&lt;br /&gt;
Which  sites accept &lt;a href=&quot;https://www.inclave.io/&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;Inclave&lt;/a&gt; and how it works, read here.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;

 </content:encoded>
 <dc:date>2006-08-28T11:08:08-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=435">
 <title>PEPr Proposal [435]: Web Services::Services_YouTube</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=435</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        Web Services::Services_YouTube&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/shin&quot;&gt;Shin Ohno&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2006-08-07T15:29:47-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=431">
 <title>PEPr Proposal [431]: Text::Text_Bayes</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=431</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        Text::Text_Bayes&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/sunflyer&quot;&gt;Andreas Ahlenstorf&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2006-07-28T16:55:36-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=381">
 <title>PEPr Proposal [381]: PEAR::PEAR_PackageFileManager_Frontend</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=381</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        PEAR::PEAR_PackageFileManager_Frontend&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/farell&quot;&gt;Laurent Laville&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2006-03-27T19:18:58-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=361">
 <title>PEPr Proposal [361]: XML::Query2XML</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=361</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        XML::Query2XML&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/lukasfeiler&quot;&gt;Lukas Feiler&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2006-02-28T14:10:31-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=350">
 <title>PEPr Proposal [350]: System::System_Folders</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=350</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        System::System_Folders&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/cweiske&quot;&gt;Christian Weiske&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2006-02-01T10:49:15-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=346">
 <title>PEPr Proposal [346]: Gtk2 Components::Gtk2_PHPConfig</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=346</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        Gtk2 Components::Gtk2_PHPConfig&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/anant&quot;&gt;Anant Narayanan&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2006-01-22T16:13:45-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=267">
 <title>PEPr Proposal [267]: Tools and Utilities::CodeGen_PECL</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=267</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        Tools and Utilities::CodeGen_PECL&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/hholzgra&quot;&gt;Hartmut Holzgraefe&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2005-07-03T09:40:57-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=248">
 <title>PEPr Proposal [248]: Networking::Net_Wifi</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=248</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        Networking::Net_Wifi&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/cweiske&quot;&gt;Christian Weiske&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2005-05-07T18:47:37-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=171">
 <title>PEPr Proposal [171]: Networking::Monitor</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=171</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        Networking::Monitor&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/cyberscribe&quot;&gt;Robert Peake&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2004-11-02T21:24:32-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=132">
 <title>PEPr Proposal [132]: RFC::Error Handling Guidelines for PHP5 packages</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=132</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        RFC::Error Handling Guidelines for PHP5 packages&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/SergioSGC&quot;&gt;Sérgio Carvalho&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h1 id=&quot;toc10&quot;&gt; Error Handling Guidelines for PHP5 packages submitted to PEAR&lt;/h1&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2 id=&quot;toc11&quot;&gt;Summary&lt;/h2&gt;&lt;br /&gt;
&lt;p&gt;This document defines guidelines for error handling within PEAR, for PHP5 packages. It was written to cope with Exceptions, introduced in Zend Engine 2 as the error handling mechanism. The final objective is to integrate the document text into the PEAR Coding Guidelines.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2 id=&quot;toc12&quot;&gt; Audience&lt;/h2&gt;&lt;br /&gt;
&lt;p&gt;This document is targeted at PHP developers writing packages for submission into the PEAR repository. As any coding guidelines, it is useful to developers using PHP in other environments. The requirements for reading this text are only familiarity with PHP as a programming language, as well as familiarity with the mechanism of Exceptions as an error handling mechanism.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;For those PHP developers unfamiliar with Exceptions, the &lt;a href=&quot;http://wiki.ciaweb.net/yawiki/index.php?area=PEAR_Dev&amp;amp;page=RfcExceptionUse&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;wiki page&lt;/a&gt; from which this document was extracted provides a good introduction, as well as pointers to other references.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2 id=&quot;toc13&quot;&gt; Definition of error&lt;/h2&gt;&lt;br /&gt;
&lt;p&gt;An error is defined as an unexpected, invalid program state from which it is impossible to recover. For the sake of definition, recovery scope is defined as the method scope. Incomplete recovery is considered a recovery.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
One pretty straightforward example for an error:&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/*&lt;br /&gt;
 * Connect to Specified Database&lt;br /&gt;
 *&lt;br /&gt;
 * @throws Example_Datasource_Exception when it can't connect&lt;br /&gt;
 * to specified DSN.&lt;br /&gt;
 */&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;connectDB&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$dsn&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;) {&lt;br /&gt;
    &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;db &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;amp; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;DB&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;connect&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$dsn&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
    if (&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;DB&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;isError&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;db&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)) {&lt;br /&gt;
        throw new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Example_Datasource_Exception&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;br /&gt;
                &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;Unable to connect to &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$dsn&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;:&quot; &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;db&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;getMessage&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;()&lt;br /&gt;
        );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
In this example the objective of the method is to connect to the given DSN. Since it can't do anything but ask PEAR DB to do it, whenever DB returns an error, the only option is to bail out and launch the exception.The next example will introduce the concept of recovery:&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/*&lt;br /&gt;
 * Connect to one of the possible databases&lt;br /&gt;
 *&lt;br /&gt;
 * @throws Example_Datasource_Exception when it can't connect to&lt;br /&gt;
 * any of the configured databases.&lt;br /&gt;
 *&lt;br /&gt;
 * @throws Example_Config_Exception when it can't find databases&lt;br /&gt;
 * in the configuration.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;connect&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Config $conf&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;) {&lt;br /&gt;
    &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$dsns &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;amp; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$conf&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;searchPath&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(array(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'config'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'db'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;));&lt;br /&gt;
    if (&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$dsns &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=== &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;FALSE&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;) throw new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Example_Config_Exception&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;br /&gt;
        &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'Unable to find config/db section in configuration.'&lt;br /&gt;
    &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;br /&gt;
    &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$dsns &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;amp; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$dsns&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;toArray&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;
    &lt;br /&gt;
    foreach(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$dsns &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;as &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$dsn&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;) {&lt;br /&gt;
        try { &lt;br /&gt;
            &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;connectDB&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$dsn&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
            return;&lt;br /&gt;
        } catch (&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Example_Datasource_Exception e&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;) {&lt;br /&gt;
            &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// Some warning/logging code recording the failure&lt;br /&gt;
            // to connect to one of the databases&lt;br /&gt;
        &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;}&lt;br /&gt;
    }&lt;br /&gt;
    throw new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Example_Datasource_Exception&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;br /&gt;
        &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'Unable to connect to any of the configured databases'&lt;br /&gt;
    &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
}&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;This second example shows an exception being caught and recovered from. Altough the lower level connectDB method is unable to do anything but throw an error when one database connection fails, the upper level connect method knows the object can go by with any one of the configured databases. Since the error was recovered from, the exception is silenced at this level and not rethrown.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
The last example illustrates incomplete recovery:&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/*&lt;br /&gt;
 * loadConfig parses the provided configuration. If the configuration&lt;br /&gt;
 * is invalid, it will set the configuration to the default config.&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;loadConfig&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Config $conf&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;) {&lt;br /&gt;
    try {&lt;br /&gt;
        &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;config &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$conf&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;
    } catch (&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Config_Parse_Exception e&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;) {&lt;br /&gt;
        &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// Warn/Log code goes here&lt;br /&gt;
        // Perform incomplete recovery&lt;br /&gt;
        &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;config &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;defaultConfig&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
The recovery produces side effects, so it is considered incomplete. However, the program may proceed, so the exception is considered handled, and must not be rethrown. As in the previous example, when silencing the exception, logging or warning should occur.&lt;br /&gt;
&lt;h2 id=&quot;toc14&quot;&gt; Error Signaling in PHP5 PEAR packages&lt;/h2&gt;&lt;br /&gt;
&lt;p&gt;Error conditions in PEAR packages written for PHP5 must be signaled using exceptions. Usage of return codes or return PEAR_Error objects is deprecated in favor of exceptions. Naturally, packages providing compatibility with PHP4 do not fall under these coding guidelines, and may thus use the error handling mechanisms defined in the PHP4 PEAR coding guidelines.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;An exception should be thrown whenever an error condition is met, according to the definition provided in the previous section. The thrown exception should contain enough information to debug the error and quickly identify the error cause. Note that, during production runs, no exception should reach the end-user, so there is no need for concern about technical complexity in the exception error messages.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;The basic PEAR_Exception contains a textual error, describing the program state that led to the throw and, optionally, a wrapped lower level exception, containing more info on the lower level causes of the error.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;The kind of information to be included in the Exception is dependent on the error condition. From the point of view of exception throwing, there are three classes of error conditions:&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;br /&gt;
    &lt;li&gt;Errors detected during precondition checks&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;Lower level library errors signaled via error return codes or error return objects.&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;Uncorrectable lower library exceptions.&lt;/li&gt;&lt;br /&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
Errors detected during precondition checks should contain a description of the failed check. If possible, the description should contain the violating value. Naturally, no wrapped exception can be included, as there isn't a lower level cause of the error. Example:&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;divide&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$x&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$y&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;) {&lt;br /&gt;
    if (&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$y &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;== &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;) throw new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Example_Aritmetic_Exception&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'Divide by zero'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
    return &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$x&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$y&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Errors signaled via return codes by lower level libraries, if unrecoverable, should be turned into exceptions. The error description should try to convey all information contained in the original error. One example, is the connect method previously presented:&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/*&lt;br /&gt;
 * Connect to Specified Database&lt;br /&gt;
 *&lt;br /&gt;
 * @throws Example_Datasource_Exception when it can't connect to specified DSN.&lt;br /&gt;
 */&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;connectDB&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$dsn&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;) {&lt;br /&gt;
    &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;db &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;amp; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;DB&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;connect&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$dsn&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
    if (&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;DB&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;isError&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;db&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)) {&lt;br /&gt;
        throw new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Example_Datasource_Exception&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;br /&gt;
                &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;Unable to connect to &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$dsn&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;:&quot; &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;db&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;getMessage&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;()&lt;br /&gt;
        );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Lower library exceptions, if they can't be corrected, should either be rethrown or bubbled up. When rethrowing, the original exception must be wrapped inside the one being thrown. When letting the exception bubble up, the exception just isn't handled and will continue up the call stack in search of a handler.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
One example for rethrowing:&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;preTaxPrice&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$retailPrice&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$taxRate&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;) {&lt;br /&gt;
    try {&lt;br /&gt;
        return &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;divide&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$retailPrice&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;1 &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;+ &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$taxRate&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
    } catch (&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Example_Aritmetic_Exception e&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;) {&lt;br /&gt;
        throw new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Example_Tax_Exception&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'Invalid tax rate.'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;And the same example for bubbling up:&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;preTaxPrice&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$retailPrice&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$taxRate&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;) {&lt;br /&gt;
    return &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;divide&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$retailPrice&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;1 &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;+ &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$taxRate&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
}&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;The case between rethrowing or bubbling up is one of software architecture: Exceptions should be bubbled up, except in these two cases:&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;br /&gt;
    &lt;li&gt;The original exception is from another package. Letting it bubble up would cause implementation details to be exposed, violating layer abstraction, conducing to poor design.&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;The current method can add useful debugging information to the received error before rethrowing.&lt;/li&gt;&lt;br /&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2 id=&quot;toc15&quot;&gt; Exceptions and normal program flow&lt;/h2&gt;&lt;br /&gt;
&lt;p&gt;Exceptions should never be used as normal program flow. If removing all exception handling logic (try-catch statements) from the program, the remaining code should represent the &amp;quot;One True Path&amp;quot; -- the flow that would be executed in the absence of errors.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;This requirement is equivalent to requiring that exceptions be thrown only on error conditions, and never in normal program states.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
One example of a method that wrongly uses the bubble up capability of exceptions to return a result from a deep recursion:&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;
 * Recursively search a tree for string.&lt;br /&gt;
 * @throws ResultException&lt;br /&gt;
 */&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;public function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;search&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;TreeNode $node&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)  {&lt;br /&gt;
    if (&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$node&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;data &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=== &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;) {&lt;br /&gt;
         throw new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;ResultException&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;( &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$node &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
    } else {&lt;br /&gt;
         &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;search&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;( &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$node&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;leftChild&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
         &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;search&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;( &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$node&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;rightChild&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
In the example the ResultException is simply using the &amp;quot;eject!&amp;quot; qualities of exception handling to jump out of deeply nested recursion. When actually used to signify an error this is a very powerful feature, but in the example above this is simply lazy development.&lt;br /&gt;
&lt;h2 id=&quot;toc16&quot;&gt; Exception class hierarchies&lt;/h2&gt;&lt;br /&gt;
&lt;p&gt;All of PEAR packages exceptions must be descendant from PEAR_Exception. PEAR_Exception provides exception wrapping abilities, absent from the top level PHP Exception class, and needed to comply with the previous section requirements.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Aditionally, each PEAR package must provide a top level exception, named &amp;lt;Package_Name&amp;gt;_Exception. It is considered best practice that the package never throws Exceptions that aren't descendant from its top level exception.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2 id=&quot;toc17&quot;&gt; Exception silencing (Section placeholder)&lt;/h2&gt;&lt;br /&gt;
&lt;p&gt;This section will contain the requirements related to Exception silencing. Wether to support exception silencing or not is a cause for debate, and a vote will happen after (if) the main text approval. Supporting exception silencing, depending on PHP support for canceling throws, may require that an Exception throw be done via a PEAR_Exception method (PEAR_Exception::throw) which optionally silences the exception and allows the program to flow normally.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2 id=&quot;toc18&quot;&gt; Documenting Exceptions&lt;/h2&gt;&lt;br /&gt;
&lt;p&gt;Because PHP, unlike Java, does not require you to explicitly state which Exceptions a method throws in the method signature, it is critical that Exceptions be thoroughly documented in your method headers.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Exceptions should be documented using the &lt;strong&gt;@throws&lt;/strong&gt; phpdoc keyword:&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;
 * This method searches for aliens.&lt;br /&gt;
 *&lt;br /&gt;
 * @return array Array of Aliens objects.&lt;br /&gt;
 * @throws AntennaBrokenException If the impedence readings indicate&lt;br /&gt;
 * that the antenna is broken.&lt;br /&gt;
 *&lt;br /&gt;
 * @throws AntennaInUseException If another process is using the&lt;br /&gt;
 * antenna already.&lt;br /&gt;
 */&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;public function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;findAliens&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$color &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'green'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;In many cases middle layers of an application will rewrap any lower-level exceptions into more meaningful application exceptions.  This also needs to be made clear:&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;
 * Load session objects into shared memory.&lt;br /&gt;
 *&lt;br /&gt;
 * @throws LoadingException Any lower-level IOException will be wrapped&lt;br /&gt;
 * and re-thrown as a LoadingException.&lt;br /&gt;
 */&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;public function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;loadSessionObjects&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;In other cases your method may simply be a conduit through which lower level exceptions can pass freely.  As challenging as it may be, your method should also document which exceptions it is &lt;em&gt;not&lt;/em&gt; catching.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;
 * Performs a batch of database queries (atomically, not in transaction).&lt;br /&gt;
 * @throws SQLException Low-level SQL errors will bubble up through this method.&lt;br /&gt;
 */&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;public function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;batchExecute&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2 id=&quot;toc19&quot;&gt; Exceptions as part of the API&lt;/h2&gt;&lt;br /&gt;
&lt;p&gt;Exceptions play a critical role in the API of your library.  Developers using your library &lt;strong&gt;depend&lt;/strong&gt; on accurate descriptions of where and why exceptions might be thrown from your package.  Documentation is critical.  Also maintaining the types of messages that are thrown is also an important requirement for maintaining backwards-compatibility.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Because Exceptions are critical to the API of your package, you must ensure that you don't break backwards compatibility by making changes to exceptions.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Things that break BC include:&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
    &lt;li&gt;Any change to which methods throw exceptions.&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;A change whereby a method throws an exception higher in the inheritance tree.  For example, if you changed your method to throw a PEAR_Exception rather than a PEAR_IOException, you would be breaking backwards compatibility.&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Things that do not break BC:&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
    &lt;li&gt;Throwing a subclass of the original exception.  For example, changing a method to throw PEAR_IOException when before it had been throwing PEAR_Exception would not break BC (provided that PEAR_IOException extends PEAR_Exception).&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&lt;a href=&quot;https://darknetpages.com/mgm-grand-market/&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;mgm grand market&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;

 </content:encoded>
 <dc:date>2004-08-09T14:50:00-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=105">
 <title>PEPr Proposal [105]: Database::Sqlite_Tools</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=105</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        Database::Sqlite_Tools&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/gurugeek&quot;&gt;David  Costa&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3 id=&quot;toc20&quot;&gt; Sqlite_Tools&lt;/h3&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h4 id=&quot;toc21&quot;&gt;  Intro &lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;&lt;a href=&quot;http://sqlite.org&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;Sqlite&lt;/a&gt; is a lightweight embedded database library. It is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine and is included by default with PHP 5.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Sqlite_Tools is an object oriented interface to effectively manage and backup Sqlite databases.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4 id=&quot;toc22&quot;&gt;  Why SQLite Tools &lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;The stregth of Sqlite and its superb portability might also be seen as a weakness. Because each database is&lt;br /&gt;&lt;br /&gt;
self contained in a file we do have a single point of entry and a single point of failure.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Client-Server relational databases implements a number of build-in features to make the db corruption a remote occurance.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Whilst Sqlite does offer some similar functionality (e.g. synchronous value), there are no PHP functions in this directions  and there is little knowledge on how to successfully maintain and backup multiple database insuring the integrity of the initial and cloned database.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4 id=&quot;toc23&quot;&gt;  Sqlite_Tools functions&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;Sqlite_Tools functionality can be summarized in two different branches:&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&lt;b&gt;Database Manipulation and Maintenance&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;
checkIntegrity : checks the integrity of one or more databases  &lt;a href=&quot;http://dotgeek.org/sqlite_tools/Integritytest.php&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;see the live example&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;
cacheSize : checks or reset the default cache size in one ore more databases &lt;a href=&quot;http://dotgeek.org/sqlite_tools/CacheTest.php&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;see the live example&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
Sync: checks or rest the synchronous value in one more more databases &lt;a href=&quot;http://dotgeek.org/sqlite_tools/SyncTest.php&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;see the example&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
dbFileInfo: Fetch all the available information in one more more databases files&lt;a href=&quot;http://dotgeek.org/sqlite_tools/InfoTest.php&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;see the example&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
copySafe: performs a safe copy for a database, checks integrity on the cloned database&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;and others, each of the function is well commented so you should be able to understand its purpose.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&lt;b&gt;Database backup or remote live replication&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;ftpBackup : backups one or more databases via ftp&lt;a href=&quot;http://dotgeek.org/sqlite_tools/ftpTest.php&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;see the example&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
localRsync: Rsync a database path locally, requires Rsync lib&lt;br /&gt;&lt;br /&gt;
remoteRsync: launch a local Rsync deamon for the purpose of remote synchronization (experimental function)&lt;br /&gt;&lt;br /&gt;
XMLDump : creates an XML dump of one or more databases &lt;a href=&quot;http://dotgeek.org/sqlite_tools&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;see the example&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4 id=&quot;toc24&quot;&gt;  Sqlite_Tools Output and Usage&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;Because Sqlite_Tools is a library its output for mostly of the function is basically raw and can be used in connection with the logs function which keeps each of the operations (e.g. database opened, database integrity check, database backup on ftp performed) output in a local sqlite logs database.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;On the source link below you can see a number of usage examples.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Updated 11 July 2004&lt;br /&gt;&lt;br /&gt;
Removed some of the constants &lt;br /&gt;&lt;br /&gt;
as suggested by  &lt;b&gt;Hans&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;

 </content:encoded>
 <dc:date>2004-07-03T21:54:01-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=60">
 <title>PEPr Proposal [60]: RFC::How the QA Team will work.</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=60</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        RFC::How the QA Team will work.&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/dufuz&quot;&gt;Helgi Þormar Þorbjörnsson&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2004-04-26T17:28:16-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=58">
 <title>PEPr Proposal [58]: Console::Console_Getargs</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=58</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        Console::Console_Getargs&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/mansion&quot;&gt;Bertrand Mansion&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2004-04-21T14:11:34-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=18">
 <title>PEPr Proposal [18]: Configuration::Config_Registry</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=18</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        Configuration::Config_Registry&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/farell&quot;&gt;Laurent Laville&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2004-02-01T14:46:16-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>
<item rdf:about="http://pear.php.net/pepr/pepr-proposal-show.php?id=14">
 <title>PEPr Proposal [14]: Database::DB_Table</title>
 <link>http://pear.php.net/pepr/pepr-proposal-show.php?id=14</link>
 <content:encoded>&lt;br /&gt;
Proposed package:        Database::DB_Table&lt;br /&gt;&lt;br /&gt;
Proposer:                &lt;a href=&quot;/user/pmjones&quot;&gt;Paul Jones&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;

 </content:encoded>
 <dc:date>2004-01-02T01:32:35-05:00</dc:date>
 <dc:publisher></dc:publisher>
</item>

</rdf:RDF>