How do I tell Apache which PHP to use?
Solution 1:
I think all these answers aren't really answering the question. The root level can be determined by running the command httpd -V
. This will show you what options the Apache daemon was built with at compile time. This is what controls where httpd
determines where to look for it's config. files and .so modules by default.
For example:
% httpd -V
Server version: Apache/2.2.17 (Unix)
Server built: Dec 17 2010 11:58:24
Server's Module Magic Number: 20051115:25
Server loaded: APR 1.3.12, APR-Util 1.3.9
Compiled using: APR 1.3.12, APR-Util 1.3.9
Architecture: 32-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
The key line in that output is the HTTPD_ROOT
. That defines where Apache's ROOT
directory is to start, /etc/httpd
in my case, when looking for config. files and modules.
NOTE: This ROOT
is not the same thing as DocumentRoot
. This ROOT
is specific to how the httpd
daemon was compiled, the DocumentRoot
is for specifying where the httpd
daemon should start looking for actual web content (.html files and such).
For my httpd.conf
file I have the following Load lines:
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
Given this the full path to your modules would be, for example:
/etc/httpd/modules/mod_auth_basic.so
This is from a CentOS 5.x system but the technique is still apt.
BTW, it can get a little confusing because in CentOS' case the files are organized physically here:
% ls /usr/lib/httpd/modules/
libphp5.so mod_authnz_ldap.so mod_dav_fs.so mod_headers.so mod_perl.so mod_speling.so
...and then accessible to the Apache daemon, httpd
, through this path:
% ls -l /etc/httpd/
total 12
drwxr-xr-x 2 root root 4096 Apr 26 2011 conf
drwxr-xr-x 3 root root 4096 Apr 26 2011 conf.d
-rw-r--r-- 1 root root 18 Feb 24 2009 htpasswd
lrwxrwxrwx 1 root root 19 Apr 26 2011 logs -> ../../var/log/httpd
lrwxrwxrwx 1 root root 27 Apr 26 2011 modules -> ../../usr/lib/httpd/modules
lrwxrwxrwx 1 root root 13 Apr 26 2011 run -> ../../var/run
The modules
link connects /etc/httpd
--> /usr/lib/httpd/modules
.
Solution 2:
You can find files on your system with the locate
command:
# locate libphp5.so
It will print the full paths of all files with that name. I have one at /usr/libexec/apache2/libphp5.so
.
Solution 3:
The parent directory of modules loaded in httpd.conf (such as: libexec/apache2/libphp5.so
) is defined by the ServerRoot
directive which by default is typically set to /usr
. I wouldn't recommend changing this but it may be useful for someone to know just where exactly that path is defined.
Apache's website says the following about ServerRoot:
Relative paths in other configuration directives (such as Include or LoadModule, for example) are taken as relative to this directory.
additionally the default httpd.conf file comments read:
ServerRoot: The top of the directory tree under which the server's configuration, error, and log files are kept.
Solution 4:
Apache should be looking for modules in "/usr/libexec/httpd/". In there you'll find either a file or symlink called "libphp5.so". If it's a symlink, you'll need to relink to the new 5.2.8 libphp5.so, otherwise just copy the 5.2.8 libphp5.so to "/usr/libexec/httpd/" and restart apache with "sudo apachectl restart".