如何在端口而不是htdocs文件夹中运行PHP应用程序?



当我们运行nodejs应用程序时,它被绑定到机器上的一个端口,我们可以从那里访问它。 有没有类似的方法来运行PHP应用程序,而不仅仅是通过xampp htdocs文件夹转到默认位置?

我想避免将我的文件存储在htdocs文件夹中。

你把几个不同的问题混为一谈。

PHP传统上是通过CGI或FastCGI(PHP-FPM(守护进程执行的。 在这些情况下,Web服务器本身(如Nginx或Apache(是侦听端口的内容,它通过这些协议与PHP通信。 大多数为 HTTP 请求提供服务的 Node.js 应用程序跳过 CGI 和 FastCGI 路由,并自行运行 HTTP 守护进程。 通常仍然有一个适当的 Web 服务器在前面,以处理慢速客户端的缓冲和缓存。

考虑这个问题的方法是,对于大多数(当然不是全部(Node.js应用程序,使用HTTP而不是FastCGI。 (而且,作为奖励,如果您只想让客户端直接连接到 Node.js,则可以完全跳过对 Web 服务器的需求。

现在,进入应用程序目录结构... 最佳做法是将应用程序代码实际保留在文档根目录之外。 一种真正简单的方法是拥有一个文件,例如index.php,它接收所有路由(通过 Web 服务器中的重写规则配置(,然后加载并执行适当的代码。 在磁盘上,此应用程序代码的其余部分位于文档根目录之外,可以通过简单的require()/include()加载。

从 PHP5.4.0 开始,您可以使用 PHP 启动自己的服务器 内置网络服务器

从 PHP 5.4.0 开始,CLI SAPI 提供了一个内置的 Web 服务器。

Web 服务器只运行一个单线程进程,因此如果请求被阻止,PHP 应用程序将停止。

示例:
-仅运行一个单线程进程 - 意味着如果您尝试cURLfile_get_contents,或者在同一域上执行任何请求,您最终会陷入循环并卡住服务器,因为 PHP 是同步的,而这个是单线程的。

文档中提供的示例

路由器.php

<?php
// router.php
if (preg_match('/.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"])) {
return false;    // serve the requested resource as-is.
} else { 
echo "<p>Welcome to PHP</p>";
}
?>

然后在终端中键入php -S localhost:8000 router.php以启动服务器。

我想避免将我的文件存储在htdocs文件夹中。

要指定另一个文档根目录,请添加-t参数:

php -S localhost:8000 -t /path/to/project router.php

我前段时间写了一个nodejs包node-php-awesome-server,旨在做到这一点,你可以启动一个渲染php的nodejs网络服务器,设置php环境变量,改变ini设置......今天仍然使用它与 webpack 中间件捆绑在一起进行服务器端渲染。

如果你现在只对php感兴趣,试试他们在服务器中的内置,如果默认路由器不能满足你需要的东西,我已经写了一个路由器来处理几个框架PHP-内置-web-server-Router

相关内容

最新更新