PHP 5.3.1 未定义符号:Apache 启动时出现 OnUpdateLong 错误

PHP 5.3.1 未定义符号:Apache 启动时出现 OnUpdateLong 错误

我在这台服务器上运行的是 Ubuntu 8.04。我通过包管理器安装了 PHP 5.2。我删除了它,然后手动安装 PHP 5.3.1。我像这样构建了包

./configure --prefix=/opt/php --with-mysql --with-curl=/usr/bin --with-apxs2=/usr/bin/apxs2
make
make install

这在 /opt/php/ 中安装了 PHP 5.3.1

$ php -v
PHP 5.3.1 (cli) (built: Dec  7 2009 10:51:14) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies

但是,当我尝试启动 Apache 时出现了这个问题。

 # /etc/init.d/apache2 restart
 * Restarting web server apache2       
  apache2: Syntax error on line 185 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: OnUpdateLong
                                                                     [fail]

知道是什么导致了这个错误吗?我看到的所有参考资料都与为 php4 或类似程序构建 php5 包有关。这台机器上从未安装过 PHP4。

答案1

事实上,詹姆斯哈克特 (James Hackett) 所说的内容对我而言或多或少是有用的。

我的问题是我构建了 PHP我安装了 Apache(我从最新的主干构建了 PHP 并通过 APT 安装了 Apache2)。

因此,当我遇到 apache 遇到未定义符号的错误(未找到的模块是任意的)时,我执行了以下操作:

  1. make distclean在 php 源代码上
  2. ./configure --prefix=/usr/local/php-5.3-svn --with-apxs2=/usr/bin/apxs2
  3. make && make install

一切运行正常。

显然,Captain 在躲着我,当然,因为如果你只是重新制作而不使用 make distclean && configure,make 只会编译新的符号,这显然是不够的 ;-)

答案2

我遇到了同样的问题,我所做的就是删除我的 php 源目录,重新提取 tarball,然后再次编译,一切正常。

我之前曾在该系统上安装了没有 apache 的 php,然后我尝试从同一个源目录使用不同的配置设置重新安装 php。

答案3

您构建了 php5,但您没有重建 apache 和 php5 之间的粘合。由于您使用的是 mod_php5,因此它会失败(合乎逻辑)。

您可能能够通过 fastcgi 运行 php 脚本(我假设您手动构建的 php 5.3.1 没问题),但无论如何,我建议您采取其他方式。

在生产服务器上手动构建软件非常麻烦。此外,PHP5 是一个很大的软件,你真的应该不是出于维护和安全目的这样做。

如果您确实需要该版本,那么实现此目的的正确方法是反向移植该软件包。(是的,打包!)

它需要一些打包知识和时间。您可以使用以下方式获取打包源:apt-get source php5,前提是您在 /etc/apt/sources.list 中有一个 deb-src 源

答案4

正如 @zecrazytux 所指出的,您是否安装了适当的 apache-dev 包?即使您告诉了它们的位置,PHP 也可能没有它们而构建。您需要查看 ./configure 输出。

相关内容