どのPHPを使用するかをApacheに指示するにはどうすればよいですか?


34

Mac OS X(10.5)でApache2を実行しています。PHP 5.2.8をコンパイルしたところ、ようやく動作するようになりました(またはそう思います)。pdo-mysql

この端末コマンド:

php --version

5.2.8が表示され、適切なモジュールがインストールされています。

しかし、Aを実行するとphpinfo()ApacheはPHP 5.2.6(以前のバージョン、なしpdo_mysql)をダンプします

どのPHPをロードするかをApacheに指示するにはどうすればよいですか?次のhttpd.conf行があります。

LoadModule php5_module        libexec/apache2/libphp5.so

しかし、それが何なのか、どこにあるのかはわかりません。

それは私が変えなければならないことですか?


phpをコンパイルしたときにmake installを使用しましたか?モジュールをインストールしたパスを見つけて、それを指すようにApacheの設定を変更した場合。Macには独自のバージョンのapacheとphp5が既にインストールされているため、別のバージョンが表示されます。
Ruggs 08


@Mickコメント自作ユーザーを参照してください
BatteryAcid

1
問題を解決しましたか?すべての答えはただ怒っものです
Pmpr

これらの回答はどれも質問に答えません。これは奇妙です...
quant

回答:


14

これらの答えはすべて質問に答えているわけではないと思います。ルートレベルは、コマンドを実行して決定できますhttpd -V。これにより、コンパイル時にApacheデーモンがどのオプションでビルドされたかが表示されます。これは、httpd設定を探す場所を決定する場所を制御するものです。デフォルトではファイルと.soモジュール。

例えば:

% httpd -V
Server version: Apache/2.2.17 (Unix)
Server built:   Dec 17 2010 11:58:24
Server's Module Magic Number: 20051115:25
Server loaded:  APR 1.3.12, APR-Util 1.3.9
Compiled using: APR 1.3.12, APR-Util 1.3.9
Architecture:   32-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="logs/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

その出力の重要な行はですHTTPD_ROOT。これは、私の場合、configを探すときにApacheのROOTディレクトリを開始する場所を定義します/etc/httpd。ファイルとモジュール。

注:これROOTはとは異なりますDocumentRoot。これROOTは、httpdデーモンがどのようにコンパイルされたかに固有です。これは、デーモンが実際のWebコンテンツ(.htmlファイルなど)の検索を開始DocumentRootする場所を指定するhttpdためのものです。

私のhttpd.confファイルには、次のLoad行があります。

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so

これを考えると、モジュールへの完全なパスは次のようになります。

/etc/httpd/modules/mod_auth_basic.so

これはCentOS 5.xシステムのものですが、この手法は依然として適切です。

ところで、CentOSの場合、ファイルはここで物理的に整理されているため、少し混乱する可能性があります。

% ls /usr/lib/httpd/modules/
libphp5.so            mod_authnz_ldap.so      mod_dav_fs.so      mod_headers.so       mod_perl.so            mod_speling.so

...そして、次のhttpdパスを介してApacheデーモンにアクセスできます:

% ls -l /etc/httpd/
total 12
drwxr-xr-x 2 root root 4096 Apr 26  2011 conf
drwxr-xr-x 3 root root 4096 Apr 26  2011 conf.d
-rw-r--r-- 1 root root   18 Feb 24  2009 htpasswd
lrwxrwxrwx 1 root root   19 Apr 26  2011 logs -> ../../var/log/httpd
lrwxrwxrwx 1 root root   27 Apr 26  2011 modules -> ../../usr/lib/httpd/modules
lrwxrwxrwx 1 root root   13 Apr 26  2011 run -> ../../var/run

modulesリンクが接続されています/etc/httpd> - /usr/lib/httpd/modules


前の投稿で述べたように、 slmはServerRootディレクティブで定義され、「httpd -V」を介して表示されるHTTPD_ROOTとは何の関係もありません。以前の投稿で参照されたApacheのWebページを参照するか、 httpd.confファイルのServerRootディレクティブを変更して、自分で確認してください。
ビリーノア

