Apache 2.x on Unix systems

This section contains notes and hints specific to Apache 2.x installs
of PHP on Unix systems.

Warning

We do not recommend using a
threaded MPM in production with Apache 2. Use the prefork MPM, which is
the default MPM with Apache 2.0 and 2.2.
For information on why, read the related FAQ entry on using
Apache2 with a threaded MPM

The » Apache Documentation
is the most authoritative source of information on the Apache 2.x server.
More information about installation options for Apache may be found
there.

The most recent version of Apache HTTP Server may be obtained from
» Apache download site,
and a fitting PHP version from the above mentioned places.
This quick guide covers only the basics to get started with Apache 2.x
and PHP. For more information read the
» Apache Documentation.
The version numbers have been omitted here, to ensure the
instructions are not incorrect. In the examples below, 'NN' should be
replaced with the specific version of Apache being used.

There are currently two versions of Apache 2.x - there's 2.0 and 2.2.
While there are various reasons for choosing each, 2.2 is the current
latest version, and the one that is recommended, if that option is
available to you. However, the instructions here will work for either
2.0 or 2.2.

Obtain the Apache HTTP server from the location listed above,
and unpack it:

gzip -d httpd-2_x_NN.tar.gz
tar -xf httpd-2_x_NN.tar

Likewise, obtain and unpack the PHP source:

gunzip php-NN.tar.gz
tar -xf php-NN.tar

Build and install Apache. Consult the Apache install documentation for
more details on building Apache.

cd httpd-2_x_NN
./configure --enable-so
make
make install

Now you have Apache 2.x.NN available under /usr/local/apache2,
configured with loadable module support and the standard MPM prefork.
To test the installation use your normal procedure for starting
the Apache server, e.g.:

/usr/local/apache2/bin/apachectl start

and stop the server to go on with the configuration for PHP:

/usr/local/apache2/bin/apachectl stop

Now, configure and build PHP. This is where you customize PHP
with various options, like which extensions will be enabled. Run
./configure --help for a list of available options. In our example
we'll do a simple configure with Apache 2 and MySQL support.

If you built Apache from source, as described above, the below example will
match your path for apxs, but if you installed Apache some other way, you'll
need to adjust the path to apxs accordingly. Note that some distros may rename
apxs to apxs2.

If you decide to change your configure options after installation,
you'll need to re-run the configure, make, and make install 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.

Setup your php.ini

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

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

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

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 7:

LoadModule php7_module modules/libphp7.so

For PHP 5:

LoadModule php5_module modules/libphp5.so

Tell Apache to parse certain extensions as PHP. For example, let's have
Apache parse .php files as PHP. Instead of only using the Apache AddType
directive, we want to avoid potentially dangerous uploads and created
files such as exploit.php.jpg from being executed as PHP. Using this
example, you could have any extension(s) parse as PHP by simply adding
them. We'll add .php to demonstrate.

<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>

Or, if we wanted to allow .php, .php2, .php3, .php4, .php5, .php6, and
.phtml files to be executed as PHP, but nothing else, we'd use this:

The php source filter should not be enabled on production systems, where
it may expose confidential or otherwise sensitive information embedded in
source code.

Use your normal procedure for starting the Apache server, e.g.:

/usr/local/apache2/bin/apachectl start

OR

service httpd restart

Following the steps above you will have a running Apache2 web server with
support for PHP as a SAPI module. Of course there are
many more configuration options available Apache and PHP. For more
information type ./configure --help in the corresponding
source tree.

Apache may be built multithreaded by selecting the
worker MPM, rather than the standard
prefork MPM, when Apache is built. This is done by
adding the following option to the argument passed to ./configure, in
step 3 above:

--with-mpm=worker

This should not be undertaken without being aware of the consequences of
this decision, and having at least a fair understanding of
the implications. The Apache documentation
regarding » MPM-Modules
discusses MPMs in a great deal more detail.

To build a multithreaded version of Apache, the target system must support threads.
In this case, PHP should also be built with experimental
Zend Thread Safety (ZTS). Under this configuration, not all extensions will be available.
The recommended setup is to build Apache with the default
prefork MPM-Module.

Another interesting point with Apache 2.2 is following.
Let suppose we installed PHP as module. But for some directory, we need to use PHP as CGI (probably because of custom configuration). This can be done using:

Hi too had same problem with multiview like when i execute http://huey/admin/test.php it used to compile but when i use http://huey/admin/test it wouldnt recognise it as php file... i worked it out with the addhandler method and AddType in different line and setting multiview for directive

"multiviews Options Indexes FollowSymLinks MultiViews"

