Forward Design wrote:
> I have Windows 2000, latest Apache installed for Windows, and latest
> Active Perl installed.
>
Please read my Apache mini-FAQ on my Tripod site (address in .sig).
>
> I am very new to this, but this is what I can already do and have working:
>
>
>
> I can access a webpage that I placed in the htdocs folder from my IP
> address.
>
>
>
> I can run a simple perl script.
>
>
>
> Here is what I want to do:
>
>
>
> I want to have a webpage, when a user clicks on a button, it runs a perl
> script
>
>
>
> on my server (my machine), that then runs a Windows program on the
> server, which
>
>
>
> spits out a file, that the user can then download.
>
>
>
> No, I am not trying for the user to see the GUI of the windows program.
>
>
>
> The windows program, will eventually have no interface, just run, do its
> work, and exit.
>
>
>
> My problem is this, I have an HTML page with a button, that calls my
> perl script.
>
>
>
> The perl script is using the command:
>
>
>
> system('d:\myprog.exe');
Try using the built-in 'unlink' function instead.
> When that command is executed, my machine just sits there.
>
>
>
> I see that 'myprog.exe' is listed in the Task Manager, but I cannot end
> that process, permission denied.
>
>
>
> I can type into a dos window 'perl myperlscript.pl', which contains the
> system
>
>
>
> command above, and sure enough, my program pops up (right now, the windows
>
>
>
> program does have a GUI).
>
>
>
> The GUI is not a problem, I have tried this, and others, something
> simple, and it still hangs:
>
>
>
> system('delete d:\crap.txt');
>
>
>
> The Apache error logs never gets filled in, because the script never
> stops, it hangs.
>
>
>
> What am I doing wrong?
>
>
>
> I know this must be a stupid problem/answer, but I need help.
>
>
>
> How does one have a perl script, called from an HTML page, run a windows
> exe?
One normally avoids this sort of thing. If you really must, try more
like this (untested in this form):
my $shell = 'C:\\windows\\command.com /C';
my @systemargs = ($shell, 'delete', 'd:\crap.txt');
my $ret = system (@systemargs);
delete is part of your shell functionality (use cmd.exe vs command.com if
not on 9x).
Sample download script:
use strict;
my $path = 'c:/rootdir'; # example path to download files
my $file = 'image.gif'; # example (or get from args)
my $mimetype = 'image/gif'; # example (or create hash for .ext)
my $size = -s "$path/$file"; # get file size
$size or die "$path/$file: empty file";
open IN, "$path/$file" or die "$path/$file download: $!";
binmode IN; # needed on Win32 for binary files
# these headers in one combination or another should handle the popup getting
# the right filename on the download (instead of script name)
print <<EOD;
Content-type: $mimetype; name="$file"
Content-disposition: attachment; filename=$file
Content-length: $size
EOD
# I'm told no quotes around $file on Content-Disposition header for MSIE ??
binmode STDOUT; # needed on Win32 for binary files
#print <IN>; # this would be fine for text vs sysread/write
# using block read/write instead of above print (better for binary data)
while (sysread (IN, my $buf, 4096)) { # 4096 is arbitrary choice for blksize
syswrite STDOUT, $buf, length $buf;
}
close IN;
__END__
--
,-/- __ _ _ $Bill Luebkert ICQ=14439852
(_/ / ) // // DBE Collectibles Mailto:[EMAIL PROTECTED]
/ ) /--< o // // http://dbecoll.tripod.com/ (Free site for Perl)
-/-' /___/_<_</_</_ Castle of Medieval Myth & Magic http://www.todbe.com/
_______________________________________________
Perl-Win32-Web mailing list
[EMAIL PROTECTED]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs