Monthly Archives: January 2012

To Much Crap

No mater what I do, how much work I get done, there is always more! Tomorrow I have 2 doctors appointment starting at 8:30 and going through probably noon. After that I have a client meeting at 1 then I think I can finally go to work, but I need to run right back out to the bank! I am also expecting at some point tomorrow to get another call from a client asking me to go over there stuff yet again. My day will end up consisting of about 3 hours of actual work and the rest is just stuff thrown in.

On a side note, I made a page that is so 1995 its not even funny. Its still vary much a work in progress tho, I wanted to get the technical aspects out of the way first before I start really designing it.

ps. I really need to figure out if this site is slow as shit because my webhost is still having issues or I have a bad WP setting.

304 Not Modified Header and PHP

This is a nice little snipet that I use when serving dynamic images so the client will cache them properly. It uses a 304 Not Modified header to tell the client to not re-download the file. This mostly saves on TCP overhead however a connection must still be made to the server. I’m sure that somewhere out there is a header to make it so the client won’t even send the request in the first place see edit.

$info = $result->fetch_assoc();

// They have the current version
if (strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == strtotime($info['updated'])) {
    header('Last-Modified: '.gmdate("D, d M Y H:i:s", strtotime($info['updated'])) . " GMT", true, 304);

// Sent them the file
} else {

    // Headers
    header("Content-type: image/jpeg");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s", strtotime($info['updated'])) . " GMT");
    header("Expires: " . gmdate("D, d M Y H:i:s", strtotime(time() + 3600) . " GMT"); # 1h
    header("Cache-Control: public, maxage=3600"); # 1h
    header("Content-Length: ".strlen($info['image'])); 

    echo $info['image'];

The only issue with this code is 99% of the server side work is alredy done. If it isn’t a mission critical image you can do this at the top of the file instead to save a lot of back end time.

    header('Last-Modified: '.gmdate("D, d M Y H:i:s", strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) . " GMT", true, 304);

Edit: Changing Cache-Control to public will make the browser just send a hello packet and not wait for a reply before showing the photo.