the directives u can set it to root directory so now when u type pn test it will search in precendence for test.php, test.html if any .....

I discovered that there was an issue caused by redhat loading php4 in another file seperate from the httpd.conf file! This took me hours to discover. Make sure you know if the apache config file (httpd.conf) is loading configurations from a directory (or another file(s)) as well. If so, look in there for any php module loading which could conflict with the new module you are compiling/installing.

On Mac OS X 10.12.5 (Sierra) with Apache 2.4.27 it appears that the configure command for apache needs to include the following (in addition to --enable-so):

--enable-isapi

As of this writing the documentation on this page says "There are currently two versions of Apache 2.x - there's 2.0 and 2.2" so perhaps the documentation needs updating for 2.4, unless --enable-isapi is a Mac-specific requirement.

On 64-bit Fedora systems (I'm using Fedora 14), configuring PHP to use the MySQL libraries installed as part of the distribution gives the following error if you follow the default instructions in this manual.

I've (painfully) discovered that installing PHP5 with "make install" under SuSe 9.2 is NOT a good idea.http://www.aditus.nu/jpgraph/apache2suse.phpThis page explains how to install it without breaking everything that's php-related in the Apache2 configuration. Its first purpose, though, is to show how to have php 4 and 5 to cohabit properly.

I have successfully installed Apache 2.2.11 and PHP 5.2.8 under Red Hat 9.0 on a Pentium 166 with 32 MB of RAM.

While I used RH9, the worst possible case, these notes are probably good for RH-based distributions too (Red Hat Enterprise, Fedora, CentOS...)

If you want to install MySQL, it needs to be installed before PHP because PHP requires some libraries be available.

One think important when picking up a binary distribution of MySQL is to download all four packages: MySQL-server, MySQL-devel, MySQL-client and MySQL-shared. Note: The MySQL was bundled with PHP 4 but is not anymore in PHP 5.

Then you need to install Apache before PHP, because again PHP needs some libraries be available. I installed Apache 2 from source, using the very last version available, which is 2.2.11.

I installed PHP 5.2.8 from source. Here, I had a number of problems, but none which I could not resolve easily, some of them with a little help from different forums I found through Google.

Rembember: When it says you need a package named xyz and you notice there is also one named xyz-devel, grab it.

You already have glibc and glibc-common installed, but you need to get glibc-devel and glibc-kernheaders. Make sure to match glibc's version (rpm -q glibc). Note: When it says kernel-header is a required dependency, that's glibc-kernheader (not kernel-source). You will also need binutils (no need to match the version), and gcc and cpp (version must match).

You need zlib-devel (zlib is probably already installed, match the version you have).

If you install the GD extension, the actual library is already bundled with PHP 5 (use that one, they have done some changes in there, so don't upgrade), but you will need to install libpng and libpng-devel (match version, or disable in configure if you don't want) and libjpeg (no -devel with that one).

You will also need libxml2. Now there were a problem, because PHP requires libxml2 be 2.6 or greater, but Red Hat only supplied 2.5.4-1 for RH9 (if you have a more recent distro, you might be more lucky). After looking for a while, I decided to grab the source code for the most recent distribution at the official website (http://xmlsoft.org/) and compiled.

Hope my post is useful to someone. Please, share your experience when compiling/installing for your particular platform and setup. Remember how hard it's been for you the very first time. I confess, my very first server installation took me nearly a week and I was glad others helped me.

Using Apache2 & PHP5 work perfectly fine & safe together.- all core modules are safe in Zend Engine 2- third-party-libraries should be avoided- semaphores and shared memory enables you to ensure yourself that your application/website is thread-safe also with non-thread-safe PHP modules!

At this point only the PHP SAPI library has been copied into place; the rest of the files (like PEAR scripts, PHP-CLI, etc) have not been installed. But never fear! You can overcome this problem with the following steps:

" if you want to use both the old mysql and the new mysqli interface, load the Makefile into your editor and search for the line beginning with EXTRA_LIBS; it includes -lmysqlclient twice; remove the second instance"

then you can:

makemake install

.....Pleasse note: you must have mysql-dev installed (RPM or source) or you will not have the mysql_config file at all. The standard, server, and client installations of MySQL do not include it. I read somewhere that the mysql and mysqli paths must be identical.

For the SuSE9.2 install of PHP5.First:If building on a x64 platform, please set LDFLAGS="-L/usr/lib64" before configure.As for install, it suffices to go to /etc/apache2 and:ln -s sysconfig.d/loadmodule.conf httpd2-prefork.confand then make install