<?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>AjaxMasters Blog &#187; php</title> <atom:link href="http://blog.ajaxmasters.com/tag/php/feed/" rel="self" type="application/rss+xml" /><link>http://blog.ajaxmasters.com</link> <description>Just another WordPress weblog</description> <lastBuildDate>Thu, 24 Jun 2010 11:55:25 +0000</lastBuildDate> <generator>http://wordpress.org/?v=2.9.2</generator> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <item><title>Feedback Forum Open-Source</title><link>http://blog.ajaxmasters.com/feedback-forum-open-source/</link> <comments>http://blog.ajaxmasters.com/feedback-forum-open-source/#comments</comments> <pubDate>Fri, 07 May 2010 21:35:30 +0000</pubDate> <dc:creator>Chocksy</dc:creator> <category><![CDATA[General]]></category> <category><![CDATA[feedback]]></category> <category><![CDATA[fork]]></category> <category><![CDATA[forum]]></category> <category><![CDATA[github]]></category> <category><![CDATA[open]]></category> <category><![CDATA[php]]></category> <category><![CDATA[simple]]></category> <category><![CDATA[source]]></category><guid
isPermaLink="false">http://blog.ajaxmasters.com/?p=368</guid> <description><![CDATA[<a
href="http://blog.ajaxmasters.com/feedback-forum-open-source/"><img
align="left" hspace="5" width="150" height="150" src="http://blog.ajaxmasters.com/wp-content/uploads/2010/05/logo-170x170.png" class="alignleft tfe wp-post-image" alt="" title="logo" /></a>Hy there! I was working on this forum for one of our websites. But since we are not advancing very well with them i decided that it would be good to give this as open source to the internetz ;). So this is a simple version of the ones that are popular on the internet. Also I want to know if you are interested in it! If you are then [...]]]></description> <content:encoded><![CDATA[<p>Hy there! I was working on this forum for one of our websites. But since we are not advancing very well with them i decided that it would be good to give this as open source to the internetz ;). So this is a simple version of the ones that are popular on the internet. Also I want to know if you are interested in it! If you are then i might get more versions out of it and with your help maybe we can make it better.</p><p>It&#8217;s on <a
href="http://github.com/Chocksy/feedbacker" target="_blank">github</a> you can fork it there or <a
href="http://github.com/Chocksy/feedbacker/zipball/master" target="_blank">download it</a>!</p><div
id="attachment_371" class="wp-caption aligncenter" style="width: 130px"><a
href="http://github.com/Chocksy/feedbacker"><img
src="http://blog.ajaxmasters.com/wp-content/uploads/2010/05/github.png" alt="Fork on github!" title="Fork on github!" width="120" height="60" class="size-full wp-image-371" /></a><p
class="wp-caption-text">Fork on github!</p></div><p><a
align="center" href="http://ajaxmasters.com/development/feedback-forum/" target="_blank"><br
/><h2>DEMO</h2><p></a></p> ]]></content:encoded> <wfw:commentRss>http://blog.ajaxmasters.com/feedback-forum-open-source/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Guide to a very fast website</title><link>http://blog.ajaxmasters.com/guide-to-a-very-fast-website/</link> <comments>http://blog.ajaxmasters.com/guide-to-a-very-fast-website/#comments</comments> <pubDate>Sat, 02 Jan 2010 23:53:25 +0000</pubDate> <dc:creator>Chocksy</dc:creator> <category><![CDATA[Tutorial]]></category> <category><![CDATA[code]]></category> <category><![CDATA[fast]]></category> <category><![CDATA[htaccess]]></category> <category><![CDATA[php]]></category> <category><![CDATA[website]]></category><guid
isPermaLink="false">http://blog.ajaxmasters.com/?p=259</guid> <description><![CDATA[<a
href="http://blog.ajaxmasters.com/guide-to-a-very-fast-website/"><img
align="left" hspace="5" width="150" src="http://blog.ajaxmasters.com/wp-content/uploads/2010/01/1262476500_performance-systeme-OS.png" class="alignleft wp-post-image tfe" alt="Performance" title="Performance" /></a>I was experimenting with new features for the past few weeks and while i was working on optimizing a website we are working on currently i was wondering what would it take to get a very big score on Yslow. But as Jeff says in this old post: &#8220;Yahoo&#8217;s Problems Are Not Your Problems&#8221;. So i was just doing the usual putting the javascript files at the bottom, minify every [...]]]></description> <content:encoded><![CDATA[<div
id="attachment_281" class="wp-caption alignleft" style="width: 138px"><a
href="http://blog.ajaxmasters.com/guide-to-a-very-fast-website/1262476500_performance-systeme-os/" rel="attachment wp-att-281"><img
src="http://blog.ajaxmasters.com/wp-content/uploads/2010/01/1262476500_performance-systeme-OS.png" alt="Performance" title="Performance" width="128" height="128" class="size-full wp-image-281" /></a><p
class="wp-caption-text">Performance</p></div><br
/> I was experimenting with new features for the past few weeks and while i was working on optimizing a website we are working on currently i was wondering what would it take to get a very big score on <a
href="http://developer.yahoo.com/yslow/">Yslow</a>. But as Jeff says in <a
href="http://www.codinghorror.com/blog/archives/000932.html">this</a> old post: &#8220;Yahoo&#8217;s Problems Are Not Your Problems&#8221;. So i was just doing the usual putting the javascript files at the bottom, minify every single one of them. I usually use this website: <a
href="http://yui.2clics.net/">YUI Compressor Online</a> it always does the job for me.</p><p>What Yslow goes round and round is the cache system of the browser. So what you are actually doing is making everything cacheable and as small as possible so that the browser takes everything loading from one bite. The browsers have a limited number of requests that they address at once so if you can get into that margin then you are good. So very important <strong>combine every file and make is small!</strong> <img
src='http://blog.ajaxmasters.com/wp-content/plugins/smilies-themer/pidgin/smile.png' alt=':)' class='wp-smiley' /></p><p>What have i done is use the gzip module of the apache server by using php and a .htaccess file. I believe this is one of the most nice ways to take advantage of this feature without making any changes to your website. What it does is adding lines of code at the beginning of txt/html/htm/php files, css files and js files. After we do this we add a closing line at the end and we are good. Gzip is in place up and running.</p><p>How do we do it? Well here is the code:</p><pre class="brush: php;">&lt;FilesMatch &quot;\.(css)&quot;&gt;
    ForceType application/x-httpd-php
	php_value auto_prepend_file &quot;address-to-this-file/gzip/gzip-css.php&quot;
