Mac OS X(10.5)でApache2を実行しています。私はコンパイルしましたPHP 5.2.8そして最後に_pdo-mysql
_が動作しました(またはそう思います)。
この端末コマンド:
_php --version
_
5.2.8が表示され、適切なモジュールがインストールされています。
しかし、phpinfo()
を実行すると、ApacheがダンプアウトしますPHP 5.2.6(私の以前のバージョン、_pdo_mysql
_なし)。
どのPHP=ロードするかをApacheに指示するにはどうすればよいですか?_httpd.conf
_には次の行があります。
_LoadModule php5_module libexec/Apache2/libphp5.so
_
しかし、それがどこにあるのかはわかりません。
それは私が変えなければならないことですか?
私はこれらすべての答えが実際に質問に答えているわけではないと思います。ルートレベルは、コマンド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
です。これは、ApacheのROOT
ディレクトリの開始位置を定義します。私の場合、/etc/httpd
で構成を検索します。ファイルとモジュール。
注:このROOT
はDocumentRoot
と同じものではありません。このROOT
は、httpd
デーモンのコンパイル方法に固有です。DocumentRoot
は、httpd
デーモンが実際のWebコンテンツ(。 htmlファイルなど)。
私の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
...次のパスを介して、Apacheデーモンhttpd
にアクセスできます。
% 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
に接続します。
locate
コマンドを使用して、システム上のファイルを見つけることができます。
#libphp5.so を見つけます
その名前のすべてのファイルの完全パスが出力されます。 /usr/libexec/Apache2/libphp5.so
。
Httpd.confにロードされたモジュールの親ディレクトリ(libexec/Apache2/libphp5.so
など)は、デフォルトで通常/usr
に設定されているServerRoot
ディレクティブによって定義されます。これを変更することはお勧めしませんが、パスが正確にどこで定義されているかを誰かが知っていると便利です。
ApacheのウェブサイトはServerRootについて次のように述べています:
他の構成ディレクティブ(例えば、IncludeやLoadModuleなど)の相対パスは、このディレクトリからの相対パスと見なされます。
さらに、デフォルトのhttpd.confファイルのコメントは次のとおりです。
ServerRoot:サーバーの構成、エラー、およびログファイルが保持されるディレクトリツリーの最上位。
Apacheは「/ usr/libexec/httpd /」でモジュールを探しているはずです。そこに「libphp5.so」というファイルまたはシンボリックリンクがあります。シンボリックリンクの場合は、新しい5.2.8 libphp5.soに再リンクする必要があります。そうでない場合は、5.2.8 libphp5.soを「/ usr/libexec/httpd /」にコピーし、「Sudo apachectl restart」でApacheを再起動します。 。
私はApacheとPHPがサーバーの1つにインストールされていました。これは前のシステム管理者によってインストールされました。ApacheとPHPの両方がソースからコンパイルされましたこれに加えて、デフォルトPHPがインストールされていました。つまり、ApacheがどのPHPを使用しているかを知るためです。以下のコマンドを実行します。
<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を見つけることができました。