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

Posted

技术标签:

【中文标题】如何在端口而不是 htdocs 文件夹中运行 PHP 应用程序?【英文标题】:How to Run PHP application on a port rather than in htdocs folder? 【发布时间】:2019-03-10 03:35:30 【问题描述】:

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

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

【问题讨论】:

服务器监听的端口与目录/文件夹没有任何关系。您收到的两个答案都详细解释了这一点。 【参考方案1】:

从 PHP 5.4.0 开始,您可以使用 PHP Built-in web server 启动自己的服务器

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

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

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

文档提供的示例

router.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-Built-in-web-server-Router

【讨论】:

【参考方案2】:

您将几个不同的问题混为一谈。

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() 加载。

【讨论】:

以上是关于如何在端口而不是 htdocs 文件夹中运行 PHP 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

XAMPP 正在寻找 htdocs 而不是域文件夹中的图像

如何让 Tomcat 在 443 而不是其默认端口 8080 上运行? [关闭]

XAMPP 服务器使用多个端口而不是端口 80

WAMP 和 XAMPP 显示 PHP 而不是运行它

如何使代客指向 localhost:8000 而不是 laravel 框架的 htdocs

在 ubuntu linux 中同步 dropbox 和 xampp htdocs,不包括临时文件