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

时间:2018-10-04 16:51:02

标签: php node.js server xampp backend

当我们运行nodejs应用程序时,它将绑定到机器上我们可以访问它的端口。 是否有任何类似的方式来运行PHP应用程序,而不仅仅是通过xampp htdocs文件夹进入默认位置?

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

2 个答案:

答案 0 :(得分: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()进行加载。

答案 1 :(得分:1)

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

  

从PHP 5.4.0开始,CLI SAPI提供了内置的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网络服务器来渲染php,设置php环境变量,更改ini设置……今天仍然使用捆绑在一起的用于服务器端渲染的webpack中间件。

如果您现在仅对php感兴趣,请尝试在服务器中进行构建,如果该默认路由器不能满足您的需求,我已经编写了一个路由器来处理多个框架PHP-Built-in-web-server-Router