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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在端口而不是在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()加载。

另一答案

从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,旨在做到这一点,你可以启动一个nodejs webserver,渲染php,设置php环境变量,改变ini设置......今天仍然使用这个捆绑webpack中间件进行服务器端渲染。

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

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

如何在我的计算机上运行 htdocs 目录之外的 PHP 文件?

如何在 Mac 上的 XAMPP 上运行 PHP 文件

如何使用xampp安装php程序

我安装了xampp,为啥输入:http://localhost:81后不能显示页面啊,而不出现以下的页面呢

从外部 htdocs 运行我的 php 文件

如何让 XAMPP Apache 监听多个网络端口?