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


9

我正在此服务器上运行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。

Answers:


11

实际上,詹姆斯·哈克特(James Hackett)所说的或多或少对我有用。

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

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

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

而且一切正常。

当然,船长明显对我隐瞒了,因为如果不使用distclean && configure进行重制,make只是编译新的符号,显然这是不够的;-)


3

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

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


1

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

由于fastcgi,您也许可以运行php脚本(我认为您的内置php 5.3.1是可以的),但是无论如何,我还是建议您采取其他方式。

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

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

它需要一些包装知识和时间。您可以使用以下命令获取打包源:apt-get source php5,只要/etc/apt/sources.list中有deb-src源即可。


它不是生产服务器。这只是我们的开发服务器,我想弄清楚什么,如果php 5.3在我们的系统中损坏了。
baudtack

1
“在生产服务器上手动构建软件真是令人讨厌。此外,PHP5是很大的软件,出于维护和安全目的,您实际上不应该这样做。” 在大多数发行版中,这是保持最新状态的唯一方法。例如,Ubuntu在2009年6月发布的存储库中仅具有5.2.10的稳定性。就我个人而言,我发现使用预打包程序更具安全风险,因为它们内置了很多额外的东西,因此您可能没有需要,并且可以删除,如果您自己构建它们。另外,您可以保持最新。
安迪·谢拉姆

1

对于那些在加载libphp5.so时遇到apache2的zend_parse_paramater错误的人:

/apache2.conf:/etc/apache2/mods-enabled/php5.load第1行的语法错误:无法将/usr/lib/apache2/modules/libphp5.so加载到服务器中:/ usr / lib / apache2 / modules / libphp5.so:未定义符号:zend_parse_parameters

看一下./configure输出。如果您收到类似以下内容的消息:

配置:警告:Zend / PHP解析器的再生支持的野牛版本:1.28 1.35 1.75 1.875 2.0 2.1 2.2 2.3 2.4 2.4.1(发现:无)。

尝试安装野牛:sudo apt-get install野牛

然后使distclean然后./configure ...然后使然后make -i install

http://www.linuxforums.org/forum/redhat-fedora-linux-help/87975-configuring-php-work-apache.html


仅当您以某种方式修改了PHP源代码时,才需要重建zend解析器。我从未在任何生产服务器上安装过bison,也从未遇到过问题。
安迪·谢拉姆

0

如@zecrazytux所示,您是否安装了适当的apache-dev软件包?即使您没有告诉他们PHP的位置,PHP也可以在没有它们的情况下进行构建。您需要查看./configure输出。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.