php_value auto_append_file &quot;address-to-this-file/gzip/gzip-end.php&quot;
&lt;/FilesMatch&gt;

&lt;FilesMatch &quot;\.(txt|html|htm|php)&quot;&gt;
    ForceType application/x-httpd-php
	php_value auto_prepend_file &quot;address-to-this-file/gzip/gzip-gen.php&quot;
php_value auto_append_file &quot;address-to-this-file/gzip/gzip-end.php&quot;
&lt;/FilesMatch&gt;

&lt;FilesMatch &quot;\.(js)&quot;&gt;
    ForceType application/x-httpd-php
	php_value auto_prepend_file &quot;address-to-this-file/gzip/gzip-js.php&quot;
php_value auto_append_file &quot;address-to-this-file/gzip/gzip-end.php&quot;
&lt;/FilesMatch&gt;</pre><p>The next step is a selective one since what we are doing is telling the browser to not look for a file until we tell it to. So if we set the expiration to 2 years from now the browser will always use the one it has in it&#8217;s cache until 2 years pass. <img
src='http://blog.ajaxmasters.com/wp-content/plugins/smilies-themer/pidgin/smile.png' alt=':)' class='wp-smiley' /></p><pre class="brush: php;">&lt;IfModule mod_expires.c&gt;
ExpiresActive On
ExpiresDefault A600
ExpiresByType image/x-icon A2592000
ExpiresByType application/x-javascript A604800
ExpiresByType text/javascript A604800
ExpiresByType text/css A604800
ExpiresByType image/gif A2592000
ExpiresByType image/png A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType text/plain A86400
ExpiresByType application/x-shockwave-flash A2592000
ExpiresByType video/x-flv A2592000
ExpiresByType application/pdf A2592000
ExpiresByType text/html A600
&lt;/IfModule&gt;
</pre><p>We check for the expires module and if it&#8217;s activated then we just set the expiration dates. What does &#8220;ExpiresByType text/css A17200&#8243; means? Css files &#8220;<strong>expire after 4.8 hours&#8221;</strong><br
/> &#8220;A&#8221; before the numbers above stands for Access. This means that the stopwatch starts when a client accesses the file. You can also use &#8220;M&#8221; for modified.</p><p
style="text-align: left;"><em><strong>TIME CHEAT SHEET</strong></em></p><ul><li> <em>300   5 MIN</em></li><li><em> 600  10 MIN</em></li><li><em> 900  15 MIN</em></li><li><em> 1800  30 MIN</em></li><li><em> 2700  45 MIN</em></li></ul><ul><li><em>3600   1 HR</em></li><li><em>7200   2 HR</em></li><li><em>86400  24 HR</em></li></ul><ul><li><em>86400   1 DAY</em></li><li><em>604800   7 DAY</em></li></ul><ul><li><em>604800   1 WEEK</em></li><li><em>2419200   4 WEEK</em></li></ul><ul><li><em>2419200   1 MONTH (FEBRUARY)</em></li><li><em>2505600   1 MONTH (FEBRUARY LEAP YEAR)</em></li><li><em> 2592000   1 MONTH (APRIL, JUNE, SEPTEMBER, NOVEMBER)</em></li><li><em>2678400   1 MONTH (JANUARY, MARCH, MAY, JULY, AUGUST, OCTOBER, DECEMBER)</em></li><li><em>31536000  12 MONTH</em></li></ul><p>Now just download this thing and get a faster website. The rest of the Yslow rules are pretty simple to follow so i just felt i would let you know what i use for these 2 because i found them hard to figure out than the rest.<br
/> <br/></p><hr/> <strong
class="in_title">Update</strong><br
/> <br/><br
/> Today I was trying to get the gzip code to work on our server and since we have a shared hosting here we are forced to comply with the rules. And guess what I get a &#8220;500&#8243; error. So i found a new way of doing the same thing. This as long as you have Rewrite_module activated if this is not activated then i don&#8217;t think you can do much of a thing.</p><p>Here it is the .htaccess code:</p><pre class="brush: php;">
RewriteRule ^.+\.(css|js|png|jpg|swf)$ gzip/compress.php [NC]
</pre><p>This will pass all files that are css, js, png, jpg, swf trough the compress.php file. And here is what the compress.php file does:</p><pre class="brush: php;">
&lt;?php
$basedir = $_SERVER['DOCUMENT_ROOT'];
$file = realpath( $basedir . $_SERVER[&quot;REQUEST_URI&quot;] );