ServerRootは、HTTPD_ROOTをオーバーライドする方法です。HTTPD_ROOTは、コンパイル時に--prefix configureスイッチを介して設定されます。あなたの投稿は、異なるServerRootとDocumentRootを区別していました。httpd.apache.org/docs/current/mod/core.html#serverroot。SFアカウントに名前を登録してくれたのは嬉しいです!
slm

これは、「どのPHPを使用するかをApacheに伝えるにはどうすればよいですか?」?
Pmpr

OPがTrixを受け入れたので、はい。
slm

@slmこれは質問に答えません。
quant

4

locate次のコマンドを使用して、システム上のファイルを検索できます。

#libphp5.soを見つける

その名前を持つすべてのファイルの完全なパスを出力します。に1つあり/usr/libexec/apache2/libphp5.soます。


1
だから何?これは質問に対する答えですか?またはファイルを見つける方法?
Pmpr

1
@Trix、アスカーは「それが何であるか、どこにあるのかわからない」と言った。それがどこにあるかを見つける方法を示しました。質問者が問題の名前付きファイルの他の場所をすべて確認したら、別の場所を使用するように設定を変更する方法が明らかになると思いました。
ロブ・ケネディ

4

httpd.confにロードされるモジュールの親ディレクトリ(などlibexec/apache2/libphp5.so)はServerRoot、デフォルトで通常設定されるディレクティブによって定義されます/usr。これを変更することはお勧めしませんが、正確にそのパスがどこで定義されているかを知ることは有用かもしれません。

ApacheのWebサイトでは、ServerRootについて次のように説明しています

他の構成ディレクティブ(たとえば、IncludeやLoadModuleなど)の相対パスは、このディレクトリに対する相対パスとして使用されます。

さらに、デフォルトのhttpd.confファイルのコメントは次のとおりです。

ServerRoot:サーバーの構成、エラー、およびログファイルが保持されるディレクトリツリーの最上部。


2
OPは、ServerRootの定義の後ではありません。その代わりに、彼は「どのPHPを使用するかをApacheに伝えるにはどうすればよいですか?」あなたが本当にそれに答えるようにしたい場合は、それに答える
Pmpr

3

Apacheは、「/ usr / libexec / httpd /」でモジュールを検索する必要があります。そこには、「libphp5.so」というファイルまたはシンボリックリンクがあります。シンボリックリンクの場合、新しい5.2.8 libphp5.soに再リンクする必要があります。そうでない場合は、5.2.8 libphp5.soを「/ usr / libexec / httpd /」にコピーし、「sudo apachectl restart」でApacheを再起動します。 。


0

サーバーの1つにApacheとPHPをインストールしました。これは、前のシステム管理者によってインストールされました。ApacheとPHPは両方ともソースからコンパイルされました。これに加えて、デフォルトのPHPがインストールされていました。どのPHPがApacheによって使用されているかを知るために。以下のコマンドを実行します

   <Install Dir of PHP>/bin/php -i | grep apxs

これは私にApache apxsへのパスを与えました

  APACHE_HOME/bin/apxs

これにより、このPHPで使用されているApacheについての情報が得られました。入力時にデフォルトのPHPがエラーを出しました

#php -i | grep apxs 

 Failed loading opcache.so:  opcache.so: cannot open shared object file: No    such file or directory PHP Warning:  PHP Startup: Unable to load dynamic library     '<PHP_HOME>/lib/php/extensions/debug-non-zts-20121212/memcached.so' - <PHP_HOME>/lib/php/extensions/debug-non-zts-20121212/memcached.so: undefined symbol: OnUpdateLongGEZero in Unknown on line 0

このようにして、Apacheが使用するphpを把握できました。


1
同じ回答を2回投稿しないでください。代わりに、最初の回答へのリンク。
スヴェン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.