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

これにより、PHP 5.3.1が/ opt / php /にインストールされました

$ 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がインストールされていません。

回答:


11

実際、ジェームス・ハケットが言ったことは多かれ少なかれ私のために働いたものでした。

私の問題は、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は新しいシンボルをコンパイルするだけなので、明らかに不十分です;-)


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がシステムで壊れるとしたら、私は何を理解しようとしています。
ボータック2009

1
「本番サーバーでソフトウェアを手動で構築するのはかなり厄介です。さらに、PHP5は大きなソフトウェアであるため、メンテナンスやセキュリティの目的でそれを行うべきではありません。」ほとんどのディストリビューションでは、これが最新の状態に保つ唯一の方法です。たとえば、Ubuntuは、2009年6月にリリースされたリポジトリで5.2.10しか安定していません。個人的には、プレパッケージを使用する方がセキュリティ上のリスクが高いと思います。あなたがそれらを自分で構築する場合、必要であり、取り除くことができます さらに、最新の状態に保つことができます。
アンディシェラム2010

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 bison

次にdistcleanを作成し、次に./configure ...を作成し、次にmake -i install

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


PHPソースコードを何らかの方法で変更した場合にのみ、zendパーサーを再構築する必要があります。bisonを運用サーバーにインストールしたことがなく、問題が発生したこともありません。
アンディシェラム2010

0

@zecrazytuxが示したように、適切なapache-devパッケージをインストールしましたか?PHPは、どこにあるかを伝えたとしても、それらなしでビルドできたはずです。./configure出力を確認する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.