【问题标题】:Why isn't my PHP exec() working when trying to call a Python function?为什么尝试调用 Python 函数时我的 PHP exec() 不工作?
【发布时间】:2012-03-10 23:08:55
【问题描述】:

我正在编写一个使用 HTML 来显示表单的网络应用程序。然后用户完成表单,并在提交时将表单发送到 PHP。在 PHP 文件中,我将其设置为调用和 exec() 命令到将返回数据的 Python 文件。但由于某种原因,我没有得到任何回报。当我在终端中执行命令时效果很好,但是我们在网络浏览器中没有响应。

HTML:

<form id ="nameForm" action="python.php" method="post" target="_blank">
     <label>First Name:</label><input type="text" id="firstName" name="firstName"><br>
     <label>Last Name:</label><input type="text" id="lastName" name="lastName"><br>
     <input type="submit" id="submitName" value="Submit">
</form>

PHP:

$firstName = $_REQUEST['firstName'];
$lastName = $_REQUEST['lastName'];

exec("/opt/http/PythonWeb/web/python pythonName.py " . $firstName . " " . $lastName, $response);

echo $response;

Python:

import sys

def main():
    firstName = sys.argv[1]
    lastName = sys.argv[2]

    output = ""

    output += "<html>\n"
    output += "  <head><title></title></head>\n"
    output += "  <body>\n"
    output += "      <p>Hi " + firstName + " " + lastName + "</p>\n"
    output += "  </body>\n"
    output += "</html>\n"

    print output

if __name__ == '__main__': main()

请就可能出现的问题给我一些建议。我是 Python 新手,但这是老板想要的……所以我要完成这项工作。谢谢!

【问题讨论】:

  • 为此目的混合 PHP 和 Python 对我来说似乎有点愚蠢。我建议要么用 Python 编写你的应用程序,要么用 PHP 编写它,但不能两者兼而有之。
  • 你确定你的服务器允许passthru吗?如果是这样,当您使用更常见的内置命令之一尝试它时会发生什么?你得到输出了吗?也尝试把error_reporting(-1);

标签: php python html command exec


【解决方案1】:

根据http://www.php.net/manual/en/function.passthru.php,您以错误的方式使用直通。它用于二进制数据...

这个函数应该用来代替 exec() 或 system() Unix 命令的输出是需要传递的二进制数据 直接返回浏览器。

试试 Exec()。

希望我能有所帮助。

【讨论】:

  • 嘿...谢谢你的建议。但是,我试过了,还是没有反应。
【解决方案2】:

确保您不会被safe mode 阻止。

确保你逃避你的论点。试试:

$response = shell_exec("/opt/http/PythonWeb/web/python pythonName.py " . escapeshellarg($firstName) . " " . escapeshellarg($lastName));

echo $response;

如果问题仍然存在,您可以通过将其放在 PHP 脚本的顶部来确保错误报告已开启,从而进一步调查:

ini_set('display_errors', 1);
error_reporting(E_ALL);

【讨论】:

    【解决方案3】:

    我不确定为什么它不起作用,但您应该使用 EscapeShellArgs 并且可能使用 EscapeShellCmd

    这些将保护您免受任何狡猾的用户输入,并且它们通常有助于确保 exec 实际正常工作。

    还将您传递给“Exec”的字符串放入一个变量中,并回显该变量,然后将确切的输出剪切并粘贴到 shell 中,这通常有助于找出问题所在。

    【讨论】:

      猜你喜欢
      • 2014-06-27
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多