http://qs321.pair.com?node_id=546414
Category: CGI Programming
Author/Contact Info
Description: Here's snip of script I use to dump images from private (non-document path) file folders.

The source of the file path varies from application to application. Sometimes it comes from the cgi parms, othertimes it comes from a database, so I've simply included a path variable for reference.

Is there a leaner (performance wise, not elegant code wise) way to do this?
# serve an image file
# 
# The file is read as chunks to avoid consuming memory

use strict;
use warnings;

foreach (qw(PATH ENV BASH_ENV CDPATH IFS TERM)) { $ENV{$_}='' }    # s
+ecure ENV

use CGI qw(:standard);
use Fcntl;

# this is specific, provide your own code to set the path
# Oh, and make sure your path is clean!!
my $path = 'path_to_some_image_file.gif';

# read the file as 2048 byte chunks to avoid
# sucking all into memory at once

my $buffer;
my $buffer_size = 2048;

die unless -e $path;
$path =~ m/\.(gif|jpg|png)$/ or die;

# here's the code in question
print header(-type => "image/$1", -expires => "now");

binmode STDOUT;
sysopen(my $fh, $path, O_RDONLY) or die "Failed to open $path: $!";

while (sysread($fh, $buffer, $buffer_size)) {
  print $buffer;
}

exit;