《香肠是怎么做的》apache/php/mysql交互之旅

Posted

技术标签:

【中文标题】《香肠是怎么做的》apache/php/mysql交互之旅【英文标题】:"How the sausage is made" tour of apache/php/mysql interaction 【发布时间】:2010-11-01 13:25:31 【问题描述】:

我无法理解 apache/php/mysql 堆栈如何在低级别工作(包括与浏览器的交互)。在某个地方(一本书、一个网站等)是否有一个很好的描述,它将引导我完成整个路径并解释如何从浏览器开始请求 url、发送 http 请求、apache 如何与 php 对话、php 如何与mysql(持久和非持久连接)等等等等。一本书,一篇文章?每个单独的组件都有很多文档,但我找不到“演练”。

到目前为止我看到的解释都是非常高级的:看,这是一头快乐的牛,它去了牛科大学,看 - 都是超市货架上的收缩包装。我需要的是香肠农场/屠宰场/卡车/工厂之旅,从奶牛授精开始:)

[更新] 到目前为止,除了阅读源代码之外,我还没有找到更好的方法来了解这些内容。

【问题讨论】:

好问题。我曾经读过的一本 ASP.NET 书经历了同样的概述(他们称之为应用程序请求生命周期),并且在整个开发过程中这些信息一直困扰着我。 是的,这正是我要找的。​​span> 我怀疑这将是一个不同的答案,具体取决于您是否拥有 mod_php 或 FastCGI 我无法理解你的问题.. 你能不能再用汽车类比再试一次? 【参考方案1】:

PHP and MySQL by example 有一个非常基本的过程图,我想你可能已经理解了。

不过,要获得比那张图片更深入的讨论是一个相当长的讨论。具有讽刺意味的是,您可以阅读我刚刚链接的书以获得很好的描述。如果您有更具体的问题,我建议为他们打开新问题。享受吧!

【讨论】:

【参考方案2】:

我发现一个网站至少有一部分内容来自 George Schlossnagle 的高级 PHP 编程一书。

该网站位于:http://php.find-info.ru/php/016/toc.html。具体来说,The PHP Request Life Cycle 部分包含很多细节,包括一些源代码和图表。

免责声明: IANAL,但考虑到这本书仍然是listed on Amazon,上面链接的内容可能违反了各种规范、规则和/或法律。我无意扩散或纵容非法或盗版材料,所以如果是这种情况,请删除上述链接。

【讨论】:

【参考方案3】:

你是对的,因为有整本书都写了这一切如何结合在一起,这里有一个链接到它涉及主要部分的“演练”。

http://computer.howstuffworks.com/web-server.htm

希望对你有帮助

【讨论】:

好吧,其实不然。这只是一些非常高级的手势。【参考方案4】:

最好的做法是获得一本关于 LAMP 堆栈的好书。

快速响应(如果您觉得需要,请询问更多) 浏览器通过 HTTP 协议联系 Web 服务器 服务器生成(让我们暂时离开)一个 html 结果并将其发回。 每个浏览器都只理解 http 协议(为了分析)。

现在图标、图像、javascript 等项目只是从 apache 服务器读取并“复制”到浏览器。在纯 html 文件中相同。 不同之处在于 php 文件(我在这里过于简单化了)。这些被传递给 php 模块,并且(模块的)响应将被发送回浏览器。

php 模块是理解 php 的。 我们在这里在一起吗?如果是,那么: PHP 脚本可能(或可能不需要)需要来自 MySQL 服务器的数据,它必须连接获取它们或操作它们等。

总结:这些操作中的每一个都是在不同的流程级别中单独完成的。这就是它“简单”的原因。 如果您想要更具体的内容,请询问更多信息。

【讨论】:

“最明显的答案是,找一本关于 LAMP 堆栈的好书。”你知道这样的书吗? 我指的是 LAMP 堆栈的内部,而不是如何使用 PHP/MySQL。 您需要定义“内部”。 LAMP 堆栈没有内部结构,但它的每个部分都是单独的:Web 服务器、Php 模块、Php 语言、MySQL 服务器,也许还有关于它们如何通信的 linux/os 内核。因此,如果您想单独了解每一项的更多信息,您应该检查特定于该信息的信息来源(例如 apache 的工作原理)。 您说一本关于 LAMP 堆栈的好书会回答 OP 关于“香肠是如何制作的”的问题。这就是我要找的。​​span> 【参考方案5】:

据我了解,apache 收到请求,并根据您的 .htaccess 或配置选项确定如何处理它。然后,如果需要,它会将这个请求传递给 PHP 进行解析。 PHP 对代码进行两次扫描,第一次是预解析,这会找出明显的缺陷并在解析页面之前在顶层运行函数(忽略 if 语句、循环、包含、eval 或基于 lamda 的函数中的任何函数)真的。我相信用 echo 完成的任何事情都会作为标准输出流返回,并返回给 apache。如果 apache 超时,它会向 PHP 发送 kill 信号,PHP 会关闭对象,如果需要,在退出之前打印错误消息。一旦页面退出,apache 往往会返回页眉并返回页面。

不过,我很想了解更多,所以如果有人可以更好地解释它或对我的答案进行更正/扩展,我很想听听。

【讨论】:

以上是关于《香肠是怎么做的》apache/php/mysql交互之旅的主要内容,如果未能解决你的问题,请参考以下文章

怎么搭建php环境Apache+PHP+mysql

centos7系统Apache+php+mysql环境,怎么升级PHP版本?

怎么搭建php环境Apache+PHP+mysql

apache+php+mysql是集成包安装在虚拟机里面的.如何在其他主机也能访问?

apache配置文件中怎么配置php

linux php.5.6 http 怎么连接mysql