我在跑步Apache2在Mac OS X(10.5)。我刚刚编译了PHP 5.2.8并最终开始pdo-mysql
工作(或者我是这么认为的)。
此终端命令:
php --version
正在显示5.2.8并且我已经安装了正确的模块。
phpinfo()
但是,当我做阿帕奇转储出来PHP 5.2.6(我的早期版本,没有pdo_mysql
)。
我如何告诉 Apache 要加载哪个 PHP?其中httpd.conf
有一行:
LoadModule php5_module libexec/apache2/libphp5.so
但我不知道那是什么,也不知道那在哪里。
这就是我要改变的吗?
答案1
我认为所有这些答案都没有真正回答这个问题。可以通过运行命令来确定根级别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"
该输出中的关键行是HTTPD_ROOT
。它定义了 Apache 的ROOT
目录从哪里开始,/etc/httpd
就我而言,就是查找配置文件和模块时。
笔记:这ROOT
与 不同DocumentRoot
。这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
鉴于此,模块的完整路径将是,例如:
/etc/httpd/modules/mod_auth_basic.so
这是来自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
...然后可以httpd
通过此路径访问 Apache 守护进程:
% 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
链接modules
连接/etc/httpd
--> /usr/lib/httpd/modules
。
答案2
您可以使用以下命令在系统上查找文件locate
:
# 定位 libphp5.so
它将打印具有该名称的所有文件的完整路径。我有一个位于/usr/libexec/apache2/libphp5.so
。
答案3
httpd.conf 中加载的模块的父目录(例如:)libexec/apache2/libphp5.so
由指令定义ServerRoot
,默认情况下通常设置为/usr
。我不建议更改它,但对于某些人来说,了解该路径的确切定义位置可能会很有用。
Apache 网站对此进行了如下说明服务器根目录:
其他配置指令(例如 Include 或 LoadModule)中的相对路径被视为相对于该目录。
另外,默认的 httpd.conf 文件注释如下:
ServerRoot:目录树的顶部,保存服务器的配置、错误和日志文件。
答案4
我在一台服务器上安装了 Apache 和 PHP。这是由之前的系统管理员安装的。Apache 和 PHP 都是从源代码编译的。除此之外,还安装了默认的 PHP。因此,要知道 Apache 使用哪个 PHP。我运行以下命令
<Install Dir of PHP>/bin/php -i | grep apxs
这给了我 apache apxs 的路径
APACHE_HOME/bin/apxs
这给了我有关此 php 正在使用哪个 Apache 的信息。当我输入
#php -i | grep apxs
Failed loading opcache.so: opcache.so: cannot open shared object file: No such file or directory PHP Warning: PHP Startup: Unable to load dynamic library '<PHP_HOME>/lib/php/extensions/debug-non-zts-20121212/memcached.so' - <PHP_HOME>/lib/php/extensions/debug-non-zts-20121212/memcached.so: undefined symbol: OnUpdateLongGEZero in Unknown on line 0
因此,通过这种方式,我就能弄清楚 Apache 使用的 php。