【问题标题】:How can I call shell_exec() from PHP webhook?如何从 PHP webhook 调用 shell_exec()?
【发布时间】:2016-06-01 23:35:21
【问题描述】:

我遇到了一个重大问题,但我找不到解决方案。我目前有一个接受 webhook (HTTP POST) 作为触发器的 PHP 脚本。根据 POST 中包含的变量,应该运行 exec('python script') 并返回一些变量。当我从命令行运行它时它运行良好,但是当我尝试从任何类型的 HTTP 请求触发脚本时,exec() 函数不会运行。以下是受影响的代码部分:

$command = shell_exec('python C:\\xampp\\cgi-bin\\SECpull.py');

$company_dump = print_r($command, TRUE);
$fp = fopen('retvals.txt', 'w');
fwrite($fp, $company_dump);
fclose($fp);

如果在由 HTTP POST 触发的 PHP 脚本中不可能有 exec() 函数,那么我应该如何处理呢?

【问题讨论】:

  • 完全有可能,而且您的代码没有任何问题(假设 asterix 是错字)。运行您的 Web 服务器的用户可能没有运行该命令的权限。您可以通过以该用户而不是默认用户身份运行脚本来从命令行对此进行测试。我不知道如何在 Windows 上执行此操作,但在 unix 系统上,它会类似于 sudo -u apache php myscript.php(如果 apache 运行您的 Web 服务器)
  • 星号是为了突出显示该行作为我脚本中要重点关注的行。我会解决这个问题以消除混乱。
  • 这里很多事情都可能出错。如果您可以发布您看到的错误,那将更加有用。 shell_exec 不是一种安全的做事方式。为什么不用纯 PHP 解决方案或纯 python 解决方案而不是混合?
  • 出于多种原因,但主要原因是我使用了一个纯 Python 库和一个纯 PHP 库。我可以放弃 PHP 脚本,但问题是接收 webhook(主要是 POST)。坦率地说,我不完全了解如何创建一个端点来使用 python 发送请求。在 PHP 中,这很简单。我只是将请求发送到脚本的 URL。使用 Python 并不容易,因为一切都在 cgi-bin 中。我还在学习,所以请放轻松,但是对如何创建 python 端点的解释将解决我的问题。

标签: php python exec webhooks cgi-bin


【解决方案1】:

问题

正如Robbie Averill 所提到的,您很可能遇到了权限问题,您可以通过向用于运行 Web 服务器的用户添加额外权限来修复它。但是,我认为将 混合在一起并不是一种好的风格,如果您无法将SECpull.py 重写为,那么最好在 中进行所有操作。

我建议你使用Flask

示例

# server.py
from flask import Flask
app = Flask(__name__)

# Setup custom route here
@app.route("/") 
def index():
    # Add SECpull.py logic here.
    return "Welcome To Python Server!"

if __name__ == "__main__":
    app.run()

设置

$ pip install Flask
$ python server.py

* Running on http://localhost:5000/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 2010-12-17
    • 2011-04-02
    • 2012-09-05
    • 2016-07-01
    • 1970-01-01
    相关资源
    最近更新 更多