Попытка создать ссылки на веб-страницы, которые будут запускать Perl-скрипт

Я использую сервер Ubuntu с Apache2 и Zoneminder (программа камеры безопасности). У меня есть одна камера (но в конечном итоге будет три), которая имеет наклон и масштабирование (PTZ). В программе Zoneminder (веб-интерфейс PHP) с помощью навигации по страницам вы можете получить окно, в котором есть элемент управления PTZ. Для создания этой страницы он использует несколько звонков на разные страницы PHP, и вы можете нажать кнопку предустановки и заставить камеру перейти в положение, заданное для предустановки.

У камер, которые я настрою, будет два местоположения, которые я буду называть «Безопасность» и «Открыть». Я хочу создать ссылки, по которым я могу щелкнуть, и он отправит команду без необходимости переходить к окну управления.

Я обнаружил, что когда вы добираетесь до нужной области в zoneminder для PTZ камеры и нажимаете кнопку «1», веб-сайт отправляет команду

/usr/bin/zmcontrol.pl --preset=1 --command=presetGoto --id=3

который может быть запущен из терминала на сервере Ubuntu и действительно устанавливает камеру в нужное место.

ОБНОВЛЕНИЕ РЕДАКТИРОВАТЬ 3: (Это то, что я собираюсь сделать сейчас, поэтому я удалил все данные из других попыток очистить этот пост)

Попытка чего-то совершенно другого, и я почти заставил это работать так, как я хочу. Я создал два новых файла под названием security.pl а также open.pl .. теперь в /usr/lib/zoneminder/cgi-bin.. это то, что я пока имею в отношении security.pl (open.pl идентичен, но с другой предустановкой, конечно):

#!/usr/bin/perl

my @command1 = ("/usr/bin/zmcontrol.pl", "--preset=1", "--command=presetGoto", "--id=3");
print "Content-type: text/html\n\n";
print "<br><br><center><a href=javascript:history.back()>BACK</a></center>";
system(@command1);

и в montage.php and console.php ссылки, которые я добавляю, чтобы сделать эту функцию:

<a href="cgi-bin/security.pl">Security</a>

Этот подход работает и меняет местоположение камеры одним щелчком мыши. Единственная проблема, с которой я столкнулся сейчас, это то, что это оставляет пустую страницу с обратной ссылкой, показывающей прямую ссылку на скрипт perl в адресной строке.

Это будет работать для меня, но в конечном итоге я бы хотел, чтобы скрипт security / open.pl автоматически запускал ссылку «назад», чтобы он выполнял команду и возвращался на страницу, на которую нажали.

я пытался print redirect(-url => 'javascript:history.back()'); вместо <a href=javascript:history.back()> линия, но это просто оставляет меня с пустой страницей, и камера не двигается

Извините за все это безумие … но я близок … Способ его настройки теперь работает и должен быть легко расширен, если я добавлю дополнительные камеры, он был бы просто улучшен, если бы у меня не было пустой страницы с обратная ссылка, и она просто автоматически вернется на страницу (без необходимости жестко задавать адрес, потому что он будет связан на разных страницах и иногда доступен с локального адреса, а иногда и с интернет-адреса).

Я также замечаю одну проблему «безопасности» с этим подходом … если вы знаете имя и местоположение скрипта … он обходит регистрацию в zoneminder, так что любой может изменить местоположение камеры (смеюсь, я не буду использовать имена, которые я использовал в этом посте так, на всякий случай)

Для моей ситуации … риск низок, и мне было достаточно сложно придумать это много … Я уверен, что выясню, как сделать так, чтобы проверить, авторизован ли пользователь, щелкающий по этой ссылке, сделать это в Zoneminder … так что любой, кто вводит ссылку в браузере без входа в Zoneminder, не сможет функционировать … будет еще сложнее.

Я полагаю, мне нужно будет покопаться в PHP и выяснить, что есть у php «controls», который проверяет это, прежде чем это разрешит, а затем выяснить, как правильно добавить его в скрипт perl, чтобы он загружал страницу, которая выполняет Правильная проверка, если она проходит, запускает команду. Но это в другой раз.

1

Решение

Чтобы сделать эту работу, я сделаю что-то вроде этого:

<?php
$command = '--command=presetGoto';
$cam1 = '--id=3';

function setOpen() {
$preset = '--preset=1';
exec("/usr/bin/perl -w /usr/bin/zmcontrol.pl $preset $command $cam1");
}

function setSecurity() {
$preset = '--preset=2';
exec("/usr/bin/perl -w /usr/bin/zmcontrol.pl $preset $command $cam1");
}

if (isset($_GET['setSecurity'])) {
setSecurity();
}
if (isset($_GET['setOpen'])) {
setOpen();
}
?>

и измените эти две строки следующим образом:

<a href="" onclick="custom.php?setOpen=true">Open</a>
<a href="" onclick="custom.php?setSecurity=true">Security</a>
0

Другие решения

ОК … Я наконец смог получить то, что хотел, поэтому я решил потратить столько времени на передачу информации

Я получил его на работу с помощью следующего сценария Perl для security.pl а также open.pl помещен в /usr/lib/zoneminder/cgi-bin ..as, как для моего поста, я помещу здесь только security.pl, потому что open.pl — это то же самое, что и измененный пресет.

security.pl:

 #!/usr/bin/perl
my @command1 = ("/usr/bin/zmcontrol.pl", "--preset=1", "--command=presetGoto", "--id=3");
print "Content-type: text/html\n\n";
system(@command1);
print qq!<script>
window.close()
</script>!;

и ссылки, которые я добавил в montage.php и console.php:

 <a href="cgi-bin/open.pl" target="popup">open</a>
<a href="cgi-bin/security.pl" target="popup">Security</a>

это откроет всплывающее окно и запустит необходимую команду, затем закроет окно, оставляя экран монтажа / консоли нетронутым, поэтому нет необходимости «назад»

Это был долгий путь … есть еще проблема безопасности, с которой мне придется столкнуться в будущем, но на данный момент она работает так, как я хотел … в конце концов я смогу выяснить все остальное: D спасибо @Ricardo за ваша попытка

-1

По вопросам рекламы [email protected]