Попытка создать ссылки на веб-страницы, которые будут запускать 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, чтобы он загружал страницу, которая выполняет Правильная проверка, если она проходит, запускает команду. Но это в другой раз.
2 ответа
ОК... Я наконец смог получить то, что хотел, поэтому я решил потратить столько времени на передачу информации
Я получил его на работу с помощью следующего сценария 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 за ваша попытка
Чтобы сделать эту работу, я сделаю что-то вроде этого:
<?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>