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脚本中,我有:
<?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处理表单变量:
import cgi
form = cgi.FieldStorage()
var1 = form.getvalue("myVar1", "nothing")
var2 = form.getvalue("myVar2", "nothing")发布于 2013-07-10 17:37:02
如果您绝对希望通过cgi.FieldStorage来读取值,那么可以在HTTP服务器上运行python脚本,最好限制它对localhost的访问。通过HTTP执行调用也比将参数传递给未经解析的passthrough()要安全得多。
或者,您可以将python脚本更改为使用getopt模块,这使得在键值对中定义参数变得更容易,如下所示(为简洁起见,省略了路径):
python portal-ldap.py --myvar1 nothing --myvar2 nothing如果您决定继续使用passthgough(),请记住使用escapeshellarg()对所有参数进行转义。
Python:您也可以将其作为参数进行json_encode($_REQUEST)和传递,然后在中将其作为字典进行json.loads()。
发布于 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 two和http://pymotw.com/2/json/的答案和评论
在jumi application / php-script中,我放入了以下内容(以及其他内容),以允许将HTTP POST作为JSON对象发送到我的支持python脚本。
echo passthru('/usr/bin/python /var/www/html/joomla/jumi/ldap-script.py '. escapeshellarg(json_encode($_POST)))然后,在python脚本中,我使用sys.argv读取变量,并使用simplejson将json对象从PHP映射到python字典(高度简化):
import sys
import simplejson as json
myjson = sys.argv[1]
mydict = json.loads(myjson)我现在可以测试是否可以找到我想要的密钥:
if ( 'var1' in mydict):
print mydict['var1']用户以一种简单的形式发布到这些变量:
<form name="INPUT" action="" method="POST">
MyVar1 <input type="number" name="var1">
<input type=SUBMIT" value="Submit">
</form>狂热的读者会看到,这些步骤中的大多数都引用了"var1“,而PHP没有,也不必意识到它。
https://stackoverflow.com/questions/17565534
复制相似问题