Install and Configure PHP
Install and Configure PHP
Install and Configure PHP
Introduction
The fastest and easiest way to install PHP on Internet Information Services (IIS) is by using the Microsoft Web Platform
Installer (Web PI). Web PI completely automates setting up IIS, FastCGI, and the latest version of PHP from the php.net
Web site. With Web PI, you can navigate to the Web Platform tab and select PHP under Framework and Runtimes
customize link. Alternately, use the instructions that follow as guidance for installing PHP with Windows Installer or using
a compressed (Zip) file installation.
There are two builds for each PHP version: one is thread-safe, and one is not (referred to as the non-thread-safe [NTS]
version). The thread-safe version is designed for environments where the Web server core can keep the PHP engine in
memory, running multiple treads of execution for different Web requests simultaneously. The architecture of IIS and the
FastCGI extension provide an isolation model that keeps requests separate, removing the need for a thread-safe version.
The NTS version does not have any of the code that allows PHP to manage multiple threads. As a result, there is a
performance improvement on IIS when using the NTS version when compared to the tread-safe version because the NTS
version avoids unnecessary thread-safety checks (FastCGI ensures a single-threaded execution environment).
Install PHP
There are two main ways to install PHP on a Windows -based computer: download the Windows Installer or use the
Windows Zip file from the PHP Web site. Either method will get PHP working, but both have some extra steps that are
needed to make PHP work well.
WINDOWS INSTALLER
The Windows Installer version can get a complete PHP environment up and running, but the installation of extensions can
be confusing. By default, no extensions are installed, and this can adversely affect the usefulness of the PHP installation.
Alternately, all of the extensions can be installed; this results in an unstable system because some of the extensions can
conflict with others. It is generally easier to use the Zip file installation.
1. Download the latest non-thread-safe Zip file package with binaries of PHP. Under Windows Binaries, click on the
most current PHP non-thread-safe Zip package to download the PHP files.
2. Unpack the files to a directory of your choice (for example, C:\PHP) on your IIS server.
3. Rename the Php.ini-recommended to php.ini.
4. Open the Php.ini file in a text editor, then uncomment and modify settings
as follows:
Set fastcgi.impersonate = 1.
FastCGI under IIS supports the ability to impersonate security tokens of the calling client. This allows IIS to
define the security context that the request runs under.
Set cgi.fix_pathinfo = 0
The cgi.fix_pathinfo provides PATH_INFO/PATH_TRANSLATED support for Common Gateway Interface
(CGI). Setting this to 1 will cause PHP CGI to fix its paths to conform to the specification.
Set cgi.force_redirect = 0.
Set open_basedir to point to a folder or network path where the content of the Web site(s) is located.
Set extension_dir to point to a location where PHP extensions reside. For PHP 5.2.X, this is
typically extension_dir = "ext".
Set error_log="C:php_errors.log"
This can help with troubleshooting.
Enable the required PHP extension by un-commenting corresponding lines. More information follows in the
section, .
5. Click on Start, Settings, Control Panel, and then double-click on the System icon (using the class view).
6. Click on the Advanced system settings link in the left column.
7. From the System Properties window, click on the Advanced tab, and then click on the Environment
Variables button at the bottom.
8. Select the Path variable from the System Variables section, and then click on Edit. Add: c:\php to your system
path.
13. From the Handler Mappings Actions panel, click on Add Module Mapping.
14. Type the following information into the appropriate text boxes, and then click OK.
The Php.ini file provides PHP with configuration and environmental information. Below are a number of settings for the
Php.ini file that help PHP work better with Windows.
REQUIRED SETTINGS
extension_dir = <PATH TO EXTENSIONS>
The extension_dir needs to point to the directory where the PHP extensions are stored. The path can be fully
qualified (for example, C:\PHP\ext) or relative (for example, .\ext). Extensions that are specified lower in the
Php.ini file need to be located in the extension_dir. If the extensions specified are not in the extension_dir, then
PHP will give a warning message at the start of script execution, and the application may show errors because
of the missing functionality.
extension = xxxxxx.dll
For each extension enabled, a corresponding extension= directive that tells PHP which extensions in the
extension_dir to load at startup time is necessary.
log_errors=On
PHP errors can also go through the PHP error logging facility. This can be used to send errors to a file or to a
service (for example, syslog) and works with the error_log directive described below. When running under IIS,
log_errors must be enabled with a valid error_log. Otherwise, FastCGI considers any startup messages (which
may be benign) as an error condition, which generates an HTTP 500 return error code to the browser.
error_log=<path_to_error_log_file
The error_log needs to specify the fully qualified, or relative, path to the file where the PHP error log is stored.
This file needs to be writable for the IIS service. The most common places for this file are in various temporary
directories (for example, C:\inetpub\temp\php-errors.log). That puts the log in a place that IIS can use, and also
keeps the log close to where PHP applications are running.
cgi.force_redirect = 0
This directive is required for running under IIS. It is a directory security facility required by many other Web
servers; however, enabling it under IIS will cause the PHP engine to fail on Windows.
cgi.fix_pathinfo = 1
This lets PHP access real path info following the CGI specification. The IIS FastCGI implementation needs this
extension set.
fastcgi.impersonate = 1
FastCGI under IIS supports the ability to impersonate security tokens of the calling client. This allows IIS to
define the security context that the request runs under.
fastcgi.logging = 0
FastCGI logging should be disabled on IIS. If it is left enabled, then any messages of any class are treated by
FastCGI as error conditions, which will cause IIS to generate an HTTP 500 exception.
OPTIONAL SETTINGS
max_execution_time=##
This directive sets the maximum amount of time that can be taken executing any given script. The default is 30
seconds. Some applications need more time to process batch operations (for example, Gallery2 loading
multiple images from a remote location). However, setting the execution time higher than 300 seconds is not
advised because there are often other parts of the connection that cannot support such a long execution time.
memory_limit=###M
The amount of memory available for the PHP process (in MB). The default is 128 MB, which is appropriate for
most PHP applications.
display_errors=Off
This directive determines whether to include any error messages in the stream that it returns to the Web server.
If turned on, PHP will send the classes of errors that are defined with the error_reporting directive back to IIS
as part of the error stream. Many of the open-source applications bypass error reporting by executing
commands prefaced with @. This allows the applications to control error handling.
Mail functions
PHP is configured by default to send outbound mail through an SMTP server located on the same system as
the Web server. Note that most Windows installations usually have the Web and mail servers on separate
systems.
Note that PHP uses file-based session state by default. You can modify a number of additional session settings, including
whether cookie or URL sessions should be used, and whether sessions are created on the first request or need to be
explicitly created.
13. Test the session state by using Windows Explorer, navigate to C:\inetpub\wwwroot.
14. Create a folder and rename it phpapp.
15. Create session.php in the phpapp directory.
16. Paste the following into it:
<?php
session_start();
$counter = isset($_SESSION['counter']) ? $_SESSION['counter'] : 0;
$counter++;
print "You have visited this page $counter times during this session";
$_SESSION['counter'] = $counter;
?>
17. Save and close the file.
18. Start Internet Explorer, and navigate to http://localhost/phpapp/session.php.
Note: This article uses information from "Using FastCGI to Host PHP Applications on IIS 7.0 and Above" by Ruslan
Yakushev, published on December 5, 2007.