У меня установлена тестовая система xampp , работающая на компьютере с Windows.
У меня есть небольшое приложение командной строки, которое я хочу запустить с помощью сценария Perl CGI.
У меня есть форма, которую я создал с помощью Perl.Есть несколько флажков, а также поле ввода, где пользователь может напечатать сообщение.
Вот код, который у меня есть до сих пор.Я ни в коем случае не являюсь экспертом в Perl, поэтому здесь может быть несколько вещей, которые не имеют смысла или предназначены для тестирования
#!"C:\xampp\perl\bin\perl.exe"
#print a standard 200 -level HTTP header
print "Content-Type:text/html\n\n";
print "<html><head><title>Broadcast Message</title></head>\n";
print "<body>\n";
#display form data
#&displayInfo();
print "</body></html>\n";
if ($ENV{REQUEST_METHOD} eq "GET")
{
&formDisplay();
exit;
}
#Else process and display back to screen
else
{
#&switches();
&parseform();
&displayInfo();
exit;
}
#This subroutine will display information without using the HTML document
sub formDisplay
{
print qq~
<FORM METHOD="POST" ACTION="/cgi-bin/broadcast.cgi">
<h3>Broadcast Message to Domain</h3>
***PLEASE NOTE*** This will broadcast a message to ALL machines in the Domain</br></br>
<TABLE cellpadding=0 cellspacing=1 border=0>
<TR>
<TD>Select your target by switch:             </br></TD>
<TD></TD>
<TD>Select your target by department: </br></TD>
</TR>
<TR>
<TD><input type=CHECKBOX name=517 value="517"> - 517 </br></TD>
<TD></TD>
<TD><input type=CHECKBOX name=ACC value="ACC"> - ACC </br></TD>
</TR>
<TR>
<TD><input type=CHECKBOX name=testfiletxt value="testfiletxt"> - testefiletxt </br></TD>
</TR>
</TABLE>
</br></br>
Please type the message you wish to broadcast to the Domain: </br>
<input name="message"></br>
<input type=SUBMIT name=Send value="Send">
<input type=RESET name=Reset value="Reset">
</form>
~;
}
#This subroutine will display information received from a form
sub displayInfo {
print "<b>Your Message:</b> </br> ", $form{"message"}, "</br>";
$system_message=$form{"message"};
#system "sent.exe /u:testmachine \"$system_message\"" ;
print qq~
<form>
<input type="button" value="Back" onclick="history.go(-1);return true;">
</form>
~;
# Working loop for form hash
delete $form{'Send'};
foreach(keys %form) {
print "$form{$_} </br>";
}
##############################
$textme=$form{"testfiletxt"};
open( FILE, "< $textme" ) or die "Can't open $filename : $!";
while( <FILE> ) {
chomp;
print "sent.exe $_ ", $form{"message"} , "</BR>";
}
close FILE;
}
sub parseform
{
#get data from environment variable
read STDIN,$qstring,$ENV{"CONTENT_LENGTH"};
#$qstring = $ENV{'QUERY_STRING'};
#break data up on ampersands, and store in array
@pairs = split(/&/, $qstring);
#start a loop to process form data
foreach (@pairs) {
#split field name and value on "=", store in two scalar variables
($key, $value) = split(/=/);
#translate '+' signs back to spaces
$value =~ tr/+/ /;
#translate special characters
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
#store data in hash
$form{$key} = $value;
}
}
У меня проблемы с обработкойтекстовые поля, которые были отмечены.
Мне нужно, чтобы скрипт запускал утилиту командной строки с параметрами, указанными пользователем (т. е. флажки и поле ввода).
Я думаю, что это будет работать следующим образом:
У нас есть предварительно созданные текстовые файлы, которые будут содержать имен Netbios компьютеров в нашей сети, одно имя компьютераза строкуЭти файлы будут представлять коммутаторы, каждый файл коммутатора будет содержать имя Netbios подключенных к нему компьютеров.В конечном итоге мы расширим это и на создание групп.
Пользователь перейдет на эту страницу трансляции и выберет переключатели, на которые он хочет транслировать.Таким образом, любая машина, подключенная к определенному коммутатору, получит это широковещательное сообщение.Пользователь также предоставит сообщение для трансляции.
Когда пользователь нажимает кнопку «Отправить», необходимо выполнить несколько действий.
- Необходимо будет открыть файл, представляющий выбранный переключатель, и сообщение, введенное пользователем, должно быть добавлено в конец каждого имени Netbios в списке.Пример:
netbiosName сообщение, предоставленное пользователем
Затем, когда это будет завершено.Утилита командной строки должна запускаться с использованием файлов, которые мы только что отредактировали, в следующем формате:
sent.exe /t:15 /f:$filename
Поэтому, если пользователь выбрал 3 переключателя, команда должна быть запущена 3 раза
sent.exe /t:15 /f:swtich1
sent.exe /t:15 /f:switch2
sent.exe /t:15 /f:switch3
Следует отметить, что опция /f
"указывает команде sent.exe
использовать файл, который требуется отформатировать определенным образом.
У меня был некоторый успех при обработке по одному варианту за раз.
Но я застрял с тем, что произойдет, когда пользователь выберет более одного флажка.
Как я могу обработатьВы можете легко установить флажки с помощью цикла?
Можно ли извлечь это из подпрограммы &parseform
? Или есть более простой способ сделать это?