Php 为每个网页请求创建新流程?

Php 为每个网页请求创建新流程?,php,process,pid,Php,Process,Pid,这可能是一个基本问题,但每次用户从服务器调用php文件时,是否会从该服务器创建一个新进程 例如,我有一个基本表单(比如index.php),它将文本提交到另一个php文件。 在该php文件中,我打印了posix_getpid() 我在两个选项卡中打开了我的index.php,然后填写并提交了一个文本,最后是 每个选项卡上有两个不同的pid 这让我得出结论,服务器可能会为每个脚本创建一个新的进程。 我说得对吗 干杯 我假设您正在运行apache作为web服务器 当请求传入时,apache启动一个新

这可能是一个基本问题,但每次用户从服务器调用php文件时,是否会从该服务器创建一个新进程

例如,我有一个基本表单(比如index.php),它将文本提交到另一个php文件。 在该php文件中,我打印了posix_getpid()

我在两个选项卡中打开了我的index.php,然后填写并提交了一个文本,最后是 每个选项卡上有两个不同的pid

这让我得出结论,服务器可能会为每个脚本创建一个新的进程。 我说得对吗


干杯

我假设您正在运行apache作为web服务器

当请求传入时,apache启动一个新线程。然后在这个新线程上调用PHP,因此每次都会得到一个新的进程id

这当然大大简化了

我建议阅读这篇文章以加深理解


编辑:不同平台之间的流程似乎有所不同。它的工作方式与我在Windows上描述的相同,但在Unix上执行多个apache进程。

有多种方法可以将web服务器与PHP链接起来

对于Apache HTTP服务器,最流行的是“mod_php”。这个模块实际上是PHP本身,但编译为web服务器的一个模块,因此它被直接装入其中。由于使用mod_php,如果Apache打算使用其Worker MPM(即使用线程)处理并发性,那么php将直接加载到Apache中

这里有一个类似于
setlocale()
的陷阱

使用
Nginx
您将无法选择将PHP嵌入其中。因此,PHP完全在web服务器之外,有多个PHP
进程

这是很好的,因为PHP可以在较低的级别上进行操作,比如更改
locale

而且
setlocale()
不是线程安全的。

Ok,这是因为apache。但是你的解释对我来说有点奇怪,因为线程和进程是完全不同的。我的意思是,如果apache启动一个新线程,这意味着每个php脚本都应该有apache pid!不,PID来自新创建的PHP实例,而不是apache进程。我只是想看看我是否明白这一点,每次调用PHP脚本时,apache都会创建一个新进程来处理unix系统上的PHP脚本。当他说“新线程”时,我也感到困惑。每个进程都有一个主线程,所以我认为他的意思是,每个请求都会创建一个“新的主线程”,从而创建另一个进程。PHP进程到底什么时候启动?在web服务器获得完整的请求正文之后,还是在传输开始时?