【问题标题】:php executing python works locally but not when curl loadedphp执行python在本地工作,但在加载curl时不起作用
【发布时间】:2015-08-07 17:00:07
【问题描述】:

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

【问题讨论】:

    标签: php python curl


    【解决方案1】:

    所以,您有 2 台服务器,服务器 A 是具有 second sn-p 的服务器,而 服务器 B 是具有first sn-p python程序浏览器连接到服务器Aserver Aserver B 请求获取页面内容,最后将内容渲染回server B。当 server Aserver B 请求时,off 表单域没有被设置,所以代码不会被执行:

    browser -> server A -> server B
    

    然后,您点击按钮,浏览器服务器A发出另一个请求,这一次浏览器发送一个值off 表单域; server A 再次向 server B 发出相同的请求(没有 off 表单字段)并且代码没有被执行。

    您的问题是 服务器 A 没有发送 关闭 表单字段。

    我建议你在服务器 B 中添加 2 个 PHP 程序:

    on.php

    <?php
    exec('sudo python on.py');
    ?>
    

    off.php

    <?php
    exec('sudo python off.py');
    ?>
    

    所以你有 2 个不同的页面用于 onoff。然后在 server A 上,根据 server Aoff 参数调用其中之一:

    <?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 调用脚本,但如果它是个人项目,那没关系。

    【讨论】:

    • 这是我在远程服务器上得到的 [Fri Aug 07 19:35:04 2015] [error] [client 192.168.1.229] 文件不存在:/var/www/test1,referer :127.0.0.1/test我在另一台机器上本地访问页面,所以请求不同,远程机器上不存在该路径。
    • 当我浏览到原始远程文件时,一切都很好。第二个 sn-p 位于另一台服务器上,它拉取页面内容但不执行 python。我觉得我走错了路,我想要的或多或少是我添加的每个节点的 iframe,希望不使用 iframe,但我正在做的事情不起作用。
    • @JoshStevens,我为您的问题提出了不同的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 2012-07-28
    • 2017-09-09
    • 2018-05-20
    • 2012-01-15
    • 1970-01-01
    相关资源
    最近更新 更多