|
|
 |
Chapter 4. Installation on Unix systems
This section will guide you through the general configuration and
installation of PHP on Unix systems. Be sure to investigate any
sections specific to your platform or web server before you begin
the process.
As our manual outlines in the General
Installation Considerations section, we are mainly dealing with
web centric setups of PHP in this section, although we will cover
setting up PHP for command line usage as well.
There are several ways to install PHP for the Unix platform, either
with a compile and configure process, or through various
pre-packaged methods. This documentation is mainly focused around
the process of compiling and configuring PHP. Many Unix like systems
have some sort of package installation system. This can assist in
setting up a standard configuration, but if you need to have a
different set of features (such as a secure server, or a different
database driver), you may need to build PHP and/or your webserver.
If you are unfamiliar with building and compiling your own software,
it is worth checking to see whether somebody has already built a
packaged version of PHP with the features you need.
Prerequisite knowledge and software for compiling:
Basic Unix skills (being able to operate "make" and a C
compiler)
An ANSI C compiler
flex: Version 2.5.4
bison: Version 1.28 (preferred), 1.35, or 1.75
A web server
Any module specific components (such as gd, pdf libs, etc.)
The initial PHP setup and configuration process is controlled by the
use of the commandline options of the configure
script. You could get a list of all available options along with short
explanations running ./configure --help.
Our manual documents the different options separately. You will
find the core options in the appendix,
while the different extension specific options are descibed on the
reference pages.
When PHP is configured, you are ready to build the module and/or
executables. The command make should
take care of this. If it fails and you can't figure out why, see
the Problems section.
This section contains notes and hints specific to Apache installs
of PHP on Unix platforms. We also have instructions and notes for Apache 2
on a separate page.
You can select arguments to add to the
configure on line 10 below from the list of core configure options and
from extension specific options described at the respective
places in the manual. 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 4-1.
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.) |
|
Alternatively, to install PHP as a static object:
Example 4-2.
Installation Instructions (Static Module Installation for Apache) for PHP
1. gunzip -c apache_1.3.x.tar.gz | tar xf -
2. cd apache_1.3.x
3. ./configure
4. cd ..
5. gunzip -c php-4.x.y.tar.gz | tar xf -
6. cd php-4.x.y
7. ./configure --with-mysql --with-apache=../apache_1.3.x
8. make
9. make install
10. cd ../apache_1.3.x
11. ./configure --prefix=/www --activate-module=src/modules/php4/libphp4.a
(The above line is correct! Yes, we know libphp4.a does not exist at this
stage. It isn't supposed to. It will be created.)
12. make
(you should now have an httpd binary which you can copy to your Apache bin dir if
it is your first install then you need to "make install" as well)
13. cd ../php-4.x.y
14. cp php.ini-dist /usr/local/lib/php.ini
15. You can edit /usr/local/lib/php.ini file to set PHP options.
Edit your httpd.conf or srm.conf file and add:
AddType application/x-httpd-php .php |
|
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 4-3. 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:
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.
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.
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.
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:
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.
User Contributed Notes
Installation on Unix systems
aznblood [at] toanpham dot com
16-Apr-2005 12:34
phptard at gmail dot com
23-Mar-2005 07:17
after a long night of wrestling with mysql4.0 under linux compiled with the intel compiler, i've gotten php5.0.3 to compile with mysql libraries for this flavor of mysql:
1: download the mysql for linux/intel compiler and install
2: download the rpm for the intel compiler libraries and install
3: configure php with LDFLAGS="-lirc -lgcc_s" and EXTRA_LIBS="-lirc -lgcc_s"
Example:
LDFLAGS="-lirc -lgcc_s" LD_LIBRARY_PATH="-L/usr/lib64" LD_PATH="-L/usr/lib64" LDPATH="-L/usr/lib64" EXTRA_LIBS="-lirc -lgcc_s" ./configure --with-apxs2=/usr/local/apache/bin/apxs --with-ssl=/usr/local/ssl --without-sqlite --with-zlib-dir=/usr --with-mysql=/usr/local/mysql
of course this is on a xeon system that has half of its modules in the /usr/lib64 directory, so on a normal system, without the other kruft, it would look something more like this:
LDFLAGS="-lirc -lgcc_s" EXTRA_LIBS="-lirc -lgcc_s" ./configure --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql
Hopefully this will save someone the 6 hour headache it caused me..
Radek Huln
04-Feb-2005 01:25
I've updated my "How To Compile" to include PHP 5.0.3, MySQL 4.1.9 and/or MySQL 4.0.23, Apache 2.0.52 with SSL, nuSphere debugger, PHPEclipse, phpMyADmin, and many others.
It was fully tested under SUSE 9.1, SUSE 9.2 and Fedora Core 3.
http://hulan.cz/blog/?itemid=576
diemuzi at gmail dot com
13-Jan-2005 01:11
In reference to van [at] webfreshener [dot] com to fix the krb5 problems. An easier fix is to do the following:
ln -s /usr/kerberos/include/krb5.h /usr/include/krb5.h
ln -s /usr/kerberos/include/profile.h /usr/include/profile.h
ln -s /usr/kerberos/include/com_err.h /usr/include/com_err.h
This will help solve some deps. in the future incase a situation with another compilation occurs.
alexander justadot henry at acm dot org
22-Dec-2004 03:48
The system at my workplace has a need for apache/php with all static compilation. In order to save time adminning our systems, I decided to make my own RPM of php/apache with mod_ssl support. I had always installed by hand with the instructions on this page, but when buiding the RPM way, came upon the following error when apache was compiling:
===> src/modules/php4
make[4]: *** No rule to make target `all'. Stop.
Ordinarily this is because one did not do a 'make install' in php before the second apache configure, or somehow the make install failed. But the way rpm's work, the make install must be in the %install portion of the spec file, after all makes are completed.
make install-sapi
This line will copy relevant files to the directory specified in --with-apache
info at hulan dot info
28-Sep-2004 10:49
Installation of PHP 5.0.2, Apache 2.0.51 and MySQL 4.0:
http://hulan.info/blog/index.php?itemid=576
PHP 5.0.2 will be compiled with support for: bz2, cpdflib, ctype, curllib, dom, ftp, gd2, freetype2, gettext, libiconv, libxml, mbstring, mysql, openssl, pcre, posix, session, SimpleXML, SPL, SQLite, tokenizer, xml, and zlib.
Apache 2.0.51 will be compiled with support for mod_access, mod_auth, mod_auth_digest, mod_deflate, mod_env, mod_headers, mod_setenvif, mod_ssl, mod_mime, mod_imap, mod_alias and mod_rewrite.
samael99 at web dot de
24-Jun-2004 09:51
Quick hint for people using RH8:
if make gives you this error
FT_ENCODING_MS_SYMBOL undeclared
change on line in this file
/usr/include/freetype2/freetype/freetype.h
Search for ft_encoding_symbol - change it to
ft_encoding_ms_symbol
Now this problem is dealt with, go ahead with make.
Good Luck !
robert_sgi at yahoo dot com
08-May-2004 02:57
If you install php 4 on SGI IRIX 6.5 (in my case it was php 4.3.6 on Silicon Graphics O2 IRIX 6.5.22 machine) and you're building it with:
--with-gettext=/usr/freeware
then you need to manually edit the file named "configure" (from the php source directory) and change the line# 36739
from:
GETTEXT_LIBDIR=$GETTEXT_DIR/lib
to:
GETTEXT_LIBDIR=$GETTEXT_DIR/lib32
If you have problems in locating the line, search the text for "bindtextdomain", and look several (4) lines above.
karthik (dot) k (at) extremix (dot) net
18-Jan-2004 11:28
This is regarding the post down below about the problem with openssl on RH9. Openssl on RH9 is built with kerberos. To get PHP to build correctly you need the output of these commands when you make.
[root@graf-spee local]# pkg-config --cflags openssl
-I/usr/kerberos/include
[root@graf-spee local]# pkg-config --libs openssl
-L/usr/kerberos/lib -lssl -lcrypto -lresolv -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -ldl -lz
These could be added to your make command thus. I have not tested it out, but should work with some tweaking
make EXTRA_LDFLAGS=`pkg-config --libs openssl` EXTRA_CFLAGS=`pkg-config --cflags openssl`
thansen at terra dot com dot br
30-Dec-2003 11:36
The configure directives --with-apxs2 and --with-apxs2filter are not compatible one with other, even though the configure script will not complain about that. Each one affect the way Apache will call the php parser: If you choose the first one, you must use the traditional include:
AddType application/x-httpd-php php
at httpd.conf, to call the parser. If you use the --with-apxs2filter, the include will be:
<Files *.php>
SetOutputFilter PHP
SetInputFilter PHP
</Files>
, and php will be called as a filter to .php files.
If you use both together, you will get compilation errors (duplicate symbols while linking libphp4).
aaronmorris at mindspring dot com
05-Dec-2003 03:47
If you have the libphp4.a instead of libphp4.so on AIX, you can extract the .so file from the .a file by running "ar -x libphp4.a".
jmruiz at esprov dot net
21-Oct-2003 10:55
The following is a modified version of Doc Nielsen's script. The issue I had was that $prefix needed to be different for the "php" and the "thttpd" parts. So it had to be set twice. The first value is the base directory were you want the "php directory installed, in my case "/usr". The second has to be the DocumentRoot of you http server, in my case "/var/www". There is something else to pay attention to. If you are going to use mysql for other modules not included in the released source, you must use the directive --with-mysql (see last parameter of the first config). Good luck.
#!/bin/sh
echo ********************************************
echo ** extracting and installing - php part **
echo ********************************************
prefix="/usr"
mysql_dir="/usr/local/mysql"
tar jxf php-4.3.3.tar.bz2
tar zxf thttpd-2.21b.tar.gz
cd php-4.3.3
./configure --prefix=$prefix --with-thttpd=../thttpd-2.21b --with-config-file-path=$prefix/lib/php --with-zlib --with-bz2 --with-gd --with-ttf --with-mysql --with-mysql-sock=/var/run/mysqld/mysqld.sock --disable-rpath --disable-ipv6 --enable-static --enable-roxen-zts --enable-track-vars --enable-force-cgi-redirect --with-gettext --with-mysql=$mysql_dir
make all install
echo ********************************************
echo ** extracting and installing - thttpd part**
echo ********************************************
cd ../thttpd-2.21b/
prefix="/var/www"
./configure --prefix=$prefix
make all install
jan dot mentzel at raumcomputer dot com
19-Jul-2003 08:01
PHP-5.0.0b1 and MySQL on SuSE
Since in this PHP-release mysql-client stuff is not included you have to use your own mysql-client header- and .so-files.
configure expects the mysql-client-files to be in an include and a lib subdirectory inside one common directory:
...
+- mysql
+- include
| +- mysql.h
| ...
+- lib
+- libmysqlclient.so
...
But on SuSE8.0 - maybe other Linux-distros too - the mysql-include and mysql-lib directories are installed like this:
usr
+- include
| +- mysql
| +- mysql.h
| ...
+- lib
+- mysql
+- libmysqlclient.so
...
Efect/Problem:
./configure --with-mysql=/usr/lib/mysql ...
or
./configure --with-mysql=/usr/include/mysql ...
ends with an error:
checking for MSSQL support via FreeTDS... no
checking for MySQL support... yes
checking for specified location of the MySQL UNIX socket... no
checking for MySQL UNIX socket location... no
checking for mysql_close in -lmysqlclient... no
checking for mysql_error in -lmysqlclient... no
configure: error: mysql configure failed. Please check config.log for more information.
Solution:
Create a directory "mysql" e.g. in /usr/local/lib
mkdir /usr/local/lib/mysql
and create symlinks "include" and "lib" pointing to the original directories (here /usr/include/mysql and /usr/lib/mysql)
cd /usr/local/lib/mysql
ln -s /usr/include/mysql include
ln -s /usr/lib/mysql lib
Now, go back to where you extracted the PHP-source and call configure again, telling it to search in /usr/local/lib/mysql for the mysql-client stuff.
./configure --with-mysql=/usr/local/lib/mysql ...
Now the mysql-extension should compile.
van [at] webfreshener [dot] com
03-May-2003 06:43
I think it's worth mentioning here that RedHat 9 has issues with OpenSSL/Kerberos support which will cause your compile to fail.
The symptom of this issue is the failure of kssl.h to include krb5.h:
/usr/include/openssl/kssl.h:72:18: krb5.h: No such file or directory
You'll then get a litany of syntax errors the start as follows:
/usr/include/openssl/kssl.h:132: parse error before "krb5_enctype"
/usr/include/openssl/kssl.h:134: parse error before "FAR"
...
Future versions of PHP should address this issue but as of =< 4.3.1 you need to do as follows:
$ export CPPFLAGS=-I/usr/kerberos/include
then run your configure command
$ ./configure ...
Hope this helps those upgrading to RH9.
jazee_at_bigfoot.com
26-Mar-2003 03:52
doug at NOSPAM dot techie dot net
04-Feb-2003 08:16
Users compiling under some versions of Solaris/SunOS may encounter the following error.
symbol ap_block_alarms: referenced symbol not found
To address this problem, add the following additional flag to the Apache build configure line:
--enable-rule=SHARED_CORE
So, adding this to the original instructions, you'd configure your Apache build like so:
./configure --prefix=/www --enable-module=so --enable-rule=SHARED_CORE
Doug
mbabcock-php at fibrespeed dot net
21-Jul-2001 12:32
dimaberastau at hotmail dot com
10-Jun-2001 12:33
when installing with mysql support (--with-mysql=<path/to/your/mysql>) via Apache APXS you'll probably get something like 'can't load libmysqlclient.so' when you try to start up apache. There are 2 solutions to this problem. First, (as documented in INSTALL file of the php4 distribution) you can modify /etc/ld.so.conf to contain the directory name where libmysqlclient.so is (so if your mysql is installed in /usr/local, you want to add something like /usr/local/lib/mysql into /etc/ld.so.conf), else (and particularly if you haven't got the super-user on the system) you can modify (or create if it isn't defined already) LD_LIBRARY_PATH shell variable to reflect the changes you would have otherwise made to /etc/ld.so.conf (again if mysql is /usr/local LD_LIBRARY_PATH=/usr/local/lib/mysql). Either one of these methods will get the problem sorted. Just remember to run ldconfig (so that /etc/ld.so.cache is updated) if you chose to modify /etc/ld.so.conf
marshalm at ebrd dot com
17-May-2001 01:43
HP-UX 11.X PA-RISC installation with oracle (oci8). You need to install the HP-UX patch PHSS_22514 patch (updated libdld.sl), otherwise you will get errors with dlopen() and dlclose() not found during the apache integration stage.
philip at c()rnad() dot c()m
25-Mar-2001 07:22
| |