如何在我的PHP-Apache-PostgreSQL站点中嵌入python脚本


How can i embed a python script in my PHP-Apache-PostgreSQL site?

我有一个用PHP-Apache-PostgreSQL构建的互联网站点;我为自己构建了一个实现图像比较算法的 Python 脚本。它返回从数据库获取的最相似的图像。

现在,我必须创建一个网页来嵌入我的 python 脚本。我的问题是:哪个是最快和最简单的解决方案?

  1. 创建一个php页面并与python脚本进行通信?
  2. 安装 Apache的WSGI框架并创建一个python网页我的蟒蛇脚本?
  3. 安装 WSGI+ Django 并创建一个 python 网页用我的 pythonscript?
  4. 使用套接字?

我尝试了前 2 个选项。在 php 页面中,我很难用我的 python 脚本传达变量使用WSGI,我必须改变我的思维方式:在php逻辑和接口是混合的,在python中是分开的。

更新:我的python脚本实现了图像比较算法。它返回从数据库获取的最相似的图像。

在不完全了解您的python脚本正在做什么的情况下,我将尝试快速浏览一下我将代替您做什么。

我使用Django来处理所有Web公开的应用程序。自定义 url 模式效果很好,对遗留数据的访问非常好,用于与这些数据交互的球体涵盖了我所有项目中 99% 的需求。

设置 Django 以在 apache 中运行在 Django 文档中有详细说明。一旦您的新网站与 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 应用程序数据。 为希望在 Web 上公开的数据创建视图。

作为补充说明,如果你要向公众伪装你正在混合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);