2016-07-02 16 views
-2

Ich habe eine Textdatei text1.txt das enthält:lesen Informationen aus Textdatei in CGI

username 
password 

Wie kann ich diese Parameter von text1.txt in meinen .cgi Skript lesen?

Ich benutze diesen Code:

f = open('text1.txt', "r") 
user = f.readline() 
pass = f.readline() 
$MAIN_AUTH = 'user':'pass' ; 

Dies funktioniert nicht.

Wenn ich einfügen Benutzer direkt und übergeben es funktioniert:

$MAIN_AUTH = 'username:password' ; 

Aber wenn aus dem Text lesen Datei, die es nicht funktioniert.

+1

Was ist von beliebigem Code ist? Hast du überprüft, was 'open' macht? http://perldoc.perl.org/functions/open.html Sie brauchen http://search.cpan.org/~ether/libwww-perl-6.15/lib/LWP/UserAgent.pm –

+1

Es scheint wie Python trotz Siegel zuletzt var. Wenn Sie an der Lösung von Python interessiert sind, sollten Sie wahrscheinlich perl-Tag entfernen oder perl nicht funktionierendes Beispiel bereitstellen. –

+1

Wahrscheinlich funktioniert es nicht, da der angezeigte Code weder gültiges Python noch gültiges Perl ist. Bitte sagen Sie, welche Sprache Sie verwenden möchten. – PerlDuck

Antwort

0

Wenn Sie readline() verwenden, haben Sie am Ende Ihrer beiden Variablen Zeilenumbrüche.

Also, wenn es Python ist, müssen Sie rstrip() aufrufen und wenn Perl, benötigen Sie chomp().

0

Die Gesamtlogik, die Sie verwenden, ist fast in Ordnung, aber die Syntax ist nicht und es gibt einige Details. Da Sie gesagt haben, die Zeile $MAIN_AUTH = 'username:password'; funktioniert, nehme ich an, Sie haben Perl-Code. Startvariablen mit einem $ ist in Python (afaik) nicht erlaubt.

  1. immeruse strict; use warnings 'all'; Skripte an der Spitze Ihrer Perl hinzuzufügen. Es informiert Sie über die häufigsten Fehler in Ihrem Skript.
  2. Geben Sie den vollständigen Pfad zu Ihrer Eingabedatei an, da Sie nicht sicher sein können, ob Ihr CGI-Skript von Apache (oder von wem) ausgeführt wird, und das Skript wird es relativ zu diesem Arbeitsverzeichnis erwarten, wenn Sie nichts angeben ein absoluter Pfad.
  3. Überprüfen Sie den Rückkehrcode von open, um zu sehen, ob es funktioniert hat.
  4. Wenn eine Zeile aus einer Datei gelesen wird, hat die Zeile am Ende immer noch das Newline-Zeichen. Entfernen Sie diese Zeile für die weitere Verarbeitung, indem Sie auf jede Zeile chomp anwenden.

Insgesamt habe ich am Ende mit auf den Punkt:

#!/usr/bin/env perl 

use strict; 
use warnings 'all'; 

open(my $fh, '<', '/path/to/text1.txt') or die "Cannot open file: $!\n"; 
my ($user, $pass) = (<$fh>, <$fh>); # read first two lines 
chomp($user, $pass);     # strip off trailing "\n" from both 
close($fh); 

my $MAIN_AUTH = "$user:$pass"; 

print "'$MAIN_AUTH'\n"; 

Ausgang:

'username:password' 
+0

verwenden Ich kopiere diesen Code in eine neue.cgi und 755 Berechtigung, aber zeigen Fehler 500 – frank

+0

Haben Sie Apache? Dann schaue in sein Logfile ('/ var/log/apache2/error.log' ??) und sieh, was Apache sagt. – PerlDuck

+0

Nichts in Apache-Logs anzeigen – frank