我如何告诉 Apache 使用哪个 PHP?

Sam*_*fee 38 php pdo apache-2.2

我在Mac OS X (10.5)上运行Apache2。我刚刚编译了PHP 5.2.8并最终开始工作(或者我认为是这样)。pdo-mysql

此终端命令:

php --version
Run Code Online (Sandbox Code Playgroud)

显示5.2.8并且我安装了正确的模块。

但是,当我执行 a 时phpinfo()Apache 会转储PHP 5.2.6(我的早期版本,没有pdo_mysql)。

我如何告诉 Apache 加载哪个 PHP?在httpd.conf有一行:

LoadModule php5_module        libexec/apache2/libphp5.so
Run Code Online (Sandbox Code Playgroud)

但是,我不知道那是什么或在哪里。

这是我必须改变的吗?

slm*_*slm 16

我认为所有这些答案都没有真正回答这个问题。可以通过运行命令来确定根级别httpd -V。这将向您显示 Apache 守护程序在编译时使用的选项。这就是控制在哪里httpd确定在哪里寻找它的配置。默认为文件和 .so 模块。

例如:

% 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"
Run Code Online (Sandbox Code Playgroud)

该输出中的关键行是HTTPD_ROOT. ROOT/etc/httpd我而言,这定义了 Apache目录在查找 config 时的起始位置。文件和模块。

注意:ROOTDocumentRoot. 这ROOT特定于httpd守护程序的编译方式,DocumentRoot用于指定httpd守护程序应从何处开始查找实际 Web 内容(.html 文件等)。

对于我的httpd.conf文件,我有以下加载行:

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
Run Code Online (Sandbox Code Playgroud)

鉴于此,您的模块的完整路径将是,例如:

/etc/httpd/modules/mod_auth_basic.so
Run Code Online (Sandbox Code Playgroud)

这是来自CentOS 5.x系统,但该技术仍然适用。

顺便说一句,它可能会让人有点困惑,因为在CentOS 的情况下,文件是按物理方式组织在这里的:

% ls /usr/lib/httpd/modules/
libphp5.so            mod_authnz_ldap.so      mod_dav_fs.so      mod_headers.so       mod_perl.so            mod_speling.so
Run Code Online (Sandbox Code Playgroud)

...然后 Apache 守护进程可以httpd通过以下路径访问:

% 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
Run Code Online (Sandbox Code Playgroud)

modules链接连接/etc/httpd- > /usr/lib/httpd/modules