사용할 PHP를 아파치에 알리려면 어떻게해야합니까?


34

Mac OS X (10.5) 에서 Apache2 를 실행 하고 있습니다. 방금 PHP 5.2.8을 컴파일 하고 마침내 작동했습니다 (또는 그렇게 생각합니다).pdo-mysql

이 터미널 명령 :

php --version

5.2.8을 표시 하고 올바른 모듈이 설치되어 있습니다.

내가 할 때, phpinfo(), 아파치 에서 덤프 PHP 5.2.6 (하지 않고, 내 이전 버전 pdo_mysql).

어떤 PHP를로드 할 것인지 아파치에 알리려면 어떻게해야합니까? 는 httpd.conf라인을 가지고 :

LoadModule php5_module        libexec/apache2/libphp5.so

그러나 나는 그것이 무엇인지 어디에 있는지 모른다.

내가 바꿔야합니까?


PHP를 컴파일 할 때 make install을 사용 했습니까? 모듈을 설치 한 경로를 찾은 다음이를 가리 키도록 아파치 구성을 변경하십시오. Mac에는 자체 버전의 apache 및 php5가 이미 설치되어 있으므로 다른 버전을 볼 수 있습니다.
Ruggs December

1
Mick

Homebrew 사용자는 @Mick comment
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다르며 , 데몬이 실제 웹 컨텐츠 (.html 파일 등)를 찾기 시작 DocumentRoot하는 위치를 지정 httpd하기위한 것입니다.

httpd.conf파일에는 다음과 같은로드 줄이 있습니다.

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 시스템 에서 가져온 것이지만 기술은 여전히 ​​적합합니다.

BTW, 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가 ServerRoot 지시문에 정의되어 있으며 "httpd -V"를 통해 표시되는 HTTPD_ROOT와는 아무런 관련이 없습니다. 이전 게시물에서 참조한 Apache 웹 페이지를 참조하거나 httpd.conf 파일에서 ServerRoot 지시문을 변경하고직접 확인하십시오.
billynoah

ServerRoot는 HTTPD_ROOT를 재정의하는 방법입니다. HTTPD_ROOT는 컴파일시 --prefix 구성 스위치를 통해 설정됩니다. 귀하의 게시물이 다른 흑백 ServerRoot와 DocumentRoot를 구별하고있었습니다. httpd.apache.org/docs/current/mod/core.html#serverroot . SF 계정에 이름을 등록한 것을 반갑습니다!
slm

이것이 실제로 "Apache에 어떤 PHP를 사용해야합니까?" ?
Pmpr

Trix는 OP를 받아 들였습니다. 그렇습니다.
slm

@slm 이것은 질문에 대답하지 않습니다.
quant

4

다음 locate명령 을 사용하여 시스템에서 파일을 찾을 수 있습니다 .

# libphp5.so를 찾습니다

해당 이름을 가진 모든 파일의 전체 경로를 인쇄합니다. 에 하나 있습니다 /usr/libexec/apache2/libphp5.so.


1
그래서 무엇? 이것이 질문에 대한 답입니까? 아니면 파일을 찾는 방법?
Pmpr

1
@Trix는 "무엇을 어디에 있는지 모른다"고 말했다. 나는 그것이 어디에 있는지 찾는 법을 보여주었습니다. 일단 asker가 해당 명명 된 파일의 다른 모든 위치를 본 후에는 다른 파일을 사용하도록 설정을 변경하는 방법이 분명하다고 가정했습니다.
Rob Kennedy

4

httpd.conf에로드 된 모듈의 상위 디렉토리 (예 :) libexec/apache2/libphp5.soServerRoot기본적으로 일반적으로로 설정되는 지시문에 의해 정의됩니다 /usr. 나는 이것을 변경하는 것을 권장하지 않지만 누군가가 정확히 그 경로가 정의 된 곳을 아는 것이 유용 할 수 있습니다.

Apache의 웹 사이트는 ServerRoot 에 대해 다음과 같이 말합니다 .

다른 구성 지시문의 상대 경로 (예 : Include 또는 LoadModule 등)는이 디렉토리를 기준으로합니다.

또한 기본 httpd.conf 파일 주석은 다음과 같습니다.

ServerRoot : 서버의 구성, 오류 및 로그 파일이 유지되는 디렉토리 트리의 맨 위입니다.


2
OP는 ServerRoot에 대한 정의 이후가 아닙니다. 대신에 "아파치에게 어떤 PHP를 사용해야합니까?"라는 질문을했습니다. 정말로 대답하고 싶다면 대답하십시오
Pmpr

3

Apache는 "/ usr / libexec / httpd /"에서 모듈을 찾아야합니다. 여기에는 "libphp5.so"라는 파일 또는 심볼릭 링크가 있습니다. 심볼릭 링크 인 경우 새로운 5.2.8 libphp5.so에 다시 연결해야합니다. 그렇지 않으면 5.2.8 libphp5.so를 "/ usr / libexec / httpd /"에 복사하고 "sudo apachectl restart"로 아파치를 다시 시작하십시오. .


0

서버 중 하나에 Apache와 PHP가 설치되어 있습니다. 이것은 이전 시스템 관리자가 설치했습니다. Apache와 PHP는 모두 소스에서 준수되었습니다. 이 외에도 기본 PHP가 설치되었습니다. 따라서 Apache에서 어떤 PHP를 사용하는지 알 수 있습니다. 아래 명령을 실행합니다

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

이것은 나에게 아파치 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
동일한 답변을 두 번 게시하지 마십시오. 대신 첫 번째 답변에 연결하십시오.
Sven
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.