我有一个用PHP-Apache-PostgreSQL构建的互联网站点; 我自己构建了一个python脚本,实现了图像比较算法。它返回从db。中获取的大多数相似图像。
现在,我必须创建一个网页,我嵌入了我的python脚本。 我的问题是:哪个是最快速,最简单的解决方案?
我尝试了前两个选项。 在php页面中,我很难用我的python脚本传递变量 使用WSGI,我必须改变我的思维方式:在php逻辑和界面混合,在python中划分。
UPDATE :我的python脚本实现了图像比较算法。它返回从db。中获取的大多数相似图像。
答案 0 :(得分:1)
在没有完全了解你的python脚本正在做什么的情况下,我会尝试让你快速了解我将在你的位置做些什么。
我对所有Web公开的应用程序使用Django。它非常适合自定义网址模式,对遗留数据的访问非常出色,与这些数据交互的orb涵盖了我在所有项目中99%的需求。
在Django documentation中详细解释了设置Django以在apache中运行。一旦你的新网站启动并与你的php应用程序并排运行,你就可以开始它们之间的通信。
Django访问PHP数据
Django manage.py可以根据现有表格为您创建模型。在某些情况中,您可以获得可立即使用的开箱即用模型文件,但在大多数情况下,您需要创建自己的订单并自定义表之间的关系。设置settings.py的数据库部分以指向您的PHP应用程序数据库。
DATABASES = {
'default': {
'ENGINE':'django.db.backends.postgresql_psycopg2',
'NAME': 'myphpappdbname',
'USER': 'phpuser',
'PASSWORD': 'phppassword'
# snipped away other options. Might or might not bee needed
}
}
完成设置后,您可以使用
测试对数据的访问权限python manage.py dbshell
确保与数据库的正确连接后,您可以运行
python manage.py inspectdb> models.py
这将为您的每个表生成一个模型。将此模型文件添加到新django项目中的应用程序。
python manage.py startapp phpextension
mv models.py phpextension/models.py
在设置中修改已安装的应用以包含新安装的应用,您现在可以通过django应用访问整个PHP应用数据。为您希望在网络上公开的数据创建视图。
作为补充说明,如果您要向公众伪装您正在混合php和django / python,您可以使用以下内容创建您的URL模式:
url(r'^my_command.php$', 'phpextensions.views.my_command', name="my_command"),
为此,我认为您还需要设置APPEND_SLASH=False
。
然后视图将django视图视为另一个PHP脚本(只有更快,更亲切,并注入了神奇的独角兽)。
通过PHP访问您的Django数据
这里我将使用REST api。简单的方法是使用json.dumps(my_dictionary_of_data_for_php)在视图中构建JSON响应,更多的企业方法是使用tastypie。
然后您可以使用
访问PHP中的数据$fc = file_get_contents('http://yourdomain.com/path/to/django/my_command.php');
$django_data = json_decode(fc);