我在这台服务器上运行 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遇到未定义符号的错误时(顺便说一下,找不到的模块是任意的),我做了以下事情:
make distclean 在 php 源代码上./configure --prefix=/usr/local/php-5.3-svn --with-apxs2=/usr/bin/apxs2make && 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 源,您可以通过以下方式获取打包源:
| 归档时间: |
|
| 查看次数: |
16782 次 |
| 最近记录: |