i was looking for a server-side twitter widget displaying a few tweets for the nachtwerk-online.de page, and i did not find an out-of-the-box solution. the twitter widget on my blog is a javascript client-side thingy. having some php experience i hacked this up (note you need the code below too, for the "niceTimeDiff"-method):

// load the tweets
// uses a cache to easen on the twitter server.
$mtime= null;
if($mtime== null ||(time()-$mtime)>(9*60)){// 9 minutes or older?
    $url=sprintf("http://twitter.com/statuses/user_timeline/%s.xml?count=%d","Nachtwerk_IN",5);// load 5 tweets
    $parsed=new SimpleXMLElement($tcontent);
        $message=ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\" rel=\"nofollow\">\\0</a>",$message);
        $tweet['timeDiff']= niceTimeDiff($status->created_at);

Of course you will want to replace "Nachtwerk_IN" by your twitter id, and the 5 after it by the nr. of tweets you want to load. The file pointed to by $twitter_cache_file needs to be writable.

urls will be links. the method "niceTimeDiff" is written like this:

function niceTimeDiff($ref_date){
    if($days>1)$ret.=round($days)." days";
    elseif($hours>1)$ret.=round($hours)." hours";
    elseif($minutes>1)$ret.=round($minutes)." minutes";
    elseif($secs>1)$ret.=round($secs)." seconds";
    return$ret." ago";

Using this code, you will end up with an array called $all_tweets, containing assoziative arrays with 'message' and 'timeDiff' keys. Twitter will be checked every 9 minutes tops.