如何在端口而不是 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 应用程序将停止。
示例: - 只运行一个单线程进程 - 表示如果您尝试 cURL 或 file_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 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何让 Tomcat 在 443 而不是其默认端口 8080 上运行? [关闭]