It might be a basic question but everytime a user call a php file from a server, does it create a new process from that server ?
For example, I have a basic form (let's say on index.php) that submits a text to another php file. In that php file, I print the posix_getpid().
I opened in two tabs my index.php an filled in and submitted a text and I ended up with two different pid on each tab.
Which lead me to the conclusion that a server probably create a new process for each script. Am I right ?
开发者_如何学运维Cheers !
I assume that you're running apache as your web server.
When a request comes in, apache starts a new thread. PHP is then invoked on this new thread, hence why you get a new process id every time.
This is, of course, greatly simplified.
I recommend reading this article for a deeper understanding.
Edit: It seems that the process differs between platforms. It works the way I described above on Windows, but multiple apache processes are executed on Unix.
There are multiple ways to chain the web server with PHP.
For Apache HTTP Server
, the most popular is "mod_php". This module is actually PHP itself, but compiled as a module for the web server, and so it gets loaded right inside it. Since with mod_php, PHP gets loaded right into Apache, if Apache is going to handle concurrency using its Worker MPM (that is, using Threads)
And here is a trap for things like setlocale()
.
With Nginx
you won't have the option to embed PHP into it. Hence, PHP is totally outside of the web server with multiple PHP processes
.
And it is good, because PHP can do things on lower lever, like changing locales
And setlocale()
is NOT thread-safe.
精彩评论