sub outputfile( $ $ ) { my $r = $_[0]; # Apache mod_perl request object my $view = $_[1]; # name of file to upload my $error = undef; # error message to return if ( ! -f ( "$view" ) ) { $error = "

Error, file \"$view\" could not be found

"; return( $error ); } my $fsize = ( stat( _ ) )[7]; if ( ! open( INFILE, "<$view" ) ) { $error = "

Error opening file \"$view\":
$!

"; return( $error ); } # biff to output my %export_headers = ( "Content-Disposition" => "attachment; filename=\"$view\"", "Content-Length" => $fsize, ); $r->content_type("application/octet-stream"); $r->no_cache(0); # req for winXP that refuses to open cached pages eval { # mod_perl 1 $r->header_out($_ => $export_headers{$_}) for keys %export_headers; }; if ( $@ ) { # mod_perl 2 $r->headers_out->{$_} = $export_headers{$_} for keys %export_headers; } my $data; my $result; while ( $result = read( INFILE, $data, 8192 ) ) { print( $data ); } close( INFILE ); return( undef ); }