Làm thế nào để tôi nói với Apache nên sử dụng PHP nào?


34

Tôi đang chạy Apache2 trên Mac OS X (10.5) . Tôi vừa biên dịch PHP 5.2.8 và cuối cùng tôi đã pdo-mysqllàm việc (hoặc tôi nghĩ vậy).

Lệnh đầu cuối này:

php --version

đang hiển thị 5.2.8 và tôi đã cài đặt đúng các mô-đun.

Nhưng, khi tôi làm một phpinfo(), Apache đã loại bỏ PHP 5.2.6 (phiên bản trước của tôi, không có pdo_mysql).

Làm cách nào để tôi biết Apache sẽ tải PHP nào? Có httpd.confdòng:

LoadModule php5_module        libexec/apache2/libphp5.so

Nhưng, tôi không biết đó là gì hay ở đâu.

Có phải đó là những gì tôi phải thay đổi?


Khi bạn biên dịch php, bạn đã sử dụng make install chưa? Nếu bạn đã tìm thấy đường dẫn mà nó đã cài đặt mô-đun của bạn và thay đổi cấu hình apache của bạn để trỏ đến nó. Mac có phiên bản apache riêng và php5 đã được cài đặt, đó là lý do tại sao bạn thấy một phiên bản khác.
Ruggs


Người dùng Homebrew, xem bình luận
@Mick

1
bạn đã giải quyết vấn đề chưa? TẤT CẢ các câu trả lời chỉ là điều điên rồ
Pmpr 3/03/2017

Không ai trong số các câu trả lời trả lời câu hỏi. Điều này thật kỳ quái ...
lượng

Câu trả lời:


14

Tôi nghĩ rằng tất cả những câu trả lời này không thực sự trả lời câu hỏi. Mức gốc có thể được xác định bằng cách chạy lệnh httpd -V. Điều này sẽ cho bạn thấy các tùy chọn mà daemon Apache được xây dựng cùng lúc biên dịch. Đây là những gì kiểm soát nơi httpdxác định nơi để tìm cấu hình của nó. tập tin và mô-đun .so theo mặc định.

Ví dụ:

% 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"

Dòng quan trọng trong đầu ra đó là HTTPD_ROOT. Điều đó xác định nơi ROOTthư mục của Apache sẽ bắt đầu, /etc/httpdtrong trường hợp của tôi, khi tìm cấu hình. tập tin và mô-đun.

LƯU Ý: Đây ROOTkhông phải là điều tương tự như DocumentRoot. Điều này ROOTđặc trưng cho cách httpdtrình nền được biên dịch, DocumentRootlà để chỉ định nơi httpdtrình nền sẽ bắt đầu tìm kiếm nội dung web thực tế (tệp .html, v.v.).

Đối với httpd.conftệp của tôi, tôi có các dòng Tải sau:

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

Ví dụ, đường dẫn đầy đủ đến các mô-đun của bạn sẽ là:

/etc/httpd/modules/mod_auth_basic.so

Đây là từ hệ thống CentOS 5.x nhưng kỹ thuật vẫn thích hợp.

BTW, nó có thể gây ra một chút khó hiểu vì trong trường hợp của CentOS, các tệp được sắp xếp vật lý ở đây:

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

... và sau đó có thể truy cập vào daemon Apache httpd, thông qua đường dẫn này:

% 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

Các modulesconnect liên kết /etc/httpd-> /usr/lib/httpd/modules.


slm như tôi đã nói trong bài trước, ServerRoot được định nghĩa trong chỉ thị ServerRoot và không có gì để làm với HTTPD_ROOT được hiển thị qua "httpd -V." Vui lòng tham khảo các trang web của Apache được tham chiếu trong bài viết trước của tôi hoặc nếu bạn muốn thay đổi chỉ thị ServerRoot trongtệp httpd.conf của mìnhvà tự mình xem.
billynoah

