在Python WSGI环境中运行PHP脚本

1 投票
4 回答
2187 浏览
提问于 2025-04-15 18:37

我有一个简单的PHP脚本,它可以把文件夹里的内容以XML格式输出。我用这个脚本来告诉一个Flash幻灯片可以显示哪些文件。

我刚把这个Flash放到一个用Django做的网站上,但现在这个PHP文件直接被当作普通文件提供,而不是被解析。

这个文件在我的媒体目录下,和图片放在同一个文件夹里。

我用的服务器是Plesk,所以我在每个域名的vhost.conf文件里做配置(这个文件好像会被包含到主Apache配置里)。

它的内容大致是这样的:

WSGIScriptAlias / /var/www/vhosts/<domain>/conf/django.wsgi
Alias /media/ /var/www/vhosts/<domain>/httpdocs/media/

我以为这意味着对根目录下的请求会交给Django处理。
但是如果请求的是/media/...,那就会像平常一样由Apache从指定的目录提供文件。

这样做对图片是有效的,但PHP文件却没有被解析。

我该怎么办呢?

4 个回答

1

这里的 WSGIScriptAlias 指令会把本来应该由 Alias 处理的链接给“吞掉”了。你需要把它们的顺序调换一下。

3

也许可以看看这个讨论,然后把你的PHP脚本转换成Python:

os.walk() python: 目录结构的XML表示,递归

2

结果发现问题有两个,导致很难找到。

感谢Ignacio Vazquez-Abrams,我的代码行顺序搞错了。

解决了这个问题后,PHP还是无法提供我的文件,因为它在一个从外部链接过来的目录里,这个目录不在允许的路径内。我通过关闭这个虚拟主机的open_basedir限制来解决了这个问题。下面是我新的vhost.conf配置。

<Directory /var/www/vhosts/<domain>/httpdocs>
    php_admin_flag engine on
    php_admin_value open_basedir none
</Directory>

Alias /media/ /var/www/vhosts/<domain>/httpdocs/media/

WSGIScriptAlias / /var/www/vhosts/<domain>/conf/django.wsgi

撰写回答