if( !file_exists($file) &amp;&amp; strpos($file, $basedir) === 0 ) {
    header(&quot;HTTP/1.0 404 Not Found&quot;);
    print &quot;File does not exist.&quot;;
    exit();
}

$path_info = pathinfo($file);
$extension=$path_info['extension'];

switch($extension) {
    case 'css':
        $mime = &quot;text/css&quot;;
        break;
    case'js':
        $mine = &quot;text/javascript&quot;;
        break;
    default:
        $mime = &quot;text/plain&quot;;
}

if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip'))
    ob_start(&quot;ob_gzhandler&quot;);
else
    ob_start();
header( &quot;Content-Type: &quot; . $mime . &quot;; charset: UTF-8&quot;);
header (&quot;cache-control: must-revalidate&quot;);
readfile($file);
?&gt;
</pre><p>The file checks for the extension of the file that is receives and ads the corresponding headers to it&#8217;s top.<br
/> Pretty simple. Download the zip file to get both versions.</p><p><div
id="attachment_269" class="wp-caption aligncenter" style="width: 138px"><a
href="http://blog.ajaxmasters.com/wp-content/uploads/2010/01/optimize1.zip"><img
class="size-full wp-image-269" title="Awesome website optimizer" src="http://blog.ajaxmasters.com/wp-content/uploads/2010/01/1262475037_zip.png" alt="Awesome website optimizer" width="128" height="128" /></a><p
class="wp-caption-text">Awesome website optimizer</p></div> ]]></content:encoded> <wfw:commentRss>http://blog.ajaxmasters.com/guide-to-a-very-fast-website/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Use ajax to create a cacheing system</title><link>http://blog.ajaxmasters.com/use-ajax-to-create-a-cacheing-system/</link> <comments>http://blog.ajaxmasters.com/use-ajax-to-create-a-cacheing-system/#comments</comments> <pubDate>Tue, 29 Sep 2009 10:49:52 +0000</pubDate> <dc:creator>Chocksy</dc:creator> <category><![CDATA[Tutorial]]></category> <category><![CDATA[cache]]></category> <category><![CDATA[html]]></category> <category><![CDATA[imageroll]]></category> <category><![CDATA[images]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[php]]></category> <category><![CDATA[plugin]]></category> <category><![CDATA[system]]></category> <category><![CDATA[vi.sualize.us]]></category> <category><![CDATA[wordpress]]></category><guid
isPermaLink="false">http://blog.ajaxmasters.com/?p=163</guid> <description><![CDATA[<a
href="http://blog.ajaxmasters.com/use-ajax-to-create-a-cacheing-system/"><img
align="left" hspace="5" width="150" height="150" src="http://blog.ajaxmasters.com/wp-content/uploads/2009/09/cache-170x170.png" class="alignleft wp-post-image tfe" alt="Cache Pic" title="cache" /></a><p>As I said in my last post, I wanted from the first time to make a cacheing system for my imageroll page. Because i take the images from vi.sualize.us servers and we don't want to make to much trafic and make stuff worse for them.</p><p>So what i did is simple, i made a class that extracts the rss data from theirs servers and get the images to display them. I do this every time someone visits the page.</p>]]></description> <content:encoded><![CDATA[<p><div
id="attachment_164" class="wp-caption alignleft" style="width: 287px"><a
href="http://blog.ajaxmasters.com/wp-content/uploads/2009/09/cache.png"><img
src="http://blog.ajaxmasters.com/wp-content/uploads/2009/09/cache.png" alt="Cache Pic" title="cache" width="277" height="277" class="size-full wp-image-164" /></a><p
class="wp-caption-text">Cache Pic</p></div><p>As I said in my last post, I wanted from the first time to make a cacheing system for my imageroll page. Because i take the images from vi.sualize.us servers and we don&#8217;t want to make to much trafic and make stuff worse for them.</p><p>So what i did is simple, i made a class that extracts the rss data from theirs servers and get the images to display them. I do this every time someone visits the page. If any image is new for the first time we display the image from vi.sualize.us and run a functions in javascript to check for new images. If any new images exist then we cache them in a folder on our server and the next time a user visits the page that image will be shown from our server. Pretty simple.</p><p>For now i&#8217;ll just show you the stuff that makes this thing run and if you want i can share the whole script so that you can make one for your blog or website.</p><p>I&#8217;ll also try to make a WordPress plugin so you can integrate it easily in your blog.</p><p>So here we go. We start with the function that checks for new images:</p><pre class="brush: php;">
functio checkCache($image_url){
            $path=pathinfo($image_url);
            $img_cached = 'cache/'.$path['filename'].'.'.$path['extension'];
            if(!file_exists($img_cached)) {
                createCacheImg($image_url);
            }
}
</pre><p>This function just checks if the image exists in the &#8220;<b>cache</b>&#8221; folder. If it&#8217;s not there then we run the &#8220;<b>createCacheImg</b>&#8221; function.</p><p>We now need a function to get the image so we check if the image is in the cache folder or not so we know what to display.</p><pre class="brush: php;">
    function getImage($or_img) {
        $path=pathinfo($or_img);
        $filename=$path['filename'];
        $img_cached = 'cache/'.$filename.'.'.$path['extension'];
        if(file_exists($img_cached)) {
            $url=$img_cached;
        }else {
            $url=$or_img;
        }

        return $url;
    }
</pre><p>Very simple function that just returns the right url of the image.</p><p>Now we cache the image.</p><pre class="brush: php;">
function createCacheImg($image){
        $srcsize = getimagesize($image);
        $w = $srcsize[0];
        $h = $srcsize[1];

        $path=pathinfo($image);
        $dest='cache/'.$path['filename'].'.'.$path['extension'];
        if($path['extension']=='jpg' || $path['extension']=='jpeg' || $path['extension']=='JPG') {
            $src_img = imagecreatefromjpeg($image);
        }else if($path['extension']=='gif') {
                $src_img = imagecreatefromgif($image);
            }else if($path['extension']=='png') {
                    $src_img = imagecreatefrompng($image);
                }
        $img_cpy=imagecreatetruecolor($w,$h);
        imagecopy($img_cpy, $src_img, 0, 0, 0, 0, $w, $h);
        if($path['extension']=='jpg' || $path['extension']=='jpeg' || $path['extension']=='JPG') {
            imagejpeg($img_cpy,$dest);
        }else if($path['extension']=='gif') {
                imagegif($img_cpy,$dest);
            }else if($path['extension']=='png') {
                    imagepng($img_cpy,$dest);
                }
        imagedestroy($src_img);
}
</pre><p>This function will save the image into the cache folder. Now we need a new file &#8220;<b>checkcache.php</b>&#8221; where we put this code:</p><pre class="brush: php;">
include('functions.php');
$image=$_GET['image'];
checkCache($image);
</pre><p> Right now we should have this kind of structure in our imageroll folder: A folder &#8220;<b>cache</b>&#8221; a file &#8220;<b>functions.php</b>&#8221; where we place all these functions we just did and a file &#8220;<b>index.php</b>&#8221; where we run the javascript function and display the images.</p><p>The &#8220;<b>index.php</b>&#8221; file requires this code:</p><pre class="brush: xml;">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
    &lt;head&gt;

        &lt;title&gt;
            Image ROLL
        &lt;/title&gt;

        &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
        &lt;script src=&quot;http://www.google.com/jsapi&quot;&gt;&lt;/script&gt;
        &lt;script type=&quot;text/javascript&quot;&gt;  google.load(&quot;jquery&quot;, &quot;1.3.2&quot;); &lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
&lt;input type=&quot;hidden&quot; id=&quot;image&quot; value=&quot;http://test.com/image.jpg&quot;&gt;
&lt;img src=&quot;&lt;?=getImage($image)?&gt;&quot; alt=&quot;test image&quot;/&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre><p>We have here a simple index.php file that imports the google api and jquery so we can run a simple ajax function. This is the javascript code that you should insert in this file or a separate one if you want:</p><pre class="brush: jscript;">

            $(document).ready(function() {
                checkCache();
            });

            function checkCache(){
                var page=$('#image');
                var url='checkcache.php';
                var pars='page='+page.val();
                $.get(url,pars);
            }
</pre><p>This will run this function after the page loads and it will check for new images. So this is just a simple script that will make you pages load faster expecialy if you load the images from outside of your server.</p><p>If you liked this i&#8217;ll go and make a more complex one and even share the imageroll script i did. That until i find the time and make a Wordpress Plugin.</p> ]]></content:encoded> <wfw:commentRss>http://blog.ajaxmasters.com/use-ajax-to-create-a-cacheing-system/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Twitter followers counter tutorial</title><link>http://blog.ajaxmasters.com/twitter-followers-counter-tutorial/</link> <comments>http://blog.ajaxmasters.com/twitter-followers-counter-tutorial/#comments</comments> <pubDate>Tue, 22 Sep 2009 18:56:38 +0000</pubDate> <dc:creator>Chocksy</dc:creator> <category><![CDATA[Tutorial]]></category> <category><![CDATA[counter]]></category> <category><![CDATA[mysql]]></category> <category><![CDATA[php]]></category> <category><![CDATA[twitter]]></category><guid
isPermaLink="false">http://blog.ajaxmasters.com/?p=7</guid> <description><![CDATA[<a
href="http://blog.ajaxmasters.com/twitter-followers-counter-tutorial/"><img
align="left" hspace="5" width="150" height="150" src="http://blog.ajaxmasters.com/wp-content/uploads/2009/09/twitter-poster-170x170.png" class="alignleft wp-post-image tfe" alt="Twitter followers tutorial" title="twitter-poster" /></a>You&#8217;re probably wondering why should i bother if we have TwitterCounter to show us the followers, well what if i don&#8217;t like the way it shows them what if i wanna do a counter with my own graphics , well i&#8217;m gonna show you how.
We&#8217;re gonna need the jpg to show the followers on and 2 classes to read the data.
Let&#8217;s get some twitter icons so that we can create [...]]]></description> <content:encoded><![CDATA[<div
id="attachment_9" class="wp-caption alignleft" style="width: 310px"><img
class="size-full wp-image-9" title="twitter-poster" src="http://blog.ajaxmasters.com/wp-content/uploads/2009/09/twitter-poster.png" alt="Twitter followers tutorial" width="300" height="300" /><p
class="wp-caption-text">Twitter followers tutorial</p></div><p>You&#8217;re probably wondering why should i bother if we have <a
href="http://twittercounter.com/" target="_blank">TwitterCounter</a> to show us the followers, well what if i don&#8217;t like the way it shows them what if i wanna do a counter with my own graphics , well i&#8217;m gonna show you how.</p><p>We&#8217;re gonna need the jpg to show the followers on and 2 classes to read the data.</p><p>Let&#8217;s get some twitter icons so that we can create a simple image in photoshop. With a simple google search we get on this article <a
href="http://www.hongkiat.com/blog/100-remarkably-beautiful-twitter-icons-and-buttons/" target="_blank">100+ Remarkably Beautiful Twitter Icons And Buttons</a> created by <a
href="http://www.hongkiat.com/" target="_blank">www.hongkiat.com</a>.</p><p>I did a simple image that you can use if you want it&#8217;s all added to the download package.</p><p>Now let&#8217;s create the php code that will display that followers number&#8230;</p><p>We&#8217;re gonna need 2 classes that will get our job done easily, a twitter class and a class that will transform the xml output into an array one.</p><div
id="attachment_12" class="wp-caption alignright" style="width: 180px"><img
class="size-full wp-image-12" title="follow chocksy" src="http://blog.ajaxmasters.com/wp-content/uploads/2009/09/follow-chocksy1.jpg" alt="My follow chocksy image" width="170" height="85" /><p
class="wp-caption-text">My follow chocksy image</p></div><p>Also you have to find out your id number that&#8217;s a little tricky and i don&#8217;t understand why twitter is not showing that so that you can find it. So here is how you can find your twitter id:</p><p>Go on your account page and on the right you have a button named RSS, now that button has an url like http://twitter.com/statuses/user_timeline/<strong>18107925</strong>.rss so the bolded number is your id that you&#8217;ll have to use in our php code.</p><pre class="brush: php;">
include('xml2array.php');
include('twitter.lib.php');
$user = 'yournickname';
$password = 'yourpassword';