ServerRoot là một cách để ghi đè HTTPD_ROOT. HTTPD_ROOT được đặt tại thời gian biên dịch thông qua công tắc cấu hình --prefix. Bài đăng của bạn đã phân biệt b / w ServerRoot và DocumentRoot khác nhau. httpd.apache.org/docs/civerse/mod/core.html#serverroot . Thật tốt khi thấy bạn đã đăng ký một tên với tài khoản SF của bạn!
slm

Điều này có thực sự trả lời cho câu hỏi: "Làm thế nào để tôi nói với Apache nên sử dụng PHP nào?" ?
Pmpr

Trix OP chấp nhận nó nên có.
slm

@slm Điều này không trả lời câu hỏi.
lượng tử

4

Bạn có thể tìm thấy các tập tin trên hệ thống của mình bằng locatelệnh:

# định vị libphp5.so

Nó sẽ in các đường dẫn đầy đủ của tất cả các tệp có tên đó. Tôi có một lúc /usr/libexec/apache2/libphp5.so.


1
Vậy thì sao? Đây có phải là một câu trả lời cho câu hỏi? Hoặc một cách để tìm một tập tin?
Pmpr

1
@Trix, người hỏi nói, "Tôi không biết đó là gì hay ở đâu." Tôi đã chỉ cho bạn cách tìm nó ở đâu. Tôi giả định rằng một khi người hỏi nhìn thấy tất cả các vị trí khác của tệp được đặt tên trong câu hỏi, thì rõ ràng làm thế nào để thay đổi cài đặt để sử dụng một vị trí khác.
Rob Kennedy ngày

4

Thư mục mẹ của các mô-đun được tải trong httpd.conf (chẳng hạn như libexec/apache2/libphp5.so:) được xác định bởi lệnh ServerRootmà theo mặc định thường được đặt thành /usr. Tôi không khuyên bạn nên thay đổi điều này nhưng nó có thể hữu ích cho ai đó biết chính xác nơi đường dẫn được xác định.

Trang web của Apache cho biết như sau về ServerRoot :

Các đường dẫn tương đối trong các chỉ thị cấu hình khác (chẳng hạn như Bao gồm hoặc LoadModule chẳng hạn) được lấy tương đối với thư mục này.

ngoài ra các bình luận tệp httpd.conf mặc định đọc:

ServerRoot: Phần trên cùng của cây thư mục mà theo đó các tệp cấu hình, lỗi và nhật ký của máy chủ được lưu giữ.


2
OP không theo định nghĩa của ServerRoot. Thay vào đó, anh ấy đã hỏi câu hỏi "Làm thế nào để tôi nói với Apache nên sử dụng PHP nào?". Nếu bạn thực sự muốn trả lời nó, vì vậy hãy trả lời nó
Pmpr

3

Apache nên tìm kiếm các mô-đun trong "/ usr / libexec / httpd /". Ở đó, bạn sẽ tìm thấy một tập tin hoặc liên kết tượng trưng gọi là "libphp5.so". Nếu đó là một liên kết tượng trưng, ​​bạn sẽ cần phải xem lại libphp5.so mới. .


0

Tôi đã cài đặt Apache và PHP trên một trong các máy chủ. Điều này đã được cài đặt bởi quản trị viên hệ thống trước đó. Cả Apache và PHP đều được tuân thủ từ nguồn. Ngoài ra, đã có một PHP mặc định được cài đặt. Vì vậy, để biết PHP nào được sử dụng bởi Apache. Tôi chạy lệnh dưới đây

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

Điều này đã cho tôi con đường đến apxs apache

  APACHE_HOME/bin/apxs

Điều này đã cho tôi thông tin về việc Apache đang được sử dụng bởi php này. Php mặc định đã báo lỗi khi tôi gõ

#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

Vì vậy, theo cách này tôi đã có thể tìm ra php được sử dụng bởi Apache.


1
Xin đừng đăng cùng một câu trả lời hai lần. Thay vào đó, liên kết đến câu trả lời đầu tiên.
Sven
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.