Skip to main content
 首页 » 编程设计

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

2025年05月04日11lidabo

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

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

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

我尝试了前两个选项。 在 php 页面中,我很难用我的 python 脚本传递变量 使用WSGI,我不得不改变我的思维方式:在php中逻辑和接口(interface)是混合的,在python中是分开的。

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

请您参考如下方法:

在不完全了解您的 python 脚本在做什么的情况下,我将尝试让您快速了解一下我会在您的位置做什么。

我使用 Django适用于所有暴露于 Web 的应用程序。它非常适合自定义 url 模式,对遗留数据的访问非常好,与这些数据交互的 orb 涵盖了我所有项目中 99% 的需求。

将 Django 设置为在 apache 中运行在 Django documentation 中有详细说明。 .一旦你的新站点与你的 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 > 模型.py

这将为您的每个表生成一个模型。将此模型文件添加到新的 django 项目中并应用。

python manage.py startapp phpextension 
mv models.py phpextension/models.py 

在设置中修改已安装的应用程序以包含新安装的应用程序,您现在可以通过 django 应用程序访问整个 PHP 应用程序数据。为您希望在网络上公开的数据创建您的 View 。

作为补充说明,如果您想向公众伪装您正在混合使用 php 和 django/python,您可以使用以下内容创建 URL 模式:

url(r'^my_command.php$', 'phpextensions.views.my_command', name="my_command"), 

为此,我认为您还需要设置 APPEND_SLASH=False。

然后, View 会将 django View 视为另一个 php 脚本(只会更快、更亲切并注入(inject)神奇的 unicorn )。

通过 PHP 访问您的 Django 数据

在这里我会使用 REST api。简单的方法是使用 json.dumps(my_dictionary_of_data_for_php) 在您的 View 中构建一个 JSON 响应,更企业的方法是使用 tastypie .

然后您可以使用 PHP 访问数据

$fc = file_get_contents('http://yourdomain.com/path/to/django/my_command.php'); 
$django_data = json_decode(fc);