我有一个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种新的语言,所以我可以使用一些帮助。
那么,你有2个服务器,服务器A是第二个代码段的服务器,而服务器B是第一个代码段和 python程序的服务器。浏览器连接到服务器A;服务器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');
?>
所以你有两个不同的页面在和在。然后在服务器A上,根据off参数从服务器A:
调用其中一个<?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调用脚本,但这是OK的,如果它是一个个人项目