既然apache也是调php解析器php-cgi.exe去执行php的,为啥一定要安装apache呢?

 zsx2502853407 发布于 2022-11-21 20:53

既然apache也是调php解析器php-cgi.exe去执行php的,为啥一定要安装apache呢?
为啥不是直接把请求给php-cgi.exe, 还要经过apache绕一下?

6 个回答
  • 别的不说,后端直接暴露在公网你还真敢干啊。。

    2022-11-21 21:20 回答
  • 一个网站的构成,除了php生成的动态内容之外,还有其它的部分,比如静态内容,如果由php去下发这些静态内容的话,效率自然不如专门为这种工作优化过的web server来得高效。

    除了静态内容之外,还有记录访问日志、url rewrite、http协议相关的很多东西,假设世界上没有web server这种东西,那我们无论使用什么语言来开发网站,都必须把这些东西写一遍。把这些东西独立出来,实现成为web server,就节约了大量的重复性劳动,而且无论后端使用任何语言,都可以直接通过部署到web server享受到这些便利。这一点其实跟我们在设计系统的时候把某些逻辑专门抽象封装出来是一个道理。

    2022-11-21 21:20 回答
  • php-cgi.exe不是http服务器,它接受的协议和apache完全不一样。如果需要去掉apache就必须用php实现http协议,会导致很多无用代码还可能有bug。

    2022-11-21 21:20 回答
  • PHP作为Apache的一个module(libphp5.so)集成到Apache进程(httpd)运行,这种mod_php的运行模式是最常用的,这时PHP的运行跟php-cgi没有任何关系.mod_php的配置是这样:

    LoadModule php5_module modules/libphp5.so
    AddHandler application/x-httpd-php .php
    

    可以配置extra/httpd-mpm.conf来控制Apache的进程数量.

    如果你在Apache里用mod_fcgid方式来运行PHP,则需要使用php-cgi,这时Apache作为有一个FastCGI进程管理器来管理php-cgi,在httpd.conf配置:

    #载入mod_fcgid模块(不能和php5_module同时使用)
    LoadModule fcgid_module modules/mod_fcgid.so
    AddHandler fcgid-script .php
    #php-cgi的进程数量
    FcgidMaxProcesses 5
    #指定php-cgi来处理php请求
    FcgidWrapper /png/php/5.4.39NTS/bin/php-cgi .php
    #在需要使用php-cgi来执行PHP的Directory加上Options +ExecCGI,比如:
    <Directory "/png/www/a.com/public_html/fcgid">
        Options +ExecCGI
    </Directory>
    

    另外在Linux上还有一种非常常用的组合,就是Nginx搭配php-fpm使用,其中php-fpm跟php-cgi没有任何关系,php-fpm自身就集成了PHP解释器,php-fpm有自己的进程管理器,只处理Nginx转发过来的PHP请求并返回,跟Nginx是松耦合的.

    2022-11-21 21:20 回答
  • apache实现了http协议及相关内容,而php只是可以作为它的一个扩展而已
    如果你用php实现http协议相关内容,也可以无需apache的。

    当然你也可以这样:

    php -S 0.0.0.0:8080 -t /www
    

    直接用php内置的web server,无需安装apache。

    2022-11-21 21:20 回答
  • 一个php的地址请求的时序图是这样的,php-cgi是和apache之间进行fastcgi通信的监守程序,是不能被去掉的。
    当然apache还有一种不通过fastcgi进行调用php的方式,即apache模块方式:

    LoadModule php5_module /usr/lib/apache/libphp5.so
    

    这个时候时序图上是没有php-cgi这个实体的,apache直接调用php.

    2022-11-21 21:20 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有