如果 php 可以作为 Web 服务器运行,为什么我们真的需要 apache + php?

如果 php 可以作为 Web 服务器运行,为什么我们真的需要 apache + php?

几个月前我做了一个实验,结果非常顺利,今天我们有一个使用以下技术的内部网门户:

捷易

php网格

基巴纳

那么,根据我们的测试,为什么我们需要使用 apache?

PS:我不是在否定 Apache,这个问题只是出于好奇

: 编辑

当我说“我们”时,我指的是使用小型 Web 应用程序的小团队

答案1

正如有人已经提到的,PHP 命令行界面内置的服务器是仅用于开发的服务器,它的功能并不齐全。它的存在主要是为了让我们可以内部测试需要 Web 服务器的东西;它对内部开发人员很有用。它对 PHP 程序员在开发过程中进行测试很有用,但它不适用于任何类型的部署。

我们提供 PHP 服务的最佳方式是使用 FCGI;php-fpm SAPI 允许 PHP 缓冲一组进程,并将这些进程与用于静态内容的服务器基础架构隔离。

用于静态内容的服务器最好是事件驱动的,例如 nginx。原因是大多数请求不需要解释器上下文,响应(图像、css、javascript 等)可以使用非阻塞 I/O 提供,而无需初始化解释器上下文。

其他答案中关于 PHP 的能力有很多废话;忽略它,这是无稽之谈。

答案2

PHP 的内部 Web 服务器是针对开发的。发布应用程序时,您需要使用“真正的”Web 服务器来处理它。

Apache 在很多方面都更胜一筹:并发用户、资源优化等。即使对于小型网站,其配置可能性也远不及 PHP 网络服务器。Apache 主要针对静态文件服务;因此您的样式、图像、javascript(因为您使用 jQuery,所以有一些)将以更好的方式处理。

答案3

Apache 速度快,配置性非常好。对于静态文件服务,php 不是最佳选择。

php 还有一个大问题,那就是它没有有效的多线程垃圾收集器。它甚至在多线程环境中也无法工作。这就是为什么 apache 需要在某些(可配置的)查询之后重新启动其支持 php 的子进程的原因。

我还必须提到,即使是 Java 在大多数情况下也会在其应用程序服务器(即基于 Java 的 Web 服务器)之前使用 apache,至少作为代理,甚至是静态文件服务器。

所以,我的估计是,即使这些 php 网络服务器可以工作,并且可能比标准 apache 解决方案更好,但它们无法解决 php 的一些底层问题。

两者都不好,无论是使用 apache 还是使用基于 php 的 Web 服务器,php 在这两种情况下都不好。问题不在这里,问题出在 php 核心上。

相关内容