PHP执行python在本地工作,但在curl加载时不起作用


php executing python works locally but not when curl loaded

我有一个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的,如果它是一个个人项目