$twitter = new Twitter($user, $password);

$friends = $twitter-&gt;showUser('xml','yourid_number');
$xml=new XML2Array();
$arr=$xml-&gt;parse($friends);
$followers=$arr['user']['followers_count']['value'].' &lt;span style='font-size:12px;'&gt;followers&lt;/span&gt;';
</pre><p>We will now show the image with the number in the right place. We&#8217;ll link the image to our account so that people can follow us and place the followers in the div we have between the a tags.</p><pre class="brush: xml;">
&lt;div&gt;
&lt;a href=&quot;http://www.twitter.com/yournickname&quot; target=&quot;_blank&quot; style=&quot;text-decoration:none;&quot;&gt;&lt;div class=&quot;twitter&quot; id=&quot;tell_followers&quot;&gt;&lt;?=$followers?&gt;&lt;/div&gt;&lt;/a&gt;
&lt;/div&gt;
</pre><p>Here we have the css that takes care of the followers number display.</p><pre class="brush: css;">
.twitter{
color:#FFFFFF;
font-family:Tahoma;
font-size:24px;
line-height:14pt;
background:url(follow_me.png) no-repeat;
height:85px;
width:170px;
padding:35px 0 0 57px;
text-decoration:none;
cursor:pointer;
}
</pre><p><strong
class="in_title">UPDATE (for blogers with a lot of visitors)</strong></p><p>Since we use this script to make requests to the twitter API we have to be careful because the API does not allow us to make more than 100 requests per hour so if you have more than 100 visitors per hour you have to make this changes:</p><p>First of all let&#8217;s create a MYSQL table here is the SQL code for the table, a very simple one :</p><pre class="brush: sql;">
 CREATE TABLE `ajaxmast_blog`.`twitter_counter` (
`id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`followers` BIGINT NOT NULL ,
`last_set` DATETIME NOT NULL
) ENGINE = MYISAM
</pre><p>Ok after we&#8217;ve done that let&#8217;s connect to the db.</p><pre class="brush: php;">
//DATA FOR SQL
define(USERNAME,'db_username');
define(PASSWORD,'db_password');
define(DATABASE,'db_name');
//END CONF

//connect to db
@mysql_connect('localhost',USERNAME,PASSWORD);
@mysql_select_db(DATABASE);
$db_query=mysql_query('SELECT * FROM twitter_counter LIMIT 1');
</pre><p>We&#8217;ll put the request to the twitter API in a function so we don&#8217;t have a very heavy code:</p><pre class="brush: php;">
//function to get the followers nore easily
function get_followers($user,$password){
$twitter = new Twitter($user, $password);

$friends = $twitter-&gt;showUser('xml','18107925');
$xml=new XML2Array();
$arr=$xml-&gt;parse($friends);
$nr_followers=$arr['user']['followers_count']['value'];

return $nr_followers;
}
</pre><p>After that we create a difference function so we can calculate the minutes that have passed since we checked the twitter API:</p><pre class="brush: php;">
function dateDiff($date, $date2)
{
    if($date2 &gt; $date) {
        $tmp = $date2 - $date;
    }

    else {
        $tmp = $date - $date2;
    }

    $seconds = $tmp;

// Relative ////////
    $minutes = floor($tmp/60);
    $tmp -= $minutes * 60;

    // Total ///////////
    $tminutes = floor($seconds/60);

return $tminutes;
}
</pre><p>And for the final touch we check to see if the time has passed so we can call again the twitter API or if not we should display the followers from our database:</p><pre class="brush: php;">
$curent_time=date('Y-m-d H:i:s');
$info=mysql_fetch_array($db_query);
$last_set=$info['last_set'];

$dif=dateDiff(strtotime($curent_time),strtotime($last_set));

//check for last request
if(mysql_num_rows($db_query)==0){
$nr_followers=get_followers($user,$password);

mysql_query(&amp;quot;INSERT INTO twitter_counter (followers,last_set) VALUES('&quot;.$nr_followers.&quot;',NOW())&quot;);
}else if($dif&lt;=10){
$nr_followers=get_followers($user,$password);

mysql_query(&quot;UPDATE twitter_counter SET followers='&quot;.$nr_followers.&quot;',last_set=NOW()&quot;);
}else
$nr_followers=$info['followers'];

$followers=$nr_followers.' &lt;span style=&quot;font-size:12px;&quot;&gt; followers&lt;/span&gt;';
</pre><p>And that&#8217;s it the rest is the same. I will place this version in the .rar file too so you can use it as you may like tell me if you want any changes done to it or anything.  I would like to thank smashing magazine for the feature  here is the article: <a
href="http://www.smashingmagazine.com/2009/03/02/twitter-web-designer-and-developer-toolbox-api-and-tutorials/" target="_blank">ARTICLE</a>.</p><p><a
href="http://blog.ajaxmasters.com/wp-content/uploads/2009/09/twitter_followers1.rar">Download SOURCES</a></p><p>You have in the download package the PSD file and the 2 classes that will help you work this out, also there is a test file too. Hope you find this useful.<br
/> Thanks for reading.</p> ]]></content:encoded> <wfw:commentRss>http://blog.ajaxmasters.com/twitter-followers-counter-tutorial/feed/</wfw:commentRss> <slash:comments>8</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (enhanced) (user agent is rejected)
Database Caching 13/33 queries in 0.005 seconds using disk

Served from: blog.ajaxmasters.com @ 2010-07-31 13:55:11 -->