尝试创建将启动Perl脚本的网页链接

时间:2018-04-06 18:40:54

标签: php ubuntu-16.04 zoneminder

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

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

我发现当你到达相机的PTZ的zoneminder中的适当区域并按“1”按钮时,网站会发送命令

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

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

更新编辑3:(这就是我现在要使用的内容,因此我删除了其他尝试清除此帖子的所有数据)

尝试完全不同的东西,我几乎让它以我想要的方式工作。我创建了两个名为security.plopen.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()>行,但这只留下一个空白页面且相机无法移动

对于所有这些疯狂感到抱歉...但我很接近......它现在设置的方式确实有效,如果我添加额外的相机应该很容易扩展,如果我没有这个,它会有所改善带有反向链接的空白页面,它只会自动返回到页面(无需对地址进行硬编码,因为它将链接到不同的页面,有时可以从本地地址访问,有时可以从Internet地址访问)。

我还注意到这种方法的一个'安全'问题..如果你知道脚本的名称和位置..它绕过了zoneminder登录,所以任何人都可以更改摄像头位置(大声笑我猜我不会使用我用过的名字在这篇文章中以防万一)

对于我的情况......风险很低,我很难想出这么多......我确定要弄清楚如何检查用户点击该链接是否被授权在Zoneminder中这样做..所以任何人在没有登录zoneminder的情况下在浏览器中输入链接都将无法正常工作......将会更加困难。

我想我将不得不深入研究PHP并找出什么“控件”php在它允许之前检查它然后找出正确添加到perl脚本以使其加载页面的方法如果通过则执行正确的检查运行命令。但那是另一次。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:-1)

好的..我终于能够得到我想要的东西,所以我花了很多时间来传递信息

我使用以下security.plopen.pl的{​​{1}} perl脚本来完成工作。我的帖子中我只会将security.pl放在这里因为打开.pl与预设更改相同。

security.pl:

/usr/lib/zoneminder/cgi-bin

以及我添加到montage.php和console.php的链接:

 #!/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>!;

这将启动弹出窗口并运行所需的命令,然后关闭窗口,使蒙太奇/控制台屏幕保持不变,因此不需要&#34;返回&#34;

这是一条漫长的道路..未来仍有我必须面对的安全问题,但截至目前,这是我想要的功能......最终我将能够找到其余的:D谢谢@Ricardo为您的尝试