Manual do PHP
Anterior | Capítulo 3. Instalação | Próxima

# Installation on Windows systems

This section applies to Windows 98/Me and Windows NT/2000/XP. PHP will not work on 16 bit platforms such as Windows 3.1 and sometimes we refer to the supported Windows platforms as Win32. Windows 95 is no longer supported as of PHP 4.3.0.

There are two main ways to install PHP for Windows: either manually or by using the InstallShield installer.

If you have Microsoft Visual Studio, you can also build PHP from the original source code.

Once you have PHP installed on your Windows system, you may also want to load various extensions for added functionality.

## Windows InstallShield

The Windows PHP installer is available from the downloads page at http://www.php.net/downloads.php. This installs the CGI version of `PHP` and, for IIS, PWS, and Xitami, configures the web server as well.

> Nota: While the InstallShield installer is an easy way to make `PHP` work, it is restricted in many aspects, as automatic setup of extensions for example is not supported. The whole set of supported extensions is only available by downloading the zip binary distribution.

Install your selected HTTP server on your system and make sure that it works.

Run the executable installer and follow the instructions provided by the installation wizard. Two types of installation are supported - standard, which provides sensible defaults for all the settings it can, and advanced, which asks questions as it goes along.

The installation wizard gathers enough information to set up the `php.ini` file and configure the web server to use PHP. For IIS and also PWS on NT Workstation, a list of all the nodes on the server with script map settings is displayed, and you can choose those nodes to which you wish to add the PHP script mappings.

Once the installation has completed the installer will inform you if you need to restart your system, restart the server, or just start using PHP.

Atenção
Be aware, that this setup of PHP is not secure. If you would like to have a secure PHP setup, you'd better go on the manual way, and set every option carefully. This automatically working setup gives you an instantly working PHP installation, but it is not meant to be used on online servers.

## Manual Installation Steps

This install guide will help you manually install and configure PHP on your Windows webserver. The original version of this guide was compiled by Bob Silva, and can be found at http://www.umesd.k12.or.us/php/win32install.html. You need to download the zip binary distribution from the downloads page at http://www.php.net/downloads.php.

PHP 4 for Windows comes in three flavours - a CGI executable (php.exe), a CLI executable (sapi/php.exe) and some other SAPI modules:

`php4apache.dll` - Apache 1.3.x module
`php4apache2.dll` - Apache 2.0.x module
`php4isapi.dll` - ISAPI Module for ISAPI compliant webservers like IIS 4.0/PWS 4.0 or newer.
`php4nsapi.dll` - Netscape/iPlanet module

The latter form is new to PHP 4, and provides significantly improved performance and some new functionality. The CLI version is designed to use PHP for command line scripting. More information about CLI is available in the chapter about using PHP from the command line

Atenção
The SAPI modules have been significantly improved in the 4.1 release, however, you may find that you encounter possible server errors or other server modules such as ASP failing, in older systems.

> DCOM and MDAC requirements: If you choose one of the SAPI modules and use Windows 95, be sure to download and install the DCOM update from the Microsoft DCOM pages. If you use Microsoft Windows 9x/NT4 download the latest version of the Microsoft Data Access Components (MDAC) for your platform. MDAC is available at http://msdn.microsoft.com/data/.

The following steps should be performed on all installations before any server specific instructions.

