Модераторы: 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 файл добавляю строки


Код

$num1 = +380636999100 ;
$sms1 = " asdasdasd ";
system "sendsms \"$num1\" \"$sms1\"  ";



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

Код

[root@www billing]# perl -w go3.cgi


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


Новичок



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

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



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

Код

$now = "int ". `ifconfig`;
print "$now";



вот что :

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

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

Код

$now = "int ". `ifconfig eth0`;
print "$now";


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

получил вивод только о  eth0, без localhost.
тоесть команди работают, но не все, пробовал писать астановку апача тіпа 
Код

"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.1343 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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