尝试创建将启动 Perl 脚本的网页链接
Trying to create web page links that will launch a Perl script
我正在使用带有 Apache2 和 Zoneminder(安全摄像头程序)的 Ubuntu 服务器。我有一台摄像机(但最终会是三台),它具有摇摄和变焦 (PTZ) 功能。在 Zoneminder 程序(PHP 基于 Web 的界面)中,通过浏览页面,您可以获得具有 PTZ 控件的 window。它使用对不同 PHP 页面的一系列调用来创建此页面,您可以单击预设按钮并让相机转到设置为预设的位置。
我要设置的摄像头有两个位置,我将它们称为安全和开放。我想创建我可以单击的 links,它将发送命令而无需导航到控件 window。
我发现当您在 zoneminder 中到达摄像机 PTZ 的正确区域并按下“1”按钮时,网站会发送命令
/usr/bin/zmcontrol.pl --preset=1 --command=presetGoto --id=3
可以从 Ubuntu 服务器上的终端 运行 获取,并将相机设置到正确的位置。
更新编辑 3:(这就是我现在要做的,所以我删除了其他尝试清理此 post 的所有数据)
尝试完全不同的东西,我几乎让它按照我想要的方式工作。我创建了两个名为 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
中我添加的 links 是:
<a href="cgi-bin/security.pl">Security</a>
这种方法有效并且确实可以通过单击更改相机位置我现在遇到的唯一问题是这将留下一个空白页面,背面 link 显示直接 link 到 perl地址栏中的脚本。
这对我有用,但最终我希望 security/open.pl 脚本自动 运行 "back" link 所以它会 运行命令和 return 到被单击的页面。
我已经尝试用 print redirect(-url => 'javascript:history.back()');
代替 <a href=javascript:history.back()>
行,但这只会给我留下空白页并且相机不会移动
对于所有这些疯狂的事情感到抱歉......但我很接近......它的设置方式现在确实有效并且如果我添加额外的相机应该很容易扩展,如果我不添加它只会得到改进将空白页后退 link,它会自动 return 到页面(无需硬编码地址,因为它将 linked 在不同的页面中,有时可以从本地地址,有时来自互联网地址)。
我还注意到这种方法的一个 'security' 问题。如果您知道脚本的名称和位置。它会绕过 zoneminder 登录,因此任何人都可以更改相机位置(哈哈,我猜我不会使用我在此 post 中使用的名称以防万一)
对于我的情况......风险很低,我很难想出这么多......我确定要弄清楚如何让它检查用户是否点击那个link 被授权在 Zoneminder 中这样做.. 这样任何在浏览器中输入 link 还没有登录到 zoneminder 的人将无法运行.. 会更加困难。
我想我将不得不深入研究 PHP 并找出 "controls" php 在它允许之前检查它的内容,然后找出正确的方法将它添加到 perl 脚本中,使其加载一个页面,该页面执行正确的检查,然后它是否通过了 运行s 命令。但那是另一次了。
为了完成这项工作,我会做这样的事情:
<?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>
好的..我终于得到了我想要的,所以我想我应该花那么多时间传递信息
我通过将以下 perl 脚本用于 security.pl
和 open.pl
放置在 /usr/lib/zoneminder/cgi-bin
中来使其工作..至于我的 post 我只会将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>
这将启动弹出窗口 window 和 运行 所需的命令,然后关闭 window 保持 montage/console 屏幕不变,因此不需要 "back"
这是一条漫长的道路..我仍然需要在未来处理安全问题,但截至目前,它正在按我想要的方式运行......最终我将能够解决其余问题: D 感谢@Ricardo 的尝试
我正在使用带有 Apache2 和 Zoneminder(安全摄像头程序)的 Ubuntu 服务器。我有一台摄像机(但最终会是三台),它具有摇摄和变焦 (PTZ) 功能。在 Zoneminder 程序(PHP 基于 Web 的界面)中,通过浏览页面,您可以获得具有 PTZ 控件的 window。它使用对不同 PHP 页面的一系列调用来创建此页面,您可以单击预设按钮并让相机转到设置为预设的位置。
我要设置的摄像头有两个位置,我将它们称为安全和开放。我想创建我可以单击的 links,它将发送命令而无需导航到控件 window。
我发现当您在 zoneminder 中到达摄像机 PTZ 的正确区域并按下“1”按钮时,网站会发送命令
/usr/bin/zmcontrol.pl --preset=1 --command=presetGoto --id=3
可以从 Ubuntu 服务器上的终端 运行 获取,并将相机设置到正确的位置。
更新编辑 3:(这就是我现在要做的,所以我删除了其他尝试清理此 post 的所有数据)
尝试完全不同的东西,我几乎让它按照我想要的方式工作。我创建了两个名为 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
中我添加的 links 是:
<a href="cgi-bin/security.pl">Security</a>
这种方法有效并且确实可以通过单击更改相机位置我现在遇到的唯一问题是这将留下一个空白页面,背面 link 显示直接 link 到 perl地址栏中的脚本。
这对我有用,但最终我希望 security/open.pl 脚本自动 运行 "back" link 所以它会 运行命令和 return 到被单击的页面。
我已经尝试用 print redirect(-url => 'javascript:history.back()');
代替 <a href=javascript:history.back()>
行,但这只会给我留下空白页并且相机不会移动
对于所有这些疯狂的事情感到抱歉......但我很接近......它的设置方式现在确实有效并且如果我添加额外的相机应该很容易扩展,如果我不添加它只会得到改进将空白页后退 link,它会自动 return 到页面(无需硬编码地址,因为它将 linked 在不同的页面中,有时可以从本地地址,有时来自互联网地址)。
我还注意到这种方法的一个 'security' 问题。如果您知道脚本的名称和位置。它会绕过 zoneminder 登录,因此任何人都可以更改相机位置(哈哈,我猜我不会使用我在此 post 中使用的名称以防万一)
对于我的情况......风险很低,我很难想出这么多......我确定要弄清楚如何让它检查用户是否点击那个link 被授权在 Zoneminder 中这样做.. 这样任何在浏览器中输入 link 还没有登录到 zoneminder 的人将无法运行.. 会更加困难。
我想我将不得不深入研究 PHP 并找出 "controls" php 在它允许之前检查它的内容,然后找出正确的方法将它添加到 perl 脚本中,使其加载一个页面,该页面执行正确的检查,然后它是否通过了 运行s 命令。但那是另一次了。
为了完成这项工作,我会做这样的事情:
<?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>
好的..我终于得到了我想要的,所以我想我应该花那么多时间传递信息
我通过将以下 perl 脚本用于 security.pl
和 open.pl
放置在 /usr/lib/zoneminder/cgi-bin
中来使其工作..至于我的 post 我只会将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>
这将启动弹出窗口 window 和 运行 所需的命令,然后关闭 window 保持 montage/console 屏幕不变,因此不需要 "back"
这是一条漫长的道路..我仍然需要在未来处理安全问题,但截至目前,它正在按我想要的方式运行......最终我将能够解决其余问题: D 感谢@Ricardo 的尝试