1

我正在使用带有 Apache2 和 Zoneminder(一个安全摄像头程序)的 Ubuntu 服务器。我有一台具有云台和变焦 (PTZ) 的摄像机(但最终将是三台)。在 Zoneminder 程序(基于 PHP Web 的界面)中,通过页面导航,您可以获得一个包含 PTZ 控件的窗口。它使用一系列对不同 PHP 页面的调用来创建此页面,您可以单击预设按钮并让相机转到设置为预设的位置。

我将设置的摄像头将有两个使用位置,我将它们称为安全和开放。我想创建可以单击的链接,它将发送命令而无需导航到控制窗口。

我发现当您到达 zoneminder 中摄像机 PTZ 的正确区域并按下“1”按钮时,网站会发送命令

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

它可以从 Ubuntu 服务器上的终端运行,并将相机设置到正确的位置。

更新编辑3:(这就是我现在要做的,所以我从其他尝试清理这篇文章中删除了所有数据)

尝试完全不同的东西,我几乎让它按照我想要的方式工作。我在 .. 中创建了两个名为security.pland 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 在允许之前检查它的内容,然后找出将其正确添加到 perl 脚本以使其加载执行的页面的方法正确检查然后如果它通过运行命令。但那是另一次了。

4

2 回答 2

0

为了完成这项工作,我会做这样的事情:

<?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>
于 2018-04-07T01:11:42.267 回答
-1

好的..我终于能够得到我想要的,所以我想用尽可能多的时间来传递信息

我通过使用以下 perl 脚本使其工作security.plopen.pl放在 .. 中。/usr/lib/zoneminder/cgi-bin至于我的帖子,我只会将 security.pl 放在这里,因为 open.pl 与预设更改后的内容相同。

安全.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你的尝试

于 2018-04-09T21:54:39.563 回答