DelphiFAQ Home Search:
General :: Web publishing :: perl CGI
CGI = Common Gateway Interface, a specification for transferring information between a web server and a CGI program. Here you find code snippets for CGIs written in perl.

Articles:

This list is sorted by recent document popularity (not total page views).
New documents will first appear at the bottom.

Featured Article

Perl script on web server sends Excel file to browser

Question:

I need to have my web site generate an Excel worksheet on the fly (a database export) and send it to the user's webbrowser. How can I do that?

Answer:

The following assumes that you export a simple sheet containing strings and numbers, no formulas.

In this case, you can generate a CSV file (comma separated values) and set the mime type to applicatioon/octet-stream.

If you perl script is called as /cgi-bin/exportcsv.pl then the downloaded file will by default be named

exportcsv.pl.xls (using alternative mime type application/vnd.ms-excel)

To suggest a specific file name (other than the script name, use the Content-Disposition header field. This field allows you to provide other information as well, e.g.

- creation-date
- modification-date
- read-date
- size

Note:
The size parameter indicates just an approximate size of the file in octets. It does not have to be the exact size. This information can be used by the client software (web browser) to pre-allocate space before attempting to store the file, or to determine whether enough space exists.

For the full syntax, see RFC 2183

# alternative 1:
 # sending a file simply as an Excel
 print "Content-type: application/vnd.ms-excel\n";
 print "Content-Disposition: attachment;filename=users.csv\n\n";
 
 # alternative 2:
 # sending a CSV file and suggesting 'users.csv' as the file name
 print "Content-type: application/octet-stream\n";
 print "Content-Disposition: attachment;filename=users.csv\n\n";
 
 # now dump the data
 # all values are enclosed by " in case the 
 # strings contain a comma
 # this dumps 2 rows with 2 columns each
 print '"1","Test, first one"' . "\n";
 print '"2","Test, last one"' . "\n";
 
 

Generated 12:02:05 on Dec 11, 2017