<?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>Clker.com - weblog &#187; php</title>
	<atom:link href="http://www.clker.com/blog/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.clker.com/blog</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sat, 21 Nov 2009 03:49:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Caching SQL results with PHP</title>
		<link>http://www.clker.com/blog/2008/05/12/caching-sql-results-with-php/</link>
		<comments>http://www.clker.com/blog/2008/05/12/caching-sql-results-with-php/#comments</comments>
		<pubDate>Mon, 12 May 2008 15:54:36 +0000</pubDate>
		<dc:creator>Mohamed Ibrahim</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[bench]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.clker.com/blog/2008/05/12/caching-sql-results-with-php/</guid>
		<description><![CDATA[I&#8217;ve been looking around lately on the best way to cache SQL results in PHP. I found some interesting articles posted in lots of places, but I didn&#8217;t find any that exactly matches my needs. The problem I have on hand is basically the same every growing website faces: decreasing mean resource usage per page [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been looking around lately on the best way to cache SQL results in PHP. I found some interesting articles posted in lots of places, but I didn&#8217;t find any that exactly matches my needs. The problem I have on hand is basically the same every growing website faces: decreasing mean resource usage per page request.</p>
<p><strong>Now &#8211; this is my plan A </strong>to keep up with the website&#8217;s growth without a lot of hardware upgrades. There is a plan B, but I will keep that to a later post.<br />
<span id="more-29"></span><br />
Usually, the time consumed by executing the SQL statements is more than 80% of the whole script time. Reducing this time will significantly reduce the resource usage. CPU is not the bottle neck, usually SQL queries result in a significant disk access especially if there&#8217;s a lot of inserts/updates/deletes.</p>
<p>The easiest and best way I found is to use PHP&#8217;s serialize to store the SQL results. This requires that we fetch all the rows we&#8217;re dealing with. So the sequence of operations is to check the cache file, if expired or does not exist then fetch all the rows from the result set, serialize in one variable, write it to the cache file.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">require_once</span> <span class="st0">&quot;utils.php&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$cache_prefix</span>=<span class="st0">&#8216;/tmp/clkercache/&#8217;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> cache_fetch<span class="br0">&#40;</span><span class="re0">$filename</span>, <span class="re0">$expiration</span>=<span class="nu0">3600</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <a href="http://www.php.net/global"><span class="kw3">global</span></a> <span class="re0">$cache_prefix</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$filename</span>=<span class="re0">$cache_prefix</span>.<span class="re0">$filename</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>!<a href="http://www.php.net/file_exists"><span class="kw3">file_exists</span></a><span class="br0">&#40;</span><span class="re0">$filename</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/time"><span class="kw3">time</span></a><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>-<a href="http://www.php.net/filemtime"><span class="kw3">filemtime</span></a><span class="br0">&#40;</span><span class="re0">$filename</span><span class="br0">&#41;</span>&gt;<span class="re0">$expiration</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$data</span>=<a href="http://www.php.net/unserialize"><span class="kw3">unserialize</span></a><span class="br0">&#40;</span><a href="http://www.php.net/base64_decode"><span class="kw3">base64_decode</span></a><span class="br0">&#40;</span><a href="http://www.php.net/file_get_contents"><span class="kw3">file_get_contents</span></a><span class="br0">&#40;</span><span class="re0">$filename</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> <span class="re0">$data</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> cache_store<span class="br0">&#40;</span><span class="re0">$filename</span>,<span class="re0">$data</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <a href="http://www.php.net/global"><span class="kw3">global</span></a> <span class="re0">$cache_prefix</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$filename</span>=<span class="re0">$cache_prefix</span>.<span class="re0">$filename</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; @mk_dir<span class="br0">&#40;</span><span class="re0">$filename</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">return</span> file_put_contents<span class="br0">&#40;</span><span class="re0">$filename</span>,<a href="http://www.php.net/base64_encode"><span class="kw3">base64_encode</span></a><span class="br0">&#40;</span><a href="http://www.php.net/serialize"><span class="kw3">serialize</span></a><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>So the way to use the caching functions would be something similar to this:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span> !<span class="br0">&#40;</span><span class="re0">$pictures</span>=cache_fetch<span class="br0">&#40;</span><span class="st0">&quot;mypictures.cache&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$res</span>=query<span class="br0">&#40;</span><span class="st0">&quot;select pictureid from pictures order by rating15days desc limit 100&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="re0">$row</span>=fetch_array<span class="br0">&#40;</span><span class="re0">$res</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="re0">$pictures</span><span class="br0">&#91;</span><span class="br0">&#93;</span>=<span class="re0">$row</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; cache_store<span class="br0">&#40;</span><span class="st0">&quot;mypictures.cache&quot;</span>,<span class="re0">$pictures</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>So how to do that if you have multiple queries? The way I store my cache files is by giving them suffix or prefix names depending on what is being stores. For example a file that store the pictures that are related to a picture whose id is 1500 being displayed, will be called <strong>related-1500.cache</strong>. For more complicated cases like searches, I would use the md5sum of the request URI.</p>
<p>The results were good. Using apache bench I tested the homepage. Before any caching it used to support 3 pages per second. After caching the result was 35. I think in my current situation with my current traffic, this is a very good result.</p>
<p>One might think so what does it take to generate pages at a much higher rate &#8211; say 300, 400 or even a 1000 or more? Well, that&#8217;s my plan B, and I&#8217;ll discuss that in more detail in another post. This plan B will generate that much pages per second.</p>
<p>Technorati Tags: <a href="#" rel="tag">optimization</a>, <a href="#" rel="tag"> server</a>, <a href="#" rel="tag"> sql</a>, <a href="#" rel="tag"> php</a>, <a href="#" rel="tag"> apache</a>, <a href="#" rel="tag"> bench</a>, <a href="#" rel="tag"> cache</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.clker.com/blog/2008/05/12/caching-sql-results-with-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Creating a tar gz on the fly using PHP</title>
		<link>http://www.clker.com/blog/2008/03/27/creating-a-tar-gz-on-the-fly-using-php/</link>
		<comments>http://www.clker.com/blog/2008/03/27/creating-a-tar-gz-on-the-fly-using-php/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 17:41:53 +0000</pubDate>
		<dc:creator>Mohamed Ibrahim</dc:creator>
				<category><![CDATA[Internet general]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[compress]]></category>
		<category><![CDATA[gz]]></category>
		<category><![CDATA[online]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tar]]></category>

		<guid isPermaLink="false">http://www.clker.com/blog/2008/03/27/creating-a-tar-gz-on-the-fly-using-php/</guid>
		<description><![CDATA[A while ago, I thought about creating a tar.gz file for every download, so that if someone runs a search, he/she then can download all the images in the results. After a little bit of research, I found that PHP has a function for gzip. I also knew that the tar format just sticks files [...]]]></description>
			<content:encoded><![CDATA[<p>A while ago, I thought about creating a tar.gz file for every download, so that if someone runs a search, he/she then can download all the images in the results. After a little bit of research, I found that PHP has a function for gzip. I also knew that the tar format just sticks files after one another, so if I can implement the tar format in PHP then I can gzip all images in the results.</p>
<p>I found <a href="http://www.koders.com/php/fidA384A1E097E7BEA8DB56698D0FE248C7E1D68DB4.aspx?s=smtp+server">this LGPL code</a> that implemented the tar format. I used it (and modified it a little bit) to produce the online tar.gz functions:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// Computes the unsigned Checksum of a file&#8217;s header</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// to try to ensure valid file</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// PRIVATE ACCESS FUNCTION</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> __computeUnsignedChecksum<span class="br0">&#40;</span><span class="re0">$bytestring</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="re0">$i</span>=<span class="nu0">0</span>; <span class="re0">$i</span>&lt;<span class="nu0">512</span>; <span class="re0">$i</span>++<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$unsigned_chksum</span> += <a href="http://www.php.net/ord"><span class="kw3">ord</span></a><span class="br0">&#40;</span><span class="re0">$bytestring</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="re0">$i</span>=<span class="nu0">0</span>; <span class="re0">$i</span>&lt;<span class="nu0">8</span>; <span class="re0">$i</span>++<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$unsigned_chksum</span> -= <a href="http://www.php.net/ord"><span class="kw3">ord</span></a><span class="br0">&#40;</span><span class="re0">$bytestring</span><span class="br0">&#91;</span><span class="nu0">148</span> + <span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="re0">$unsigned_chksum</span> += <a href="http://www.php.net/ord"><span class="kw3">ord</span></a><span class="br0">&#40;</span><span class="st0">&quot; &quot;</span><span class="br0">&#41;</span> * <span class="nu0">8</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> <span class="re0">$unsigned_chksum</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">// Generates a TAR file from the processed data</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// PRIVATE ACCESS FUNCTION</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> tarSection<span class="br0">&#40;</span><span class="re0">$Name</span>, <span class="re0">$Data</span>, <span class="re0">$information</span>=<span class="kw2">NULL</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// Generate the TAR header for this file</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$header</span> .= <a href="http://www.php.net/str_pad"><span class="kw3">str_pad</span></a><span class="br0">&#40;</span><span class="re0">$Name</span>,<span class="nu0">100</span>,<a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$header</span> .= <a href="http://www.php.net/str_pad"><span class="kw3">str_pad</span></a><span class="br0">&#40;</span><span class="st0">&quot;777&quot;</span>,<span class="nu0">7</span>,<span class="st0">&quot;0&quot;</span>,STR_PAD_LEFT<span class="br0">&#41;</span> . <a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$header</span> .= <a href="http://www.php.net/str_pad"><span class="kw3">str_pad</span></a><span class="br0">&#40;</span><a href="http://www.php.net/decoct"><span class="kw3">decoct</span></a><span class="br0">&#40;</span><span class="re0">$information</span><span class="br0">&#91;</span><span class="st0">&quot;user_id&quot;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>,<span class="nu0">7</span>,<span class="st0">&quot;0&quot;</span>,STR_PAD_LEFT<span class="br0">&#41;</span> . <a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$header</span> .= <a href="http://www.php.net/str_pad"><span class="kw3">str_pad</span></a><span class="br0">&#40;</span><a href="http://www.php.net/decoct"><span class="kw3">decoct</span></a><span class="br0">&#40;</span><span class="re0">$information</span><span class="br0">&#91;</span><span class="st0">&quot;group_id&quot;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>,<span class="nu0">7</span>,<span class="st0">&quot;0&quot;</span>,STR_PAD_LEFT<span class="br0">&#41;</span> . <a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="re0">$header</span> .= <a href="http://www.php.net/str_pad"><span class="kw3">str_pad</span></a><span class="br0">&#40;</span><a href="http://www.php.net/decoct"><span class="kw3">decoct</span></a><span class="br0">&#40;</span><a href="http://www.php.net/strlen"><span class="kw3">strlen</span></a><span class="br0">&#40;</span><span class="re0">$Data</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,<span class="nu0">11</span>,<span class="st0">&quot;0&quot;</span>,STR_PAD_LEFT<span class="br0">&#41;</span> . <a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$header</span> .= <a href="http://www.php.net/str_pad"><span class="kw3">str_pad</span></a><span class="br0">&#40;</span><a href="http://www.php.net/decoct"><span class="kw3">decoct</span></a><span class="br0">&#40;</span><a href="http://www.php.net/time"><span class="kw3">time</span></a><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,<span class="nu0">11</span>,<span class="st0">&quot;0&quot;</span>,STR_PAD_LEFT<span class="br0">&#41;</span> . <a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$header</span> .= <a href="http://www.php.net/str_repeat"><span class="kw3">str_repeat</span></a><span class="br0">&#40;</span><span class="st0">&quot; &quot;</span>,<span class="nu0">8</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$header</span> .= <span class="st0">&quot;0&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$header</span> .= <a href="http://www.php.net/str_repeat"><span class="kw3">str_repeat</span></a><span class="br0">&#40;</span><a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>,<span class="nu0">100</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="re0">$header</span> .= <a href="http://www.php.net/str_pad"><span class="kw3">str_pad</span></a><span class="br0">&#40;</span><span class="st0">&quot;ustar&quot;</span>,<span class="nu0">6</span>,<a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">32</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$header</span> .= <a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">32</span><span class="br0">&#41;</span> . <a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$header</span> .= <a href="http://www.php.net/str_pad"><span class="kw3">str_pad</span></a><span class="br0">&#40;</span><span class="re0">$information</span><span class="br0">&#91;</span><span class="st0">&quot;user_name&quot;</span><span class="br0">&#93;</span>,<span class="nu0">32</span>,<a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$header</span> .= <a href="http://www.php.net/str_pad"><span class="kw3">str_pad</span></a><span class="br0">&#40;</span><span class="re0">$information</span><span class="br0">&#91;</span><span class="st0">&quot;group_name&quot;</span><span class="br0">&#93;</span>,<span class="nu0">32</span>,<a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$header</span> .= <a href="http://www.php.net/str_repeat"><span class="kw3">str_repeat</span></a><span class="br0">&#40;</span><a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>,<span class="nu0">8</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="re0">$header</span> .= <a href="http://www.php.net/str_repeat"><span class="kw3">str_repeat</span></a><span class="br0">&#40;</span><a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>,<span class="nu0">8</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$header</span> .= <a href="http://www.php.net/str_repeat"><span class="kw3">str_repeat</span></a><span class="br0">&#40;</span><a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>,<span class="nu0">155</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$header</span> .= <a href="http://www.php.net/str_repeat"><span class="kw3">str_repeat</span></a><span class="br0">&#40;</span><a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>,<span class="nu0">12</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// Compute header checksum</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="re0">$checksum</span> = <a href="http://www.php.net/str_pad"><span class="kw3">str_pad</span></a><span class="br0">&#40;</span><a href="http://www.php.net/decoct"><span class="kw3">decoct</span></a><span class="br0">&#40;</span>__computeUnsignedChecksum<span class="br0">&#40;</span><span class="re0">$header</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,<span class="nu0">6</span>,<span class="st0">&quot;0&quot;</span>,STR_PAD_LEFT<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="re0">$i</span>=<span class="nu0">0</span>; <span class="re0">$i</span>&lt;<span class="nu0">6</span>; <span class="re0">$i</span>++<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$header</span><span class="br0">&#91;</span><span class="br0">&#40;</span><span class="nu0">148</span> + <span class="re0">$i</span><span class="br0">&#41;</span><span class="br0">&#93;</span> = <a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$checksum</span>,<span class="re0">$i</span>,<span class="nu0">1</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$header</span><span class="br0">&#91;</span><span class="nu0">154</span><span class="br0">&#93;</span> = <a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="re0">$header</span><span class="br0">&#91;</span><span class="nu0">155</span><span class="br0">&#93;</span> = <a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">32</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// Pad file contents to byte count divisible by 512</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$file_contents</span> = <a href="http://www.php.net/str_pad"><span class="kw3">str_pad</span></a><span class="br0">&#40;</span><span class="re0">$Data</span>,<span class="br0">&#40;</span><a href="http://www.php.net/ceil"><span class="kw3">ceil</span></a><span class="br0">&#40;</span><a href="http://www.php.net/strlen"><span class="kw3">strlen</span></a><span class="br0">&#40;</span><span class="re0">$Data</span><span class="br0">&#41;</span> / <span class="nu0">512</span><span class="br0">&#41;</span> * <span class="nu0">512</span><span class="br0">&#41;</span>,<a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="co1">// Add new tar formatted data to tar file contents</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$tar_file</span> = <span class="re0">$header</span> . <span class="re0">$file_contents</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> <span class="re0">$tar_file</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> targz<span class="br0">&#40;</span><span class="re0">$Name</span>, <span class="re0">$Data</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> <a href="http://www.php.net/gzencode"><span class="kw3">gzencode</span></a><span class="br0">&#40;</span>tarSection<span class="br0">&#40;</span><span class="re0">$Name</span>,<span class="re0">$Data</span><span class="br0">&#41;</span>,<span class="nu0">9</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>To  use those functions all you have to do is send a header with the mime type for the tar gz ( application/x-gzi<span id="__firefox-findbar-search-id" style="padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit"></span>p ) using the php header function. To add a tar/gz section for a file, read the file in an array using filegetcontents and pass the filename and data to the targz function. Echo what is returned. That&#8217;s it!</p>
<p>So why is it not active on clker.com website? I actually tried it and found that compression consumes a lot of CPU. In the first 20 minute I had more than one hundred connections for different users downloading their results and the CPU was saturated. This basically left no CPU for searching. So use it carefully, and only if you really need that functionality.</p>
<p>Technorati Tags: <a href="#" rel="tag">tar</a>, <a href="#" rel="tag"> gz</a>, <a href="#" rel="tag"> compress</a>, <a href="#" rel="tag"> online</a>, <a href="#" rel="tag"> php</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.clker.com/blog/2008/03/27/creating-a-tar-gz-on-the-fly-using-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hardware problems &#8211; the mystery solved</title>
		<link>http://www.clker.com/blog/2007/12/11/hardware-problems-the-mystery-solved/</link>
		<comments>http://www.clker.com/blog/2007/12/11/hardware-problems-the-mystery-solved/#comments</comments>
		<pubDate>Tue, 11 Dec 2007 18:34:54 +0000</pubDate>
		<dc:creator>Mohamed Ibrahim</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AMD]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[sempron]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[shutting down]]></category>
		<category><![CDATA[temperature]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[web server]]></category>

		<guid isPermaLink="false">http://www.clker.com/blog/2007/12/11/hardware-problems-the-mystery-solved/</guid>
		<description><![CDATA[I previously wrote about hardware problems that were puzzling me, and I finally found the answer. I installed sensors on ubuntu and ran ksensors and just watched what&#8217;s going on. The old server that was shutting down suddenly had an opteron dual core processor, which ran at 50 degrees Celsius at no load. I had [...]]]></description>
			<content:encoded><![CDATA[<p>I previously wrote about <a href="http://www.clker.com/blog/2007/12/08/hardware-problems/">hardware problems</a> that were puzzling me, and I finally found the answer. I installed sensors on ubuntu and ran ksensors and just watched what&#8217;s going on. The old server that was shutting down suddenly had an opteron dual core processor, which ran at 50 degrees Celsius at no load. I had three websites running there, the most recent addition is clker.com . Due to the large number of people that were trying to access the website, the CPU was loaded and overheated, which inturn lead to it shutting down.</p>
<p>Of course the solution is to put the server in a very cold room, which I don&#8217;t have. I resorted to buying a new board and CPU, which does not heat as much as the old ones and transfered the database and pictures to it. Currently the no load temperature is 11 degrees, which I think is great. This new board is a special sale from microcenter, both the board and CPU were for $94 with $15 rebate Sempron 64! I added 1GB of RAM. It really worked much better than my expectations, as I had very very low performance expectations from that CPU</p>
<p>Currently this server is running clker.com only, and will run mibrahim.net today. The CPU load as shown in top does not pass 2% except in spikes. People are still digging as well as search engine robots. So that&#8217;s a good value if someone wants to run his/her own starter website.</p>
<p>Technorati Tags: <a href="#" rel="tag">ubuntu</a>, <a href="#" rel="tag"> shutting down</a>, <a href="#" rel="tag"> temperature</a>, <a href="#" rel="tag"> sempron</a>, <a href="#" rel="tag"> AMD</a>, <a href="#" rel="tag"> performance</a>, <a href="#" rel="tag"> linux</a>, <a href="#" rel="tag"> web server</a>, <a href="#" rel="tag"> server</a>, <a href="#" rel="tag"> php</a>, <a href="#" rel="tag"> postgresql</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.clker.com/blog/2007/12/11/hardware-problems-the-mystery-solved/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
