我有一个Vagrant Debian Wheezy运行Apache 2.4.10和PHP 5.6.26我需要安装并运行libapache2-mod-php5,使Apache能够读取.htaccess文件中的php_value。 TL; DR一旦Apache重新启动,错误就会被激发:
$ apachectl -M apache2: Syntax error on line 37 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/php5.load: Cannot load /usr/lib/apache2/modules/libphp5.so into server: /usr/lib/apache2/modules/libphp5.so: undefined symbol: unixd_config Action '-M' failed. The Apache error log may have more information.
这是PHP版本:
$ php -v PHP 5.6.26-1~dotdeb+7.1 (cli) (built: Sep 18 2016 19:52:57) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies with Xdebug v2.5.0-dev, Copyright (c) 2002-2016, by Derick Rethans
这就是Apache的configuration:
$ apache2 -V [Mon Sep 26 23:27:20.618601 2016] [core:warn] [pid 25105] AH00111: Config variable ${APACHE_PID_FILE} is not defined [Mon Sep 26 23:27:20.623081 2016] [core:warn] [pid 25105:tid 139878783203136] AH00111: Config variable ${APACHE_RUN_DIR} is not defined [Mon Sep 26 23:27:20.623438 2016] [core:warn] [pid 25105:tid 139878783203136] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined Server version: Apache/2.4.10 (Debian) Server built: Nov 7 2014 12:05:20 Server's Module Magic Number: 20120211:37 Server loaded: APR 1.5.1-dev, APR-UTIL 1.5.3 Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3 Architecture: 64-bit Server MPM: worker threaded: yes (fixed thread count) forked: yes (variable process count) Server compiled with.... -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=256 -D HTTPD_ROOT="/etc/apache2" -D SUEXEC_BIN="/usr/lib/apache2/suexec" -D DEFAULT_PIDLOG="/var/run/apache2.pid" -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" -D DEFAULT_ERRORLOG="logs/error_log" -D AP_TYPES_CONFIG_FILE="mime.types" -D SERVER_CONFIG_FILE="apache2.conf"
后来我读到libapache2-mod-php5需要使用prefork MPM进行编译 ,所以使用mpm-prefork重新编译:
$ sudo a2dismod worker Module worker disabled. To activate the new configuration, you need to run: service apache2 restart $ sudo a2enmod mpm_prefork Considering conflict mpm_event for mpm_prefork: Considering conflict mpm_worker for mpm_prefork: Module mpm_prefork already enabled $ sudo service apache2 start [ ok ] Starting web server: apache2. $ apache2 -V [Mon Sep 26 23:05:35.463940 2016] [core:warn] [pid 22298] AH00111: Config variable ${APACHE_PID_FILE} is not defined [Mon Sep 26 23:05:35.466868 2016] [core:warn] [pid 22298] AH00111: Config variable ${APACHE_RUN_DIR} is not defined [Mon Sep 26 23:05:35.467139 2016] [core:warn] [pid 22298] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined Server version: Apache/2.4.10 (Debian) Server built: Nov 7 2014 12:05:20 Server's Module Magic Number: 20120211:37 Server loaded: APR 1.5.1-dev, APR-UTIL 1.5.3 Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3 Architecture: 64-bit Server MPM: prefork threaded: no forked: yes (variable process count) Server compiled with.... -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=256 -D HTTPD_ROOT="/etc/apache2" -D SUEXEC_BIN="/usr/lib/apache2/suexec" -D DEFAULT_PIDLOG="/var/run/apache2.pid" -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" -D DEFAULT_ERRORLOG="logs/error_log" -D AP_TYPES_CONFIG_FILE="mime.types" -D SERVER_CONFIG_FILE="apache2.conf" $ sudo apt-get remove libapache2-mod-php5 ... $ sudo apt-get autoclean ... $ sudo apt-get install libapache2-mod-php5 ... $ sudo a2enmod php5 Enabling module php5. To activate the new configuration, you need to run: service apache2 restart $ sudo service apache2 restart [FAIL] Restarting web server: apache2 failed! [warn] The apache2 configtest failed. ... (warning). Output of config test was: apache2: Syntax error on line 37 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/php5.load: Cannot load /usr/lib/apache2/modules/libphp5.so into server: /usr/lib/apache2/modules/libphp5.so: undefined symbol: unixd_config Action 'configtest' failed. The Apache error log may have more information.
但仍然给出了同样的错误。 我不知道我在这里错过了什么。 我真的需要在读取.htaccess文件中的php_value时去掉这些错误。
感谢@ Unbeliever的回答,我发现我使用的是提供php-FPM的puPHPet Vagrant机器,而不是旧的mod_php(这是2015年3月以后发生的)。 后来我发现php-FPM(像其他CGI / FCGI版本的php)可以在user.ini文件中读取php_value ,如https://secure.php.net/manual/en/configuration.file.per- user.php 。 所以把一个php.ini文件放在一个.htaccess文件中是很好的。
未定义的符号意味着你已经安装了一个mod_php软件包,它是针对早期版本的Apache编译的。
你应该能够通过更新libapache2-mod-php5到针对Apache v2.4编译的一个来解决这个问题。
道歉,我不是一个Linux的回购专家,但你可能需要从你有Apache httpd的同一个仓库获取libapache2-mod-php5。