2010-11-28 4 views
0

Ich habe eine Datei "a.cpm" auf meinem Webserver. Ich habe einen Handler, der, wenn du zu asdasd.com/a.cpm gehst, das CGI-Perl-Skript startet. Ich habe versucht, die Datei zu lesen und dann die Daten zu drucken, aber es tut nichts.Wie lese ich eine Datei auf meinem Webserver von meinem Perl-CGI-Skript und drucke dann die Daten?

#!/usr/bin/perl 
print "Content-type:text/html\r\n\r\n"; 
print "test string"; 
print "<br>"; 
$filepath = $ENV{'PATH_TRANSLATED'}; 
open FILE, $filepath or die $!; 
my @lines = <FILE>; 
while (my $line = <FILE>) 
{ 
print $_; 
} 
+2

Haben Sie Ihr Webserver Fehlerprotokoll überprüft? Haben Sie ein Hello World CGI-Skript (ohne den Dateizugriff) ausprobiert? – cjm

+0

Liam, hast du das testen können? – Philar

Antwort

0

Wenn Ihr Handler einwandfrei funktioniert und Sie die Dateiberechtigungen chmod a+x Ihres CGI-Skripts geändert haben, schlage ich vor, das CGI-Modul wie im folgenden Code gezeigt zu verwenden.

#!/usr/bin/perl 
use CGI qw(:standard); 
print <<HTML; 
Content-type: text/html 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head><title>Path Translated</title></head> 
<body> 
HTML 

$filepath = $ENV{'PATH_TRANSLATED'}; 
open FILE, $filepath or die $!; 
my @lines = <FILE>; 
while (my $line = <FILE>) 
{ 
    print $_; 
} 

print <<HTML; 
</body> 
</html> 
HTML 

EDIT: Taint Überprüfung, auf die Warnungen drehen und strenge verwenden, sind gute Praxis, um so mehr für Web-Anwendungen.

#!/usr/bin/perl -wT 
use strict; 
+0

Wenn Sie die Taint-Prüfung aktivieren, müssen Sie '$ ENV {'PATH_TRANSLATED'}' entstellen, bevor Sie damit eine Datei öffnen können. – cjm

2

Haben Sie auch brian d foy ‚s How can I troubleshoot my Perl CGI script? und mit seinen Vorschlägen gefolgt durch?

+0

Für die nächste Zeit: http://stackoverflow.com/questions/2165022/how-can-i-troubleshoot-my-perl-cgi-script – daxim

+0

@daxim, danke. Ich dachte, er hätte das nach SO geschafft, aber ich konnte es nicht finden. – cjm

0

Die akzeptierte Antwort funktioniert nicht aus der Box - hier ist eine leichte Variation, das tut - nur den Pfad zu file.txt einstellen:

#!/usr/bin/perl 
use CGI qw(:standard); 
print <<HTML; 
Content-type: text/html 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head><title>Path Translated</title></head> 
<body> 
HTML 

open FILE, "file.txt" or die "could not open filename"; 
while(<FILE>) { 
    print $_; 
} 
close FILE; 

print <<HTML; 
</body> 
</html> 
HTML