我有一个php网页,我可以点击2个按钮,打开和关闭。它们连接到通过python操作的继电器。
<?php
if (isset($_POST['on']))
{
exec('sudo python on.py');
}
?>
<form method="post">
<p>
<button name="on">On</button>
</p>
</form>
<?php
if (isset($_POST['off']))
{
exec('sudo python off.py');
}
?>
<form method="post">
<p>
<button name="off">Off</button>
</p>
</form>
直接访问页面时,这一切都正常。我在单独的设备上有一个单独的网页,我希望能够加载所有这些其他页面。
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://192.168.1.100/index.php");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
?>
这似乎渲染了远程页面,按钮和所有,但是当单击时,python脚本不会运行。我确定我在这里缺少一些关键部分,我不是专家程序员,并且尝试在这里使用3种新语言,所以我可以使用一些帮助。
答案 0 :(得分:0)
因此,您有2台服务器,服务器A 是带有第二代码段的服务器,而服务器B 是带<的服务器 em> first snippet 和 python program 。 浏览器连接到服务器A ; 服务器请求服务器B 获取页面内容,最后将内容呈现回服务器B 。当服务器A 请求服务器B 时, off 表单字段未设置,因此代码不会执行:
browser -> server A -> server B
然后,您单击该按钮,以便浏览器向服务器A 发出另一个请求,这次浏览器发送一个值 off 表单字段;再次,服务器A 向服务器B 发出相同的请求(没有 off 表单字段),并且不执行代码。
您的问题是服务器A 未发送关闭表单字段。
我建议您在服务器B中添加2个PHP程序:
on.php
<?php
exec('sudo python on.py');
?>
off.php
<?php
exec('sudo python off.py');
?>
因此 on 和 off 有2个不同的页面。然后在服务器A 上调用其中一个,具体取决于服务器A 中的 off 参数:
<?php
if (isset($_POST['on']))
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://192.168.1.100/on.php");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
}
?>
<form method="post">
<p>
<button name="on">On</button>
</p>
</form>
<?php
if (isset($_POST['off']))
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://192.168.1.100/off.php");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
}
?>
<form method="post">
<p>
<button name="off">Off</button>
</p>
</form>
您的设置不安全,因为任何人都可以从服务器B 调用脚本,但如果是个人项目则可以。