2009-05-13 4 views
3

Das Problem ist, dass .PL-Skript als leere Datei heruntergeladen wird, anstatt ausgeführt werden.Versuchen, Perl-Skripten mit Fast-CGI und LightTPD ausführen, aber Datei nur Downloads

Ich las: http://redmine.lighttpd.net/wiki/lighttpd/ApplicationsUsingLighttpd

Mein dispatch.fcgi ist folgende: (es ist in usr/bin befindet/

#!perl 
#!/usr/bin/perl 
use strict; 
use CGI::Fast; 
use Embed::Persistent; { 
my $p = Embed::Persistent->new(); 
while (new CGI::Fast) { 
my $filename = $ENV{SCRIPT_FILENAME}; 
my $package = $p->valid_package_name($filename); 
my $mtime; 
if ($p->cached($filename, $package, \$mtime)) { 
eval {$package->handler;}; 
} 
else { 
$p->eval_file($ENV{SCRIPT_FILENAME}); 
} 
} 
} 

Dies ist mein Code in meinem lighttpd-Konfigurationsdatei:

".pl" => 
((
"fastcgi.debug" => 1, 
"bin-path" => "/usr/bin/dispatch.fcgi", 
"socket" => "/tmp/fcgi.socket", 
"check-local" => "disable", 
"min-procs" => 1, 
"max-procs" => 5, 
"idle-timeout" => 20 
)) 

Ich musste CGI.pm installieren und das cpan Modul einbetten Jetzt bekomme ich keine Fehler in meinem Serverprotokoll, aber wie gesagt, das Skript wird nur heruntergeladen .

Danke für jede Hilfe!

+0

'Das' Skript, welches, das Skript 'dispatch.pl' oder das Skript, das Sie ausführen möchten? – ijw

Antwort

1

Es scheint, dass Sie nicht die richtigen Header senden. Verwenden Sie die Funktion "Header" im CGI-Modul, um die Header zu senden.

Dann sollten Sie gut gehen.

Für weitere Informationen besuchen Sie die Header-Dokumentation:

http://cpansearch.perl.org/src/LDS/CGI.pm-3.43/cgi_docs.html#header

+0

print $ cgi-> Kopfzeile; - Es wird nicht von selbst ausgegeben. – ijw

0

Thank you!

#!/usr/bin/perl -w 
use strict; 
my $cgi = new CGI; 
print $cgi->header(); 
print 'Hello world.'; 

funktioniert! Aber ich frage mich, warum ich die Header drucken muss, damit es mit fastcgi und lighttpd funktioniert. Ich habe ein großes Skript, das jemand anderes geschrieben hat, der auf meinem Apache und regulären CGI-Server funktioniert. Ich denke, ich muss es ändern, um auf meinem neuen Server zu arbeiten.

Das Problem ist, ich denke, Drucken der Header könnte das Skript durcheinander bringen, weil es so etwas wie Drucken von HTML tut, die ausgeführt wird.

Thanks again

+0

Die CGI-Spezifikation erfordert, dass eine Kopfzeile dem tatsächlichen Inhalt vorangestellt wird, der vom Client interpretiert wird. – hillu

1

Haben Karpfen Schreiben in eine Datei und suchen Sie dort für Probleme.

BEGIN { 
use CGI::Carp qw/carpout/; 
open LOG, ">>", "carp.log" or die("Cannot open file: $!\n"); 
carpout(LOG); 
} 
1

Stellen Sie sicher, dass für die Erweiterungen statisch ausgeschlossen ist. So etwas wie ...

statisch-file.exclude-extensions = (".php", ".pl")

Oder es wird einfach die Datei wie jedes andere herunterladen.