Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Perl в CGI выполнения команд linux, выполнения команд linux 
:(
    Опции темы
axeopa
Дата 14.9.2013, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.9.2013

Репутация: нет
Всего: нет



Всем привет! начал учить perl. Есть задача сразу по делу. Надо сделать CGI страницу, на которой будет 2 формы, в одной вписывается номер, в другой текст сообщения, и кнопка "отправить". Когда жмешь ту кнопку, на той машине должна исполниться такая системная команда:

sendsms "+380636548100" "dsadasda"

конечно что номер и сообщение должно быть с той формы. У кого какие идеи? буду благодарен за любые советы.
PM MAIL   Вверх
Jimy
Дата 14.9.2013, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 4.7.2010

Репутация: нет
Всего: 3



С чем конкретно затруднение?
PM   Вверх
axeopa
Дата 14.9.2013, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.9.2013

Репутация: нет
Всего: нет



было бы хорошо, если бы Вы рассказали как бы Вы это делали, я незнаю с какой стороны приступить, пока набросал такое

#!/usr/bin/perl
use Time::Local;

use CGI qw (:standard);
print "Content-type: text/html\n\n";

print <<EOM;

<html>
<head>
<title>Відправка повідомлення</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<body background="3.jpg">
<style type="text/css">
.style2 {color:#DD00FB}
.style3 {color:#00CCFB}
<!--
body {
    background-color: #9B06F9;
}
-->


</style></head>


<body>

EOM

if(param("No") || !param){
mainform();
}
elsif(!param("Yes")){

$mesg = param("fielmesg");
$phone = param("fieldphone");

$err_input=0;
#check entered data
if($mesg !~ /\D/){$err_input=1; $err="Некоректно введено повідомлення";}
if($phone =~ /['"~!^&}+|<>%{}|?;:#=\$'a-zA-Z0]/){$err_input=1; $err="Некоректно введений номер телефону";}


if($err_input==0){adduser();}
else{errdata();}
}


sub errdata{
print <<EOM;
<div align="center">
<h3 class="style2">Помилка при введенні даних! $err</h3>
</div>
EOM

}

sub mainform{
print <<EOM;
<form name="form1" method="post" action="">
  <table width="600" height="250" border="10" align="center" cellpadding="10" cellspacing="20" bgcolor="#CECEBE">
    <tr>
      <td width="200"><div align="center">
        Номер телефону:<br>
        У форматі +3(8-XXX)XXX-XX-XX:<br>
      <input type="text" MAXLENGTH="10" name="fielphone">

        </div></td>
    <tr>
      <td width="200"><div align="center">
        Повідомлення ( латиницею ):<br>
        
        
        <textarea type="text" cols="40" rows="4" wrap="virtual" MAXLENGTH="160"  name="fieldmesq"s  ></textarea><br>
        
        

        </div></td>
     
    </tr>
  
  <td colspan="1"><div align="center">
        
        <input type="reset" name="reset" value="       Очистити       ">
        <input type="submit" name="Submit" value="       Надіслати       ">    
        
        <button type="button" onclick="service httpd stop">вирубати апач</button>
        <button type="button" onclick="./home/tst1.sh">вирубати апач</button>
  
  </table>
</form>
EOM
}

PM MAIL   Вверх
Jimy
Дата 15.9.2013, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 4.7.2010

Репутация: нет
Всего: 3



В целом ход мыслей правильный. Но код написан небрежно.
Имена полей в форме не совпадают с именами ожидаемыми в скрипте.
Регулярные выражения для проверки значений - нелепые.
Например, условие $mesg !~ /\D/ выполнится только в двух случаях: если сообщение будет пустое или будет содержать только цифры.
Корректные регулярки для проверки телефонов точно есть в гугле.
Нет кода функции adduser.

Это сообщение отредактировал(а) Jimy - 15.9.2013, 13:00
PM   Вверх
axeopa
Дата 16.9.2013, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.9.2013

Репутация: нет
Всего: нет



почитав пирса, кльовий чувак, написав такий код, результат на картинці, тепер треба ту команду перенаправити на консоль щоб вона виконалась, поможіть, останній крок лишився

http://s57.radikal.ru/i156/1309/e3/56fcb064b816.png

#!/usr/bin/perl -w
use CGI qw/:standard/;
print
    header,
    start_html('sms gateway'),
    h1('sms gateway'),
    start_form,
    "enter number : ",textfield('num'),p,
    "enter sms    : ",textfield('sms'),p,
    submit,
    end_form,
    hr,"\n";
 if (param) {
    print "sendsms ", "\"" , param('num'), "\"", " \""  , param('sms'), "\"" ;
    }
    
    print end_html;
PM MAIL   Вверх
infarch
Дата 17.9.2013, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 13.3.2009

Репутация: нет
Всего: 1



my $result = `sendsms "+38xxxx" "pret"`;
PM MAIL   Вверх
axeopa
Дата 18.9.2013, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.9.2013

Репутация: нет
Всего: нет



Це ту команду потрібно вставити тупо в текст програми немає різниці в яке місце ? я пробую неполучається, вона невиконується, може якісь права треба дати чи щось таке ?
PM MAIL   Вверх
infarch
Дата 18.9.2013, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 13.3.2009

Репутация: нет
Всего: 1



Начните с малого: напишите перл скрипт (pl файл) для записи в лог файл той строки что пришла в него как аргумент. Выполните из консоли и убедитесь что работает. Потом напишите второй скрипт, опять таки для консоли, а не для CGI. Одним из этих способов:
http://perldoc.perl.org/functions/system.html
http://perldoc.perl.org/functions/exec.html
выполните первый скрипт и посмотрите или срабатывает. Если да то пробуйте отправить смс. Если нет то изучайте код ошибки используя первый метод (system). И только когда вы сможете отправлять смс из консоли, переносите это в веб и CGI. Вот тут, если не сработает, уже можно будет говорить о правах и прочих сложных материях.

PM MAIL   Вверх
axeopa
Дата 18.9.2013, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.9.2013

Репутация: нет
Всего: нет



я в етот cgi файл добавляю строки


Выделить всёкод Perl
1:
2:
3:
$num1 = +380636999100 ;
$sms1 " asdasdasd ";
system "sendsms \"$num1\" \"$sms1\"  ";


тогда из консоли

Выделить всёкод Perl
1:
[root@www billing]# perl -w go3.cgi


смс приходить. cgi ведь можна запускать как perl
PM MAIL   Вверх
axeopa
Дата 18.9.2013, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.9.2013

Репутация: нет
Всего: нет



сначала думал чо проблема в то, что там команда состоит из 3 слов, сделал так:

Выделить всёкод Perl
1:
2:
$now "int ". `ifconfig`;
print "$now";


вот что :

http://s2.ipicture.ru/uploads/20130918/f7gBQy7N.png

вроде всьо гуд, потом сделал так:

Выделить всёкод Perl
1:
2:
$now "int ". `ifconfig eth0`;
print "$now";

http://s2.ipicture.ru/uploads/20130918/0754m9Bw.png

получил вивод только о  eth0, без localhost.
тоесть команди работают, но не все, пробовал писать астановку апача тіпа 
Выделить всёкод Perl
1:
"service httpd stop"
 неработает. может какой то дебаг включить, или логи както посмотреть, есть ли какиєто средства здєсь ?
PM MAIL   Вверх
infarch
Дата 19.9.2013, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 13.3.2009

Репутация: нет
Всего: 1



Вот это я не понял: 
$now = "int ". `ifconfig`;
Нет, я вижу конкатенацию слова int с результатом, а смысл?
print "$now"; - Зачем интерполяция?
$num1 = "+380636999100"; с кавычками стоило бы написать.

И возвращаясь к вопросу о правах: может веб сервер не имеет права на то что вы  хотите сделать? Вообще такие штуки как смс, емейл, стоит делать через отдельный сервис который под нужными правами работает. А задачи передавать через базу данных.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0756 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.