0

我一直在尝试在本地(在 Windows 10 中)开发网页并在我的本地浏览器(chrome、vivaldi)中运行。现在我有 3 种不同的方式在本地运行简单的服务器:php 的内置服务器、python 的 http.server 模块和 vscode 的 LiveServer。当我运行 php 服务器时,我可以像预期的那样正确执行 php 代码。但是使用其他两个调用 php url,我得到一个“保存文件”对话框!那是从哪里来的?我得到的不是简单的“未找到”对话框。所以我有两个问题:(1)为什么我得到保存文件对话框?(2) 是否可以使用 LiveServer 或 python 的 http.server 模块处理 php 文件(我不希望它可以支持 php)

4

2 回答 2

1

好问题。埃里克已经回答了第一个。我将详细说明它,然后回答第二个。

为什么会出现保存文件对话框?

在较高级别上,Web 服务器正在提供文件。向浏览器提供 HTML/CSS/JS 文件时,生活很轻松。您的浏览器理解 HTML/CSS/JS 并知道如何为用户呈现它。如果您的浏览器发送了未处理的 PHP 文件(假设该文件存在),浏览器将不知道如何处理<?php .. ?>标签等。因此,浏览器为用户提供下载文件。与 zip 文件相同。如果您访问http://someurl.com/abc.zip,如果网络服务器在 someurl.com 的根目录下找到该文件,它会将其发送到浏览器,浏览器将提供用户下载它。不仅如此。

那么,Web 服务器是如何处理 PHP 文件的呢?这取决于 Web 服务器,但共同点是它们在处理 PHP 文件时需要帮助。Web 服务器被配置为将请求发送到 php.exe 或其他一些系统,例如 PHP-FPM,后者处理文件并返回到 Web 服务器以将其发送给用户。文件的处理转换echo "<div>$variable</div>";为干净的 HTML <div>I am awesome</div>。该处理系统(php.exe 或 PHP-FPM)与 Web 服务器标记组合,以向浏览器提供它可以呈现的内容。

是否可以交叉渲染语言?

是的,您可以通过多种方式。一种常见的方法是为所选语言找到最佳处理系统。例如,可以使用作为服务运行的 PHP-FPM 来处理 PHP。因此,http ://someurl.com/test/index.php可以通过 PHP-FPM 运行。Python 可以使用 WSGI,您可以选择 gunicorn 来处理 Python 文件。在这种情况下,可以要求您的网络服务器将与 python 相关的目录/子域直接发送到 gunicorn(本质上是代理)。

反向代理

假设您有多个具有多种语言需求的网站。

py.someurl.com 可以在端口 8000 上使用 gunicorn Web 服务器(或其他 wsgi 友好服务器)的服务器上运行。节点可以使用端口 9000 上的 Express Web 服务器提供服务。

您可以运行提供直接 HTML 的 NGINX 服务器,还可以通过向 PHP-FPM 服务发送请求来提供 ph.someurl.com。它还可以配置为将所有请求发送到 js.someurl.com 并将其传递给http://localhost:9000,其中 Node 将为请求提供服务并将输出发送回 NGINX,NGINX 可以将请求发送到浏览器。同样,对 py.someurl.com 的请求可以发送到 localhost:8000,gunicorn 处理请求并将请求发送回 NGINX,NGINX 将请求转发给浏览器。

从用户的角度来看,他们所知道的只是 NGINX 服务器。NGINX 知道后台的所有其他内容。在这种情况下,NGINX 充当 Web 服务器和代理。

于 2020-06-07T02:57:43.073 回答
1

如果显示保存对话框,则导致服务器无法解释 php 代码。您必须检查这些服务器配置以检查它们与 PHP 的集成(如果他们可以这样做)。

于 2020-06-07T02:34:58.240 回答