- Extract the distribution file to a directory of your choice, `c:\` is a good start. The zip package expands to a foldername like `php-4.3.1-Win32` which is assumed to be renamed to `php`. For the sake of convenience and to be version independent the following steps assume your extracted version of PHP lives in `c:\php`. You might choose any other location but you probably do not want to use a path in which spaces are included (for example: `C:\Program Files\PHP` is not a good idea). Some web servers will crash if you do. The structure of your directory you extracted the zip file will look like:

    c:\php
       |
       +--cli
       |  |
       |  |-php.exe           -- CLI executable - ONLY for commandline scripting
       |
       |
       +--dlls                -- support dlls for extensions --> Windows system directory
       |  |
       |  |-expat.dll
       |  |
       |  |-fdftk.dll
       |  |
       |  |-...
       |
       +--extensions          -- extension dlls for PHP
       |  |
       |  |-php_bz2.dll
       |  |
       |  |-php_cpdf.dll
       |  |
       |  |-..
       |
       +--mibs                -- support files for SNMP
       |
       |
       +--openssl             -- support files for Openssl
       |
       |
       +--pdf-related         -- support files for PDF
       |
       |
       +--sapi                -- SAPI dlls
       |  |
       |  |-php4apache.dll
       |  |
       |  |-php4apache2.dll
       |  |
       |  |-php4isapi.dll
       |  |
       |  |-..
       |
       |-install.txt
       |
       |-..
       |
       |-php.exe              -- CGI executable
       |
       |-..
       |
       |-php.ini-dist
       |
       |-php.ini-recommended
       |
       |-php4ts.dll           -- main dll --> Windows system directory
       |
       |-...

The CGI binary - `c:\php\php.exe` -, the CLI binary - `c:\php\cli\php.exe` -, and the SAPI modules - `c:\php\sapi\*.dll` - rely on the main dll `c:\php\php4ts.dll`. You have to make sure, that this dll can be found by your PHP installation. The search order for this dll is as follows:

The same directory from where `php.exe` is called. In case you use a SAPI module the same directory from where your webserver loads the dll (e.g. `php4apache.dll`).
Any directory in your Windows PATH environment variable.

- The best bet is to make `php4ts.dll` available, regardless which interface (CGI or SAPI module) you plan to use. To do so, you have to copy this dll to a directory on your Windows path. The best place is your Windows system directory:

  `C:\Windows\System` for Windows 9x/ME
  `C:\WINNT\System32` for Windows NT/2000 or `C:\WINNT40\System32` for NT/2000 server
  `C:\Windows\System32` for Windows XP

  If you plan to use a SAPI module from `c:\php\sapi` and do not like to copy dlls to your Windows system directory, you have the alternative choice to simply copy `php4ts.dll` to the sapi folder of your extracted zip package, `c:\php\sapi`.

- The next step is to set up a valid configuration file for PHP, `php.ini`. There are two ini files distributed in the zip file, `php.ini-dist` and `php.ini-recommended`. We advise you to use `php.ini-recommended`, because we optimized the default settings in this file for performance, and security. Read this well documented file carefully and in addition study the ini settings and set every element manually yourself. If you would like to achieve the best security, then this is the way for you, although PHP works fine with these default ini files. Copy your chosen ini-file to a directory where PHP is able to find and rename it to `php.ini`. By default PHP searches `php.ini` in your Windows directory:

  On Windows 9x/ME/XP copy your chosen ini file to your `%WINDIR%`, which is typically `C:\Windows`.
  On Windows NT/2000 copy your chosen ini file to your `%WINDIR%` or `%SYSTEMROOT%`, which is typically `C:\WINNT` or `C:\WINNT40` for NT/2000 servers.

- If you're using NTFS on Windows NT, 2000 or XP, make sure that the user running the webserver has read permissions to your `php.ini` (e.g. make it readable by Everyone).

The following steps are optional.

- Edit your new `php.ini` file. If you plan to use OmniHTTPd, do not follow the next step. Set the doc_root to point to your webservers document_root. For example:

      doc_root = c:\inetpub        // for IIS/PWS

      doc_root = c:\apache\htdocs // for Apache

- Choose which extensions you would like to load when PHP starts. See the section about Windows extensions, about how to set up one, and what is already built in. Note that on a new installation it is advisable to first get PHP working and tested without any extensions before enabling them in `php.ini`.

- On PWS and IIS, you can set the browscap configuration setting to point to: `c:\windows\system\inetsrv\browscap.ini` on Windows 9x/Me, `c:\winnt\system32\inetsrv\browscap.ini` on NT/2000, and `c:\windows\system32\inetsrv\browscap.ini` on XP.

Following this instructions you are done with the basic steps to setup PHP on Windows. The next step is to choose a webserver and enable it to run PHP. Installation instructions for the following webservers are available:

- .. the Windows server family, Personal Web server (PWS) 3 and 4 or newer; Internet Information Server (IIS) 3 and 4 or newer.

- .. the Apache servers Apache 1.3.x, and Apache 2.x.

- .. the Netscape/iPlanet servers.

- .. the OmniHTTPd server.

- .. the Oreilly Website Pro server.

- .. the Sambar server.

- .. the Xitami server.

## Building from source

Before getting started, it is worthwhile answering the question: "Why is building on Windows so hard?" Two reasons come to mind:

1. Windows does not (yet) enjoy a large community of developers who are willing to freely share their source. As a direct result, the necessary investment in infrastructure required to support such development hasn't been made. By and large, what is available has been made possible by the porting of necessary utilities from Unix. Don't be surprised if some of this heritage shows through from time to time.

2. Pretty much all of the instructions that follow are of the "set and forget" variety. So sit back and try follow the instructions below as faithfully as you can.

### Requisitos

To compile and build `PHP` you need a Microsoft Development Environment. Microsoft Visual C++ 6.0 is recommended. To extract the downloaded files you need a extraction utility (e.g.: Winzip). If you don't already have an unzip utility, you can get a free version from InfoZip.

Before you get started, you have to download...

- ..the win32 buildtools from the `PHP` site at http://www.php.net/extra/win32build.zip.

- ..the source code for the DNS name resolver used by `PHP` from http://www.php.net/extra/bindlib_w32.zip. This is a replacement for the `resolv.lib` library included in `win32build.zip`.

- If you plan to compile `PHP` as a Apache module you will also need the Apache sources.

Finally, you are going to need the source to PHP 4 itself. You can get the latest development version using anonymous CVS, a snapshot or the most recent released source tarball.

### Putting it all together

After downloading the required packages you have to extract them in a proper place.

- Create a working directory where all files end up after extracting, e.g: `C:\work`.

- Create the directory `win32build` under your working directory (`C:\work`) and unzip `win32build.zip` into it.

- Create the directory `bindlib_w32` under your working directory (`C:\work`) and unzip `bindlib_w32.zip` into it.

- Extract the downloaded PHP source code into your working directory (`C:\work`).

Following this steps your directory structure looks like this:

    +--c:\work
    |  |
    |  +--bindlib_w32
    |  |  |
    |  |  +--arpa
    |  |  |
    |  |  +--conf
    |  |  |
    |  |  +--...
    |  |
    |  +--php-4.x.x
    |  |  |
    |  |  +--build
    |  |  |
    |  |  +--...
    |  |  |
    |  |  +--win32
    |  |  |
    |  |  +--...
    |  |
    |  +--win32build
    |  |  |
    |  |  +--bin
    |  |  |
    |  |  +--include
    |  |  |
    |  |  +--lib

Create the directories `c:\usr\local\lib`. Copy `bison.simple` from `c:\work\win32build\bin` to `c:\usr\local\lib`.

> Nota: Cygwin users may omit the last step. A properly installed Cygwin environment provides the mandatory files `bison.simple` and `bison.exe`.

### Configure MVC ++

The next step is to configure MVC ++ to prepare for compiling. Launch Microsoft Visual C++, and from the menu select Tools => Options. In the dialog, select the directories tab. Sequentially change the dropdown to Executables, Includes, and Library files. Your entries should look like this:

- Executable files: `c:\work\win32build\bin`, Cygwin users: `cygwin\bin`

- Include files: `c:\work\win32build\include`

- Library files: `c:\work\win32build\lib`

### Build resolv.lib

You must build the `resolv.lib` library. Decide whether you want to have debug symbols available (bindlib - Win32 Debug) or not (bindlib - Win32 Release). Build the appropriate configuration:

- For GUI users, launch VC++, and then select File => Open Workspace, navigate to `c:\work\bindlib_w32` and select `bindlib.dsw`. Then select Build=>Set Active Configuration and select the desired configuration. Finally select Build=>Rebuild All.

- For command line users, make sure that you either have the C++ environment variables registered, or have run vcvars.bat, and then execute one of the following commands:

  - `msdev bindlib.dsp /MAKE "bindlib - Win32 Debug"`

  - `msdev bindlib.dsp /MAKE "bindlib - Win32 Release"`

At this point, you should have a usable `resolv.lib` in either your `c:\work\bindlib_w32\Debug` or `Release` subdirectories. Copy this file into your `c:\work\win32build\lib` directory over the file by the same name found in there.

### Compiling

The best way to get started is to build the CGI version.

- For GUI users, launch VC++, and then select File => Open Workspace and select `c:\work\php-4.x.x\win32\php4ts.dsw` . Then select Build=>Set Active Configuration and select the desired configuration, either `php4ts - Win32 Debug_TS` or `php4ts - Win32 Release_TS`. Finally select Build=>Rebuild All.

- For command line users, make sure that you either have the C++ environment variables registered, or have run vcvars.bat, and then execute one of the following commands from the `c:\work\php-4.x.x\win32` directory:

  - `msdev php4ts.dsp /MAKE "php4ts - Win32 Debug_TS"`

  - `msdev php4ts.dsp /MAKE "php4ts - Win32 Release_TS"`

  - At this point, you should have a usable `php.exe` in either your `c:\work\php-4.x.x.\Debug_TS` or `Release_TS` subdirectories.

It is possible to do minor customization to the build process by editing the `main/config.win32.h` file. For example you can change the default location of `php.ini`, the built-in extensions, and the default location for your extensions.

Next you may want to build the CLI version which is designed to use PHP from the command line. The steps are the same as for building the CGI version, except you have to select the `php4ts_cli - Win32 Debug_TS` or `php4ts_cli - Win32 Release_TS` project file. After a successful compiling run you will find the `php.exe` in either the directory `Release_TS\cli\` or `Debug_TS\cli\`.

> Nota: If you want to use PEAR and the comfortable command line installer, the CLI-SAPI is mandatory. For more information about PEAR and the installer read the documentation at the PEAR website.

In order to build the SAPI module (`php4isapi.dll`) for integrating PHP with Microsoft IIS, set your active configuration to `php4isapi-whatever-config` and build the desired dll.

## Installation of Windows extensions

After installing PHP and a webserver on Windows, you will probably want to install some extensions for added functionality. You can choose which extensions you would like to load when PHP starts by modifying your `php.ini`. You can also load a module dynamically in your script using dl().

The DLLs for PHP extensions are prefixed with 'php_' in PHP 4 (and 'php3_' in PHP 3). This prevents confusion between PHP extensions and their supporting libraries.

> Nota: In PHP 4.3.1 BCMath, Calendar, COM, Ctype, FTP, MySQL, ODBC, Overload, PCRE, Session, Tokenizer, WDDX, XML and Zlib support is built in. You don't need to load any additional extensions in order to use these functions. See your distributions `README.txt` or `install.txt` or this table for a list of built in modules.

The default location `PHP` searches for extensions is `c:\php4\extensions`. To change this setting to reflect your setup of `PHP` edit your `php.ini` file:

- You will need to change the extension_dir setting to point to the directory where your extensions lives, or where you have placed your `php_*.dll` files. Please do not forget the last backslash. For example:

      extension_dir = c:/php/extensions/

- Enable the extension(s) in `php.ini` you want to use by uncommenting the `extension=php_*.dll` lines in `php.ini`. This is done by deleting the leading ; form the extension you want to load.

  Exemplo 3-3. Enable Bzip2 extension for PHP-Windows

      // change the following line from ...
      ;extension=php_bz2.dll

      // ... to
      extension=php_bz2.dll

- Some of the extensions need extra DLLs to work. Couple of them can be found in the distribution package, in the `c:\php\dlls\` folder but some, for example Oracle (`php_oci8.dll`) require DLLs which are not bundled with the distribution package. Copy the bundled DLLs from `c:\php\dlls` folder to your Windows PATH, safe places are:

  c:\windows\system for Windows 9x/Me
  c:\winnt\system32 for Windows NT/2000
  c:\windows\system32 for Windows XP

  If you have them already installed on your system, overwrite them only if something doesn't work correctly (Before overwriting them, it is a good idea to make a backup of them, or move them to another folder - just in case something goes wrong).

> Nota: If you are running a server module version of `PHP` remember to restart your webserver to reflect your changes to `php.ini`.

The following table describes some of the extensions available and required additional dlls.

Tabela 3-1. PHP Extensions

Extension | Description | Notes
--- | --- | ---
php_bz2.dll | bzip2 compression functions | None
php_calendar.dll | Calendar conversion functions | Built in since PHP 4.0.3
php_cpdf.dll | ClibPDF functions | None
php_crack.dll | Crack functions | None
php3_crypt.dll | Crypt functions | unknown
php_ctype.dll | ctype family functions | Built in since PHP 4.3.0
php_curl.dll | CURL, Client URL library functions | Requires: `libeay32.dll`, `ssleay32.dll` (bundled)
php_cybercash.dll | Cybercash payment functions | PHP <= 4.2.0
php_db.dll | DBM functions | Deprecated. Use DBA instead (`php_dba.dll`)
php_dba.dll | DBA: DataBase (dbm-style) Abstraction layer functions | None
php_dbase.dll | dBase functions | None
php3_dbm.dll | Berkeley DB2 library | unknown
php_dbx.dll | dbx functions |
php_domxml.dll | DOM XML functions | PHP <= 4.2.0 requires: `libxml2.dll` (bundled) PHP >= 4.3.0 requires: `iconv.dll` (bundled)
php_dotnet.dll | .NET functions | PHP <= 4.1.1
php_exif.dll | Read EXIF headers from JPEG | None
php_fbsql.dll | FrontBase functions | PHP <= 4.2.0
php_fdf.dll | FDF: Forms Data Format functions. | Requires: `fdftk.dll` (bundled)
php_filepro.dll | filePro functions | Read-only access
php_ftp.dll | FTP functions | Built-in since PHP 4.0.3
php_gd.dll | GD library image functions | Removed in PHP 4.3.2. Also note that truecolor functions are not available in GD1, instead, use `php_gd2.dll`.
php_gd2.dll | GD library image functions | GD2
php_gettext.dll | Gettext functions | PHP <= 4.2.0 requires `gnu_gettext.dll` (bundled), PHP >= 4.2.3 requires `libintl-1.dll`, `iconv.dll` (bundled).
php_hyperwave.dll | HyperWave functions | None
php_iconv.dll | ICONV characterset conversion | Requires: `iconv-1.3.dll` (bundled), PHP >=4.2.1 `iconv.dll`
php_ifx.dll | Informix functions | Requires: Informix libraries
php_iisfunc.dll | IIS management functions | None
php_imap.dll | IMAP POP3 and NNTP functions | PHP 3: `php3_imap4r1.dll`
php_ingres.dll | Ingres II functions | Requires: Ingres II libraries
php_interbase.dll | InterBase functions | Requires: `gds32.dll` (bundled)
php_java.dll | Java functions | PHP <= 4.0.6 requires: `jvm.dll` (bundled)
php_ldap.dll | LDAP functions | PHP <= 4.2.0 requires `libsasl.dll` (bundled), PHP >= 4.3.0 requires `libeay32.dll`, `ssleay32.dll` (bundled)
php_mbstring.dll | Multi-Byte String functions | None
php_mcrypt.dll | Mcrypt Encryption functions | Requires: `libmcrypt.dll`
php_mhash.dll | Mhash functions | PHP >= 4.3.0 requires: `libmhash.dll` (bundled)
php_mime_magic.dll | Mimetype functions | Requires: `magic.mime` (bundled)
php_ming.dll | Ming functions for Flash | None
php_msql.dll | mSQL functions | Requires: `msql.dll` (bundled)
php3_msql1.dll | mSQL 1 client | unknown
php3_msql2.dll | mSQL 2 client | unknown
php_mssql.dll | MSSQL functions | Requires: `ntwdblib.dll` (bundled)
php3_mysql.dll | MySQL functions | Built-in in PHP 4
php3_nsmail.dll | Netscape mail functions | unknown
php3_oci73.dll | Oracle functions | unknown
php_oci8.dll | Oracle 8 functions | Requires: Oracle 8.1+ client libraries
php_openssl.dll | OpenSSL functions | Requires: `libeay32.dll` (bundled)
php_oracle.dll | Oracle functions | Requires: Oracle 7 client libraries
php_overload.dll | Object overloading functions | Built in since PHP 4.3.0
php_pdf.dll | PDF functions | None
php_pgsql.dll | PostgreSQL functions | None
php_printer.dll | Printer functions | None
php_shmop.dll | Shared Memory functions | None
php_snmp.dll | SNMP get and walk functions | NT only!
php_sockets.dll | Socket functions | None
php_sybase_ct.dll | Sybase functions | Requires: Sybase client libraries
php_tokenizer.dll | Tokenizer functions | Built in since PHP 4.3.0
php_w32api.dll | W32api functions | None
php_xmlrpc.dll | XML-RPC functions | PHP >= 4.2.1 requires: `iconv.dll` (bundled)
php_xslt.dll | XSLT functions | PHP <= 4.2.0 requires `sablot.dll`, `expat.dll` (bundled). PHP >= 4.2.1 requires `sablot.dll`, `expat.dll`, `iconv.dll` (bundled).
php_yaz.dll | YAZ functions | Requires: `yaz.dll` (bundled)
php_zib.dll | Zip File functions | Read only access
php_zlib.dll | ZLib compression functions | Built in since PHP 4.3.0

Anterior | Principal | Próxima
Installation on Unix systems | Acima | Servers-CGI/Commandline