我在Mac OS X(10.5)上运行Apache2 。 我刚编译PHP 5.2.8 ,最后得到了pdo-mysql工作(或者我认为)。
这个terminal命令:
php --version
显示5.2.8 ,我已经安装了正确的模块。
但是,当我做一个phpinfo() , Apache转储PHP 5.2.6 (我的早期版本,没有pdo_mysql )。
我如何告诉Apache要加载哪个PHP? httpd.conf有这样一行:
LoadModule php5_module libexec/apache2/libphp5.so
但是,我不知道那是什么或者在哪里。
这是我必须改变的吗?
我想所有这些答案都没有真正回答这个问题。 根级可以通过运行命令httpd -V来确定。 这将向您展示Apache守护进程在编译时build立的选项。 这是控制httpd决定在哪里查找它的configuration的地方。 文件和.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
鉴于此,您的模块的完整path将是,例如:
/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
…然后通过这个path访问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
modules链接连接/etc/httpd – > /usr/lib/httpd/modules 。
您可以使用locate命令在您的系统上find文件:
#findlibphp5.so
它将打印具有该名称的所有文件的完整path。 我有一个在/usr/libexec/apache2/libphp5.so 。
加载到httpd.conf中的模块的父目录(例如: libexec/apache2/libphp5.so )由ServerRoot指令定义,默认情况下通常设置为/usr 。 我不build议改变这个,但是对于某个人来说,确切地知道path的确切位置可能是有用的。
Apache的网站上说下面关于ServerRoot :
其他configuration指令(例如Include或LoadModule)中的相对path取决于此目录。
另外默认的httpd.conf文件注释如下:
ServerRoot:保存服务器configuration,错误和日志文件的目录树顶部。
Apache应该在“/ usr / libexec / httpd /”中寻找模块。 在那里你会发现一个名为“libphp5.so”的文件或符号链接。 如果是符号链接,则需要重新链接到新的5.2.8 libphp5.so,否则只需将5.2.8 libphp5.so复制到“/ usr / libexec / httpd /”,然后使用“sudo apachectl restart”重新启动apache。 。
我在一台服务器上安装了Apache和PHP。 这是由以前的系统pipe理员安装的。 Apache和PHP都是从源代码编译的。 除此之外,还安装了默认的PHP。 所以要知道Apache使用哪个PHP。 我运行下面的命令
<Install Dir of PHP>/bin/php -i | grep apxs
这给了我apache apxs的path
APACHE_HOME/bin/apxs
这给了我这个PHP使用哪个Apache的信息。 当我input时,默认的php给出了错误
#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。