in reply to Help please...Downloading problem

I've already checked my server - Apache 2.2, running on Windows (Vista Business) - and it IS configured correctly for running Perl scripts as CGI scripts.
The most likely explanation of your problem is that you've NOT configured apache correctly. For one thing, the tree that the script is in should have the ExecCGI enabled, and have cgi-script handler enabled for whatever extension you're using for perl cgi scripts.

In other words, you're not executing the script at all, just downloading it like a normal file.

Replies are listed 'Best First'.
Re^2: Help please...Downloading problem
by arbruce (Initiate) on Aug 20, 2007 at 18:00 UTC
    Not to rain on your parade, but...
    Here's the section from my httpd.conf file dealing with the CGI tree:
    ScriptAlias /cgi "/dropbox/cgi" <Directory "/dropbox/cgi"> Options +ExecCGI AllowOverride None Order allow,deny Allow from all AddHandler cgi-script .pl .php </Directory>

    And the bizarre thing is that I use other Perl scripts to update data files during the website use, and they all do exactly what I want them to do.
    Anton...
      Well, then I'll assume apache/perl/cgi works. Are you sure the file paths are correct? The code to make them looks slightly convoluted to me. Are you also sure you want to lowercase the whole file path? Make sure you check the result of open(), like open my $fh,"<",$whatever or die $!

      Also, you're missing a blank line at the end of the headers.

      Also also, this code will allow anyone to download any file off the server that the webserver has access to.

      update: and please use strict, it can catch typos that will take you (or us!) quite some time to find.

      update 2: its "content-disposition: attachment; filename=whatever" note the semi-colon and the lack of quotes.

        Well, I've corrected the script per your very kind suggestions (and I thank you for it), and it now is as follows:
        #!/www/perl/bin/perl.exe # # filednload.pl # # File Download Utility # use CGI; use strict "vars"; my $cgiobject = new CGI; my $filename = $cgiobject->param('filename'); my $dnloaddir = $cgiobject->param('filedir'); my $movecode = $cgiobject->param('movecode'); my $usrcod = $cgiobject->param('usrcod'); my $passwd = $cgiobject->param('passwd'); my $userselect = $cgiobject->param('userselect'); my $filekey = $cgiobject->param('filekey'); my $server=$ENV{'SERVER_NAME'}; my $browser=$ENV{'HTTP_USER_AGENT'}; my $fileroot=$ENV{'DOCUMENT_ROOT'}; my $program = "DBXDND"; my $origpath = $fileroot . "/" . $movecode . "/" . $filename; my $flsiz = -s $origpath; print "Content-Type: application/octet-stream\n"; print "Content-Disposition: attachment; filename=$origpath\n"; print "Content-Length: $flsiz\n"; open (DLFILE,"<$origpath") or die("cannot open file "); binmode DLFILE; binmode STDOUT; my $buffer = ''; while(read(DLFILE,$buffer,1024)) { print $buffer; } close DLFILE; my $fileout=$fileroot . "/Temp/" . $usrcod . ".txt"; open (USER,">$fileout"); print USER "USRCOD=" . $usrcod . "\n"; print USER "PASSWD=" . $passwd . "\n"; print USER "BROWSER=" . $browser . "\n"; print USER "PROGRAM=" . $program . "\n"; print USER "FILENAME=" . $filename . "\n"; print USER "SERVER=" . $server . "\n"; print USER "DNLDDIR=" . $dnloaddir . "\n"; print USER "DNLDFILE=" . $filename . "\n"; print USER "DNLDPATH=" . $origpath . "\n"; print USER "MOVECODE=" . $movecode . "\n"; print USER "USERSELECT=". $userselect . "\n"; print USER "FILEKEY=". $filekey . "\n"; close USER; print $cgiobject->redirect("http://" . $server . "/cgi/cgi.exe?usrcod= +" . $usrcod);
        I've also noted the following in the Apache error log:
        malformed header from script. Bad header=PK\x03\x04: filednload.pl, referer: http://dropbox.fotokem.com/test.html

        Now the REALLY weird thing is that "PK\x03\x04" are the first characters (the header) of a .zip file.

        Am I beginning to lose my marbles, or should I just go home and have a quiet night with a bottle of J.D.????

        Anton...