PHP Manual
Prev | Chapter 3. Installation | Next

# Servers-Apache

This section contains notes and hints specific to Apache installs of PHP, both for Unix and Windows versions. We also have instructions and notes for Apache 2 on a separate page.

## Details of installing PHP with Apache on Unix

You can select arguments to add to the configure on line 10 below from the configure options. The version numbers have been omitted here, to ensure the instructions are not incorrect. You will need to replace the 'xxx' here with the correct values from your files.

Example 3-4. Installation Instructions (Apache Shared Module Version) for PHP

    1.  gunzip apache_xxx.tar.gz
    2.  tar -xvf apache_xxx.tar
    3.  gunzip php-xxx.tar.gz
    4.  tar -xvf php-xxx.tar
    5.  cd apache_xxx
    6.  ./configure --prefix=/www --enable-module=so
    7.  make
    8.  make install
    9.  cd ../php-xxx

    10. Now, configure your PHP.  This is where you customize your PHP
        with various options, like which extensions will be enabled.  Do a
        ./configure --help for a list of available options.  In our example
        we'll do a simple configure with Apache 1 and MySQL support.  Your
        path to apxs may differ from our example.

          ./configure --with-mysql --with-apxs=/www/bin/apxs

    11. make
    12. make install

        If you decide to change your configure options after installation,
        you only need to repeat the last three steps. You only need to
        restart apache for the new module to take effect. A recompile of
        Apache is not needed.

        Note that unless told otherwise, 'make install' will also install PEAR,
        various PHP tools such as phpize, install the PHP CLI, and more.

    13. Setup your php.ini file:

          cp php.ini-dist /usr/local/lib/php.ini

        You may edit your .ini file to set PHP options.  If you prefer your
        php.ini in another location, use --with-config-file-path=/some/path in
        step 10.

        If you instead choose php.ini-recommended, be certain to read the list
        of changes within, as they affect how PHP behaves.

    14. Edit your httpd.conf to load the PHP module.  The path on the right hand
        side of the LoadModule statement must point to the path of the PHP
        module on your system.  The make install from above may have already
        added this for you, but be sure to check.

        For PHP 4:

          LoadModule php4_module libexec/libphp4.so

        For PHP 5:

          LoadModule php5_module libexec/libphp5.so

    15. And in the AddModule section of httpd.conf, somewhere under the
        ClearModuleList, add this:

        For PHP 4:

          AddModule mod_php4.c

        For PHP 5:

          AddModule mod_php5.c

    16. Tell Apache to parse certain extensions as PHP.  For example,
        let's have Apache parse the .php extension as PHP.  You could
        have any extension(s) parse as PHP by simply adding more, with
        each separated by a space.  We'll add .phtml to demonstrate.

          AddType application/x-httpd-php .php .phtml

        It's also common to setup the .phps extension to show highlighted PHP
        source, this can be done with:

          AddType application/x-httpd-php-source .phps

    17. Use your normal procedure for starting the Apache server. (You must
        stop and restart the server, not just cause the server to reload by
        using a HUP or USR1 signal.)

Depending on your Apache install and Unix variant, there are many possible ways to stop and restart the server. Below are some typical lines used in restarting the server, for different apache/unix installations. You should replace /path/to/ with the path to these applications on your systems.

Example 3-5. Example commands for restarting Apache

    1. Several Linux and SysV variants:
    /etc/rc.d/init.d/httpd restart

    2. Using apachectl scripts:
    /path/to/apachectl stop
    /path/to/apachectl start

    3. httpdctl and httpsdctl (Using OpenSSL), similar to apachectl:
    /path/to/httpsdctl stop
    /path/to/httpsdctl start

    4. Using mod_ssl, or another SSL server, you may want to manually
    stop and start:
    /path/to/apachectl stop
    /path/to/apachectl startssl

The locations of the apachectl and http(s)dctl binaries often vary. If your system has locate or whereis or which commands, these can assist you in finding your server control programs.

Different examples of compiling PHP for apache are as follows:

    ./configure --with-apxs --with-pgsql

This will create a `libphp4.so` shared library that is loaded into Apache using a LoadModule line in Apache's `httpd.conf` file. The PostgreSQL support is embedded into this `libphp4.so` library.

    ./configure --with-apxs --with-pgsql=shared

This will create a `libphp4.so` shared library for Apache, but it will also create a `pgsql.so` shared library that is loaded into PHP either by using the extension directive in `php.ini` file or by loading it explicitly in a script using the dl() function.

    ./configure --with-apache=/path/to/apache_source --with-pgsql

