php执行python在本地工作,但不是在加载curl时

时间:2015-08-07 17:00:07

标签: php python curl

我有一个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种新语言,所以我可以使用一些帮助。

1 个答案:

答案 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 调用脚本,但如果是个人项目则可以。