Most administrators know that PHP, the widely used scripting language, can be embedded in HTML and works with all major web servers. What's less widely known, however is that you can run PHP in different ways on your server. The most common option is the mod_php module that's runs by default in the Apache HTTP Server. If your primarily goal is performance, however, you should consider other options. PHP-FPM (FastCGI Process Manager) and PHP FastCGI each have pros and cons, but either can speed up the performance of your PHP.
Let's start by looking at running Apache with mod_php. This package is present in just about every Linux distribution's repository, so installing it is easy, and so is configuring and managing the software. In fact, its ease of use may be the main reason to deploy mod_php.
Using a different PHP package isn't the only way to improve PHP performance. PHP accelerators, also called opcodes cachers, increase the performance of PHP applications by caching the compiled form of PHP scripts. A PHP accelerator typically reduces server load and increases the speed of your PHP scripts as much as 10 times depending on how many different pages and PHP scripts are used and cached. While you can find several PHP accelerators, my suggestion is to use APC (Alternative PHP Cache), an opcode cache maintained by the developer of PHP, who plans to integrate it into PHP starting in version 5.4.
To see how APC helps speed PHP, let's look at how a PHP program is run.
The goal of APC is bypass steps 1 to 4 for each call after the first one, instead caching in a shared memory segment the opcodes generated and then copying them into the execution process. APC is easy to install and configure, so I suggest using it in every PHP installation.
Another problem with this method is that it works only on Apache. This is not always an issue, as Apache is the most complete web server you can find, but websites that run on small virtual private servers (VPS), or big sites that have to serve million of pages a day, might want a different web server that can scale up or down better than Apache, and would therefore need a different way to run PHP too.
FastCGI is a generic protocol for interfacing interactive programs with a web server. It's a variation on the earlier Common Gateway Interface (CGI) that reduces the overhead associated with interfacing the web server and CGI programs, allowing a server to handle more page requests at once.
Apache can use FastCGI in the form of mod_fcgid, and other popular webservers, such as lighttpd, nginx, Cherokee, and even Microsoft IIS, can use FastCGI as well.
With FastCGI you can set up multiple versions of PHP. This is particular useful when you have old websites made for, say, PHP 5.1 that are not compatible with the latest version of PHP. With FastCGI you can serve old PHP to the old website while using the latest version for all the others, something that is not possible with mod_php.
FastCGI also utilizes suexec to support different users with their own instances of PHP. This feature is particularly important for improving security in a shared environment, where you could have different users each managing their own websites. FastCGI reduces the memory footprint of your web server, but still gives you the speed and power of the entire PHP language.
PHP-FPM, the newest way to use PHP with a webserver, is an alternative PHP FastCGI implementation with some additional features that can be useful for websites that run on both small VPSes and multiple servers. It can be used with any web server that is compatible with FastCGI.
PHP-FPM gives administrators the ability to gracefully stop and start PHP worker processes without losing any queries. This allows you to gradually update the configuration and binary without losing any queries. You can start workers with different uid, gid, and chroot environments and different php.ini options. You can also run an emergency restart on all the processes in the event of any accidental destruction of the shared memory opcodes cache, if you're using an accelerator.
I can think of no general rule or guideline to tell you what's the right method for you or your company to use to speed up PHP. Personally, I use mod_php on most servers for its stability and the fact it is so well-known. I use PHP-FPM on small VPSes where saving memory while keeping fast performance is a must. The important thing to keep in mind is the variety of different solutions available; knowing about all of them is fundamental when planning your project.
Allowed tags: <a> link, <b> bold, <i> italics