This will create a `libmodphp4.a` library, a `mod_php4.c` and some accompanying files and copy this into the src/modules/php4 directory in the Apache source tree. Then you compile Apache using --activate-module=src/modules/php4/libphp4.a and the Apache build system will create `libphp4.a` and link it statically into the `httpd` binary. The PostgreSQL support is included directly into this `httpd` binary, so the final result here is a single `httpd` binary that includes all of Apache and all of PHP.

    ./configure --with-apache=/path/to/apache_source --with-pgsql=shared

Same as before, except instead of including PostgreSQL support directly into the final `httpd` you will get a `pgsql.so` shared library that you can load into PHP from either the `php.ini` file or directly using dl().

When choosing to build PHP in different ways, you should consider the advantages and drawbacks of each method. Building as a shared object will mean that you can compile apache separately, and don't have to recompile everything as you add to, or change, PHP. Building PHP into apache (static method) means that PHP will load and run faster. For more information, see the Apache webpage on DSO support.

> Note: Apache's default `httpd.conf` currently ships with a section that looks like this:

>     User nobody
>     Group "#-1"

> Unless you change that to "Group nogroup" or something like that ("Group daemon" is also very common) PHP will not be able to open files.

> Note: Make sure you specify the installed version of apxs when using --with-apxs=/path/to/apxs. You must NOT use the apxs version that is in the apache sources but the one that is actually installed on your system.

## Installing PHP on Windows with Apache 1.3.x

There are two ways to set up PHP to work with Apache 1.3.x on Windows. One is to use the CGI binary (php.exe), the other is to use the Apache module DLL. In either case you need to stop the Apache server, and edit your `httpd.conf` to configure Apache to work with PHP.

It is worth noting here that now the SAPI module has been made more stable under Windows, we recommend it's use above the CGI binary, since it is more transparent and secure.

Although there can be a few variations of configuring PHP under Apache, these are simple enough to be used by the newcomer. Please consult the Apache Docs for further configuration directives.

If you unziped the PHP package to `c:\php\` as described in the Manual Installation Steps section, you need to insert these lines to your Apache configuration file to set up the CGI binary:

- ScriptAlias /php/ "c:/php/"

- AddType application/x-httpd-php .php .phtml

- Action application/x-httpd-php "/php/php.exe"

Note that the second line in the list above can be found in the actual versions of `httpd.conf`, but it is commented out. Remember also to substitute the `c:/php/` for your actual path to PHP.

Warning
By using the CGI setup, your server is open to several possible attacks. Please read our CGI security section to learn how to defend yourself from attacks.

If you would like to use PHP as a module in Apache, be sure to copy `php4ts.dll` to the `windows/system` (for Windows 9x/Me), `winnt/system32` (for Windows NT/2000) or `windows/system32` (for Windows XP) directory, overwriting any older file. Then you should add the following lines to your Apache `httpd.conf` file:

- Open `httpd.conf` with your favorite editor and locate the LoadModule directive and add the following line at the end of the list for PHP 4: LoadModule php4_module "c:/php/sapi/php4apache.dll" or the following for PHP 5: LoadModule php5_module "c:/php/sapi/php5apache.dll"

- You may find after using the Windows installer for Apache that you need to define the AddModule directive for `mod_php4.c`. This is especially important if the ClearModuleList directive is defined, which you will find by scrolling down a few lines. You will see a list of AddModule entries, add the following line at the end of the list: AddModule mod_php4.c For PHP 5, instead use AddModule mod_php5.c

- Search for a phrase similar to # AddType allows you to tweak mime.types. You will see some AddType entries, add the following line at the end of the list: AddType application/x-httpd-php .php. You can choose any extension you want to parse through PHP here. .php is simply the one we suggest. You can even include .html, and .php3 can be added for backwards compatibility.

After changing the configuration file, remember to restart the server, for example, NET STOP APACHE followed by NET START APACHE, if you run Apache as a Windows Service, or use your regular shortcuts.

There are two ways you can use the source code highlighting feature, however their ability to work depends on your installation. If you have configured Apache to use PHP as an SAPI module, then by adding the following line to your `httpd.conf` (at the same place you inserted AddType application/x-httpd-php .php, see above) you can use this feature: AddType application/x-httpd-php-source .phps.

If you chose to configure Apache to use PHP as a CGI binary, you will need to use the show_source() function. To do this simply create a PHP script file and add this code: <?php show_source ("original_php_script.php"); ?>. Substitute original_php_script.php with the name of the file you wish to show the source of.

> Note: On Win-Apache all backslashes in a path statement such as "c:\directory\file.ext", must be converted to forward slashes, as "c:/directory/file.ext".

Prev | Home | Next
Servers-CGI/Commandline | Up | Servers-Apache 2.0