|
Модераторы: ginnie, korob2001 |
|
axeopa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.9.2013 Репутация: нет Всего: нет |
Всем привет! начал учить perl. Есть задача сразу по делу. Надо сделать CGI страницу, на которой будет 2 формы, в одной вписывается номер, в другой текст сообщения, и кнопка "отправить". Когда жмешь ту кнопку, на той машине должна исполниться такая системная команда:
sendsms "+380636548100" "dsadasda" конечно что номер и сообщение должно быть с той формы. У кого какие идеи? буду благодарен за любые советы. |
|||
|
||||
Jimy |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 177 Регистрация: 4.7.2010 Репутация: нет Всего: 3 |
С чем конкретно затруднение?
|
|||
|
||||
axeopa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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 } |
|||
|
||||
Jimy |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 177 Регистрация: 4.7.2010 Репутация: нет Всего: 3 |
В целом ход мыслей правильный. Но код написан небрежно.
Имена полей в форме не совпадают с именами ожидаемыми в скрипте. Регулярные выражения для проверки значений - нелепые. Например, условие $mesg !~ /\D/ выполнится только в двух случаях: если сообщение будет пустое или будет содержать только цифры. Корректные регулярки для проверки телефонов точно есть в гугле. Нет кода функции adduser. Это сообщение отредактировал(а) Jimy - 15.9.2013, 13:00 |
|||
|
||||
axeopa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.9.2013 Репутация: нет Всего: нет |
почитав пирса, кльовий чувак, написав такий код, результат на картинці, тепер треба ту команду перенаправити на консоль щоб вона виконалась, поможіть, останній крок лишився
http://s57.radikal.ru/i156/1309/e3/56fcb064b816.png #!/usr/bin/perl -w use CGI qw/:standard/; 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; |
|||
|
||||
infarch |
|
|||
Опытный Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
my $result = `sendsms "+38xxxx" "pret"`;
|
|||
|
||||
axeopa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.9.2013 Репутация: нет Всего: нет |
Це ту команду потрібно вставити тупо в текст програми немає різниці в яке місце ? я пробую неполучається, вона невиконується, може якісь права треба дати чи щось таке ?
|
|||
|
||||
infarch |
|
|||
Опытный Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Начните с малого: напишите перл скрипт (pl файл) для записи в лог файл той строки что пришла в него как аргумент. Выполните из консоли и убедитесь что работает. Потом напишите второй скрипт, опять таки для консоли, а не для CGI. Одним из этих способов:
http://perldoc.perl.org/functions/system.html http://perldoc.perl.org/functions/exec.html выполните первый скрипт и посмотрите или срабатывает. Если да то пробуйте отправить смс. Если нет то изучайте код ошибки используя первый метод (system). И только когда вы сможете отправлять смс из консоли, переносите это в веб и CGI. Вот тут, если не сработает, уже можно будет говорить о правах и прочих сложных материях. |
|||
|
||||
axeopa |
|
||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.9.2013 Репутация: нет Всего: нет |
я в етот cgi файл добавляю строки
тогда из консоли
смс приходить. cgi ведь можна запускать как perl |
||||
|
|||||
axeopa |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.9.2013 Репутация: нет Всего: нет |
сначала думал чо проблема в то, что там команда состоит из 3 слов, сделал так:
вот что : http://s2.ipicture.ru/uploads/20130918/f7gBQy7N.png вроде всьо гуд, потом сделал так:
http://s2.ipicture.ru/uploads/20130918/0754m9Bw.png получил вивод только о eth0, без localhost. тоесть команди работают, но не все, пробовал писать астановку апача тіпа
|
||||||
|
|||||||
infarch |
|
|||
Опытный Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Вот это я не понял:
$now = "int ". `ifconfig`; Нет, я вижу конкатенацию слова int с результатом, а смысл? print "$now"; - Зачем интерполяция? $num1 = "+380636999100"; с кавычками стоило бы написать. И возвращаясь к вопросу о правах: может веб сервер не имеет права на то что вы хотите сделать? Вообще такие штуки как смс, емейл, стоит делать через отдельный сервис который под нужными правами работает. А задачи передавать через базу данных. |
|||
|
||||
Правила форума "Perl: Системное программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |