2016-07-02 4 views
-2

У меня есть текстовый файл, который содержит text1.txt:Считывание информации из текстового файла в CGI

username 
password 

Как я могу читать эти параметры из text1.txt в мой .cgi сценарий?

Я использую этот код:

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

Это не работает.

Если я непосредственно вставить пользователя и передать его работы:

$MAIN_AUTH = 'username:password' ; 

Но при чтении из текстового файла он не работает.

+1

Что такое произвольный код? Вы проверили, что делает 'open'? http://perldoc.perl.org/functions/open.html Вам нужен http://search.cpan.org/~ether/libwww-perl-6.15/lib/LWP/UserAgent.pm –

+1

Похоже, что python вдохновляет sigil наконец var. Если вы заинтересованы в решении python, вам, вероятно, следует удалить perl-тег или предоставить perl не рабочий пример. –

+1

Возможно, это не сработает, потому что код, который вы показываете, не является ни действительным Python, ни действительным Perl. Укажите, на каком языке вы хотите использовать. – PerlDuck

ответ

0

У вас будут линии в конце двух переменных, если вы используете readline().

Итак, если это Python, вам нужно будет позвонить rstrip(), и если Perl вам понадобится chomp().

0

Общая логика, которую вы используете, почти нормально, но синтаксиса нет и есть некоторые детали. Поскольку вы сказали, что работает линия $MAIN_AUTH = 'username:password';, я предполагаю, что у вас есть код Perl. Исходные переменные с $ не разрешены в Python (afaik).

  1. Всегда добавить use strict; use warnings 'all'; в верхней части ваших скриптов на Perl. Он расскажет вам о наиболее распространенных ошибках в вашем скрипте.
  2. Дайте полный путь к вашему входному файлу, потому что вы не можете быть уверены в текущем каталоге, когда ваш скрипт cgi запускается Apache (или кем бы то ни было), и сценарий будет ожидать его относительно этого рабочего каталога, если вы не укажете абсолютный путь.
  3. Проверьте код возврата open, чтобы узнать, сработало ли оно.
  4. При чтении строки из файла линия по-прежнему имеет символ новой строки в конце, поэтому удалите ее для дальнейшей обработки, применив chomp к каждой строке.

В целом я в конечном итоге с этим:

#!/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"; 

Выход:

'username:password' 
+0

Я копирую этот код в new.cgi и устанавливаю для него 755, но показываю ошибку 500 – frank

+0

У вас есть apache? Затем загляните в его файл журнала ('/ var/log/apache2/error.log' ??) и посмотрите, что говорит apache. – PerlDuck

+0

Ничего не отображается в журналах apache – frank