<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>evølutiøn-515.net &#187; PHP</title>
	<atom:link href="http://blog.evolution515.net/article/category/coding/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.evolution515.net</link>
	<description>Chaos ist nur eine andere Bezeichung für steigende Komplexität.</description>
	<lastBuildDate>Wed, 03 Jun 2009 22:55:19 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Uploads via HTTP are still an issue…</title>
		<link>http://blog.evolution515.net/article/uploads-via-http-are-still-an-issue/</link>
		<comments>http://blog.evolution515.net/article/uploads-via-http-are-still-an-issue/#comments</comments>
		<pubDate>Sun, 01 Feb 2009 21:33:05 +0000</pubDate>
		<dc:creator>Blu:RayNe</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[aurigma]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[upload]]></category>
		<category><![CDATA[upload applet]]></category>

		<guid isPermaLink="false">http://blog.evolution515.net/?p=408</guid>
		<description><![CDATA[Even in the days of Web 2.0 you encounter many errors when it comes to Uploads via HTTP. The protocol was never made for uploads or better to say: there are still enough bugs in implementations and the protocol itself. 
Very familar, e.g. is the problem of having a meter on upload progress. And i [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Even in the days of Web 2.0 you encounter many errors when it comes to Uploads via HTTP. The protocol was never made for uploads or better to say: there are still enough bugs in implementations and the protocol itself. </strong></p>
<p><strong>Very familar, e.g. is the problem of having a meter on upload </strong><strong>progress</strong><strong>. And i also don&#8217;t want to mention the problems of WebDAV implementation of Windows for now, or the limitations of firewalls or proxies&#8230; </strong></p>
<p><strong>But let&#8217;s have a look on solutions provided today in the Web for Uploads…</strong></p>
<h3><strong>Flash/HTTP</strong></h3>
<p>We have a modified version of R6 running on a webshop with regular uploads of 20-70MB files. If upload goes to fast – like on business lines with upstream ≥3Mb – Flash is likely to throw errors telling the visitor a script is running too slow. Then the customer has to choose „continue“ or to „cancel“, which usually ends up in canceling the job  <img src='http://blog.evolution515.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<p>This behavior is caused by Flash calling the „onFileChunkComplete“-Event (or something) too often, or let&#8217;s say after every 4096 bytes sent, which can result in many many calls if you have a good upstream bandwidth.</p>
<p>Second, there are also those „unknown errors“ in Flash caused at runtime. The source yet is unknown and it seems to continue with Flash10 and  some little amount of customers smaller than one percent share. Sorry, <em>unknown </em>means <em>unknown </em>and Adobe won&#8217;t give support here! we&#8217;re back to Flash9  <img src='http://blog.evolution515.net/wp-includes/images/smilies/icon_confused.gif' alt=':-?' class='wp-smiley' /> </p>
<p>Yet the same thing happens to JavaScript if update goes too fast and too often, e.g. by using a progress bar constantly being updated (20-50times in the second). Therefore I had to split up the graphical update process to a seperate class that just goes on update intervals calling the <em>current/total-values</em> of the FileUpload-Class.</p>
<p>Well using Flash as upload client is nice, especially with the ability to use real sockets. For Flash9 the HTTP methods don&#8217;t provide the possibility of splitting large files – so you could upload them in seperate chunks. It&#8217;s about  security.</p>
<p>Then Flash10 possibly could do now (by accepting local files), but here we have the issue of having the upload beeing fired from Flash itself &#8211; scripting doesn&#8217;t work anymore, so no <em>hidden</em> flash uploader, that could do the job  <img src='http://blog.evolution515.net/wp-includes/images/smilies/icon_cry.gif' alt=':cry:' class='wp-smiley' /> </p>
<p>But customer complaints still continues… especially form those using MSIE and don&#8217;t get a thing right.</p>
<h3>PHP and APC, for now. HTTP again…</h3>
<p>Okay, usually you gotta think this works now. It&#8217;s out now for long enough.  But fail of proof!</p>
<p>I leeched some script form <a href="http://www.phpriot.com/articles/php-ajax-file-uploads">PHPRiot</a> yesterday by Quentin Zervaas, fixed some bugs (<em>while(1=1) </em>is great idea in JavaScript  <img src='http://blog.evolution515.net/wp-includes/images/smilies/icon_eek.gif' alt='8-O' class='wp-smiley' /> ), added a file limit check and hoped i finally would have something <em>that really works</em>.  But it didn&#8217;t:</p>
<ul>
<li>Multiple file-fields do not work with APC</li>
<li>If file uploaded is greater than far greater than limit, apc throws out 0-values for current and total</li>
<li>Sometimes just seems stop working somehow; but after an apache restart apache it works again  <img src='http://blog.evolution515.net/wp-includes/images/smilies/icon_cry.gif' alt=':cry:' class='wp-smiley' /> </li>
</ul>
<p>I tried so many ‘solutions’ now and somehow it really seems to me, that monitoring the upload by calling a server-side status-script always has some problems. Probably it is really an Apache-issue… we&#8217;ll have too see…</p>
<h3>Sliced HTTP Upload via Plugins &#8211; a solution?</h3>
<p>I already mentioned it in the Flash/HTTP section, and indeed it&#8217;s more safe, because the file chunks are simply smaller!</p>
<p>I did many tests with Apache, and often it just happens that Apache closes a TCP connection on big file uploads. The source is yet unknown to me. Probably it has to do with Apache itself. I didn&#8217;t encounter the problem when using FastCGI and a Perl-Script to handle my upload.</p>
<p>So, i guess doing sliced upload is a good option. But then you could only use Flash10 which has other restrictions or Java. Yep, that thing that only works on 70-80%  of user browsers, MSIE for the rest that reports about having Java supported – true indeed – the other problem is: does it really run on those often misconfigured and compromised customer systems?</p>
<p>Well Flash10 now does, but have some limitations we probably could live with:</p>
<ul>
<li>load() and save() APIs can only be called in response to user interaction (such as a button click).</li>
<li>locations of the loaded and save files are not exposed to ActionScript.</li>
</ul>
<p>Since the API is now asynchronous (non-blocking),</p>
<h3><strong>Final match: HTTP vs. FTP-Uploads in the client<br />
</strong></h3>
<ul>
<li>HTTP was not made for upload!</li>
<li>use more bandwidth than you actually need (base64!)</li>
<li>HTTP is not resumeable (but you could retry on splitted chunks)</li>
</ul>
<p>Let&#8217;s summariuze: You can only monitor what was uplaoded by having control over your client and you can only split files, when you have access on it.</p>
<p>Use a Java-Applet or code a Flash-Client that works over FTP! And use a FTP-Server that is secure and can handle virtual users, like <em>vsftpd</em><strong>. </strong>Then<strong> code some backend,</strong></p>
<h3>Yes! Probably <em>it is</em> a solution. But you still have the problems with users not supperting Java, or who complain about Java „loading“ too long. Here are some other good tries, that usually work:</h3>
<ul>
<li><a href="http://www.aurigma.com/">http://www.aurigma.com/</a></li>
<li><a href="http://www.jupload.biz/">http://www.jupload.biz/</a></li>
<li><a href="http://www.javaatwork.com">http://www.javaatwork.com</a>/</li>
<li><a href="http://upload.thinfile.com/">http://upload.thinfile.com/</a></li>
</ul>
<p>We&#8217;ll see further when the first FTP libraries for Flash 10 are finished.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.evolution515.net/article/uploads-via-http-are-still-an-issue/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Replacing adding or adding nodes in SimpleXML</title>
		<link>http://blog.evolution515.net/article/replacing-adding-or-adding-nodes-in-simplexml/</link>
		<comments>http://blog.evolution515.net/article/replacing-adding-or-adding-nodes-in-simplexml/#comments</comments>
		<pubDate>Tue, 18 Nov 2008 18:00:27 +0000</pubDate>
		<dc:creator>Blu:RayNe</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.evolution515.net/?p=320</guid>
		<description><![CDATA[You just can&#8217;t! Because you only communicate with SimpleXML by getter and setter methods. It&#8217;s possible there is another interface – anywsy i doubt it!
So, the magic of adding nodes is to convert from and to DOMDocument. The snippet below is just something stripped from sourcecode, so you get the idea how it works.
// This [...]]]></description>
			<content:encoded><![CDATA[<p>You just can&#8217;t! Because you only communicate with SimpleXML by getter and setter methods. It&#8217;s possible there <em>is</em> another interface – anywsy i doubt it!</p>
<p>So, the magic of adding nodes is to convert from and to DOMDocument. The snippet below is just something stripped from sourcecode, so you get the idea how it works.</p>
<div class="dean_ch" style="white-space: wrap;"><span class="co1">// This document is emtpy &#8211; &nbsp;it just illustrates an example!</span><br />
<span class="re0">$this</span>-&gt;<span class="me1">xml</span> = simple_xml_load<span class="br0">&#40;</span><span class="st0">&#8221;</span><span class="br0">&#41;</span>; </p>
<p><span class="co1">// convert base document from simplexml to dom</span><br />
<span class="re0">$dom</span> = dom_import_simplexml<span class="br0">&#40;</span><span class="re0">$xml</span><span class="br0">&#41;</span>-&gt;<span class="me1">ownerDocument</span>;</p>
<p><span class="co1">// get our nodes</span><br />
<span class="re0">$newNode</span> = dom_import_simplexml<span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">character</span>-&gt;<span class="me1">xml</span><span class="br0">&#41;</span>;<br />
<span class="re0">$oldNode</span> = <span class="re0">$dom</span>-&gt;<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&#8216;character&#8217;</span><span class="br0">&#41;</span>-&gt;<span class="me1">item</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;</p>
<p><span class="co1">// import replacement node into our working DOM and reassign it</span><br />
<span class="re0">$newNode</span> = <span class="re0">$dom</span>-&gt;<span class="me1">importNode</span><span class="br0">&#40;</span><span class="re0">$newNode</span>,<span class="kw2">true</span><span class="br0">&#41;</span>;</p>
<p><span class="co1">// for example: replace the -element in our DOM</span><br />
<span class="re0">$oldNode</span>-&gt;<span class="me1">parentNode</span>-&gt;<span class="me1">replaceChild</span><span class="br0">&#40;</span><span class="re0">$newNode</span>, <span class="re0">$oldNode</span><span class="br0">&#41;</span>;</p>
<p><span class="co1">// convert it back</span><br />
<span class="re0">$this</span>-&gt;<span class="me1">xml</span> = simplexml_import_dom<span class="br0">&#40;</span><span class="re0">$dom</span><span class="br0">&#41;</span>;</div>
<p><strong>Damn ugly but that&#8217;s just the way it is! <img src='http://blog.evolution515.net/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.evolution515.net/article/replacing-adding-or-adding-nodes-in-simplexml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP: Zend Framework Tutorial by Ralf Eggert</title>
		<link>http://blog.evolution515.net/article/php-zend-framework-tutorial-by-ralf-eggert/</link>
		<comments>http://blog.evolution515.net/article/php-zend-framework-tutorial-by-ralf-eggert/#comments</comments>
		<pubDate>Thu, 09 Aug 2007 21:52:20 +0000</pubDate>
		<dc:creator>Blu:RayNe</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.evolution515.net/article/php-zend-framework-tutorial-by-ralf-eggert/</guid>
		<description><![CDATA[I was a friend of Zend Framework when it was in version 0.5 because of the convincing and really well-thought concepts. Most of them are even better than those of CakePHP  (ok, CakePHP can some little other frameworks can do much more than Zend Framework). But Zend Framework is now final and already 1.01, [...]]]></description>
			<content:encoded><![CDATA[<p>I was a friend of <a href="http://framework.zend.com">Zend Framework</a> when it was in version 0.5 because of the convincing and really well-thought concepts. Most of them are even better than those of <a href="http://www.cakephp.org">CakePHP</a>  (ok, <a href="http://www.cakephp.org">CakePHP</a> can some little other frameworks can do much more than <a href="http://framework.zend.com">Zend Framework</a>). But <a href="http://framework.zend.com">Zend Framework</a> is now final and already 1.01, and i guess it has a bright future <img src='http://blog.evolution515.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>There is an easy to understand and some <a href="http://www.ralfeggert.de/kategorie/zend-framework-tutorial/">good tutorials</a> on <a href="http://www.ralfeggert.de/">Ralf Eggert&#8217;s Blog</a> that gives you an introduction to MVC and how things work with <a href="http://framework.zend.com">Zend Framework</a>. Just try it for yourself!</p>
<p><strong>And for all trolls: I know Java is better!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.evolution515.net/article/php-zend-framework-tutorial-by-ralf-eggert/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Uploads with progress-meter in PHP &#8211; a pain in the ass!</title>
		<link>http://blog.evolution515.net/article/uploads-with-progress-meter-in-php-a-pain-in-the-ass/</link>
		<comments>http://blog.evolution515.net/article/uploads-with-progress-meter-in-php-a-pain-in-the-ass/#comments</comments>
		<pubDate>Wed, 25 Jul 2007 23:03:35 +0000</pubDate>
		<dc:creator>Blu:RayNe</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.evolution515.net/article/uploads-with-progress-meter-in-php-a-pain-in-the-ass/</guid>
		<description><![CDATA[&#160;

An APC from the aliens movies; picture py paramount studios
&#160;

Okay, i probably guess that probably have some experience with it, probably already made an implementation that works. And probably you only think it works. But often not for production level or enterprise! At the end of the article you will praise once again APC &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<div class="frame" style="float: right; margin-left: 0.4em;"><img width="200" height="146" class="border" alt="Armored Personal Carrier" src="http://blog.evolution515.net/media/Image/apc.jpg" /></p>
<div class="caption" style="width: 200px;">An APC from the aliens movies; picture py paramount studios</div>
<div class="heightDispatcher">&nbsp;</div>
</div>
<p>Okay, i probably guess that probably have some experience with it, probably already made an implementation that works. And probably you only think it works. But often not for production level or enterprise! At the end of the article you will praise once again <strong>APC &#8211; the PHP Opcode Cache </strong> <img src='http://blog.evolution515.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Well, I tried it all, the <em>PECL uploadprogress_meter</em>-extension which doesn&#8217;t really always compile to the latest PHP, upload with Flash &ge;8 and JavaScript (because we want to show the progress in HTML). Then we or i have also additional requirements to the upload, like posting variables with one file. And it should really run stable what most solutions don&#8217;t!
</p>
<h3><strong>Let&#8217;s summarize &#8211; Progress Meter using PHP as primary server language:</strong></h3>
<dl>
<dt><strong>PECL Extionsion uploadprogress_meter</strong></dt>
<dd>Often only compiles and runs stable to the version it was built for</dd>
<dt><strong>Wrappers with Perl</strong> 	</dt>
<dd><em>Megaupload</em>, <em>Filechucker </em>or how they call them, have some problems in stability, resulting not always in writing the monitor file. Who knows why? I made an own version based on <em>Megaupload </em>(which should be on release here shortly)</dd>
<dt><strong>Other PHP hacks</strong></dt>
<dd>Do they really run stable with the current PHP built?! Who will update them?</dd>
<dt><strong>Flash-Uploader with JavaScript Backends</strong></dt>
<dd>While beeing client side they have the generic problem of often calling a JavaScript-Callback that results in a flash-side timeout alert-box when you&#8217;re using broadband connections &gt;1MB/s upstream. Shitty for all the customers on your commercial website with such a connection and without any technical knowledge.</dd>
<dt><strong>Pure Flash-based upload progress</strong></dt>
<dd>A solution that really works and runs stable, but do you wanna make your whole site in Flash or are you working in Flex?</dd>
<dt><strong>APC &#8211; the PHP opcode cache</strong></dt>
<dd>You heard right! Just add an <code>apc.rfc1867 = on</code> to your PHP ini and submit also a <code>APC_UPLOAD_PROGRESS</code>&gt;-field and your on the right side calling the progress like with <code>apc_fetch('upload_'.$_POST['APC_UPLOAD_PROGRESS']);</code> For more just have a look <a href="http://www.whenpenguinsattack.com/2006/12/12/how-to-create-a-php-upload-progress-meter/">here</a> and enjoy <img src='http://blog.evolution515.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> 
</dd>
</dl>
<p>  My Perl-based solution mentioned above (called jjUpload) will be available here shortly &ndash; didn&#8217;t i already post about it? It won&#8217;t work on it anymore since APC now has that functionality. Just bad for all you ZendCore- or ZendDebugger-Whores <img src='http://blog.evolution515.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Anyway, i&#8217;d like to hear what you prefer &#8211; <em>client side progress-meters</em> -or- <em>if the status should be pulled from the server</em>?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.evolution515.net/article/uploads-with-progress-meter-in-php-a-pain-in-the-ass/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Real unique id</title>
		<link>http://blog.evolution515.net/article/real-unique-id/</link>
		<comments>http://blog.evolution515.net/article/real-unique-id/#comments</comments>
		<pubDate>Sat, 23 Jun 2007 18:50:06 +0000</pubDate>
		<dc:creator>Blu:RayNe</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.evolution515.net/article/real-unique-id/</guid>
		<description><![CDATA[Every PHP programmer should know that. 
I stumble upon too many lame md5-hashes based on md5(rand()) or even more ciritcal crc32(rand()). That could really lead to trouble especially when you&#8217;re using a lame unique id for critical applications like payments or somethimg.&#160; The chance that one id is used two times is not great, but [...]]]></description>
			<content:encoded><![CDATA[<p>Every PHP programmer should know that. </p>
<p>I stumble upon too many lame md5-hashes based on <strong>md5(rand())</strong> or even more ciritcal <strong>crc32(rand())</strong>. That could really lead to trouble especially when you&#8217;re using a lame unique id for critical applications like payments or somethimg.&nbsp; The chance that one id is used two times is not great, but if there is a chance for such an error, a programmer has to eleminte it!</p>
<h3>And it&#8217;s so easy with PHP!</h3>
<p>string <strong>uniqid</strong> ( [string $prefix [, bool $more_entropy]] )</p>
<p>    Gets a prefixed unique identifier based on the current time in    microseconds.    </p>
<div class="dean_ch" style="white-space: wrap;"><span class="co1">// no prefix</span><br />
<span class="co1">// works only in PHP 5 and later versions</span><br />
<span class="re0">$token</span> = <a href="http://www.php.net/md5"><span class="kw3">md5</span></a><span class="br0">&#40;</span><a href="http://www.php.net/uniqid"><span class="kw3">uniqid</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</p>
<p><span class="co1">// better, difficult to guess</span><br />
<span class="re0">$better_token</span> = <a href="http://www.php.net/md5"><span class="kw3">md5</span></a><span class="br0">&#40;</span><a href="http://www.php.net/uniqid"><span class="kw3">uniqid</span></a><span class="br0">&#40;</span><a href="http://www.php.net/rand"><span class="kw3">rand</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>, <span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</p>
<p>
&nbsp;</div>
<p>For more see the <a href="http://de2.php.net/manual/en/function.uniqid.php">PHP Manual</a>&hellip;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.evolution515.net/article/real-unique-id/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PEAR Mass-Install</title>
		<link>http://blog.evolution515.net/article/pear-mass-install/</link>
		<comments>http://blog.evolution515.net/article/pear-mass-install/#comments</comments>
		<pubDate>Tue, 17 Apr 2007 17:12:25 +0000</pubDate>
		<dc:creator>Blu:RayNe</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.evolution515.net/article/pear-mass-install/</guid>
		<description><![CDATA[Schon einmal ge&#228;rgert, dass man bei PEAR alle Pakete von der Hand installieren muss? Nein,man muss nicht!
Zum einen hilft es oft pear config-set preferred_state beta zu setzen, da viele Pakete sich nich im Beta-Status befinden.
Und uum einen hilft download-all, was aber alle PEAR und PECL-Pakete herunterl&#228;dt.
Eine andere M&#246;glicht ist mit pear remote-list &#124; awk &#8216;{print [...]]]></description>
			<content:encoded><![CDATA[<p>Schon einmal ge&auml;rgert, dass man bei PEAR alle Pakete von der Hand installieren muss? Nein,man muss nicht!</p>
<p>Zum einen hilft es oft <strong>pear config-set preferred_state beta</strong> zu setzen, da viele Pakete sich nich im Beta-Status befinden.</p>
<p>Und uum einen hilft <strong>download-all</strong>, was aber alle PEAR und PECL-Pakete herunterl&auml;dt.</p>
<p>Eine andere M&ouml;glicht ist mit <strong>pear remote-list | awk &#8216;{print $1}&#8217; &gt; pear-packages&nbsp; </strong>sich erst einmal die Liste aller Pakete zu holen, diese kann man dann bequem in einem Text-Editor bearbeiten, und per <strong>cat </strong><strong>pear-packages</strong><strong> | xargs -n 1 pear install -a</strong> dann auch bequem alle ausgew&auml;hlten installieren</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.evolution515.net/article/pear-mass-install/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

