首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将表单变量从PHP传递到Python (在Joomla的jumi中)

将表单变量从PHP传递到Python (在Joomla的jumi中)
EN

Stack Overflow用户
提问于 2013-07-10 16:12:18
回答 2查看 1.4K关注 0票数 0

PHP有没有一种方法可以将HTML表单变量(POST)直接传递给python脚本,在PHP中使用"passthru“而不必知道变量名?

PHP是否可以将HTTP POST请求传递给python,这样python中的cgi模块就可以像“从web”传递一样读取该请求?

基本设置: Joomla CMS,带有jumi模块。

注意!Python2.4,PHP5.3.3,基于RedHat 5.9的标准包。

其中一个jumi应用程序是一个python脚本,它创建一个表单,并处理POST变量。

原因:在我们的商店里有更多的python知识,而python脚本在后台做了很多事情。

在jumi PHP脚本中,我有:

代码语言:javascript
复制
<?php
$var1 = $_REQUEST['myVar1'];
$var2 = $_REQUEST['myVar2'];
echo passthru('/usr/bin/python /var/www/html/joomla/jumi/portal-ldap.py '.$myVar1.' '.$myVar2);
?>

然后,python脚本使用sys.arvg来处理这些变量。

它可以工作--当然可以,但它也意味着任何附加变量都必须为两个脚本所知。

PHP有没有办法将表单变量直接传递给python脚本,这样Python中的"cgi“模块就可以像我使用框架/cgi/mod_ python /...运行python脚本时那样处理这些变量?

Python处理表单变量:

代码语言:javascript
复制
import cgi
form = cgi.FieldStorage()
var1 = form.getvalue("myVar1", "nothing")
var2 = form.getvalue("myVar2", "nothing")
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-10 17:37:02

如果您绝对希望通过cgi.FieldStorage来读取值,那么可以在HTTP服务器上运行python脚本,最好限制它对localhost的访问。通过HTTP执行调用也比将参数传递给未经解析的passthrough()要安全得多。

或者,您可以将python脚本更改为使用getopt模块,这使得在键值对中定义参数变得更容易,如下所示(为简洁起见,省略了路径):

代码语言:javascript
复制
python portal-ldap.py --myvar1 nothing --myvar2 nothing

如果您决定继续使用passthgough(),请记住使用escapeshellarg()对所有参数进行转义。

Python:您也可以将其作为参数进行json_encode($_REQUEST)和传递,然后在中将其作为字典进行json.loads()

票数 1
EN

Stack Overflow用户

发布于 2013-07-10 22:00:57

我将回答我自己的问题来解释我是如何使用我获得的信息的。

我还必须补充说,我在使用Python2.4和(可能不限于) simplejson方面受到限制-因为我在这个项目中使用的是RedHat 5.9 -并且希望/需要使用提供的包。所以我有web --> Joomla --> jumi --> php --> python --> backend...

基于Kaivosukeltaja和支持文章executing Python script in PHP and exchanging data between the twohttp://pymotw.com/2/json/的答案和评论

在jumi application / php-script中,我放入了以下内容(以及其他内容),以允许将HTTP POST作为JSON对象发送到我的支持python脚本。

代码语言:javascript
复制
echo passthru('/usr/bin/python /var/www/html/joomla/jumi/ldap-script.py '. escapeshellarg(json_encode($_POST)))

然后,在python脚本中,我使用sys.argv读取变量,并使用simplejson将json对象从PHP映射到python字典(高度简化):

代码语言:javascript
复制
import sys
import simplejson as json
myjson = sys.argv[1]
mydict = json.loads(myjson)

我现在可以测试是否可以找到我想要的密钥:

代码语言:javascript
复制
if ( 'var1' in mydict):
    print mydict['var1']

用户以一种简单的形式发布到这些变量:

代码语言:javascript
复制
<form name="INPUT" action="" method="POST">
    MyVar1 <input type="number" name="var1">
    <input type=SUBMIT" value="Submit">
</form>

狂热的读者会看到,这些步骤中的大多数都引用了"var1“,而PHP没有,也不必意识到它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17565534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档