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

bau*_*ack 9 php apache-2.2

我在这台服务器上运行 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
Run Code Online (Sandbox Code Playgroud)

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

但是,当我尝试启动 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]
Run Code Online (Sandbox Code Playgroud)

任何想法是什么导致了这个错误?我能看到的所有参考资料都与为 php4 等构建 php5 包有关。这台机器上从未安装过PHP4。

小智 11

实际上,James Hackett 所说的或多或少对我有用。

我的问题是我安装 Apache之前构建了 PHP (我从最新的主干构建了 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

一切都很好。

显然队长躲着我,当然,因为如果你只是在没有 make distclean && configure 的情况下重新制作,那么 make 只会编译新的符号,这显然是不够的;-)


小智 1

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

由于 fastcgi,您也许能够运行 php 脚本(我假设您手动构建的 php 5.3.1 没问题),但无论如何我建议您以其他方式操作。

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

如果您确实需要该版本,实现此目的的正确方法是向后移植该包。(是的,包装!)

它需要一些包装知识和时间。apt-get source php5如果 /etc/apt/sources.list 中有 deb-src 源,您可以通过以下方式获取打包源: