Bagaimana saya memberi tahu Apache PHP mana yang harus digunakan?

34

Saya menjalankan Apache2 pada Mac OS X (10.5) . Saya baru saja mengkompilasi PHP 5.2.8 dan akhirnya mulai pdo-mysqlberfungsi (atau saya kira demikian).

Perintah terminal ini:

php --version

menampilkan 5.2.8 dan saya memiliki modul yang tepat diinstal.

Tapi, ketika saya melakukan phpinfo(), Apache membuang PHP 5.2.6 (versi saya sebelumnya, tanpa pdo_mysql).

Bagaimana saya memberi tahu Apache PHP mana yang akan dimuat? The httpd.confmemiliki garis:

LoadModule php5_module        libexec/apache2/libphp5.so

Tapi, saya tidak tahu apa atau di mana itu.

Apakah itu yang harus saya ubah?

Sam McAfee
sumber
Ketika Anda mengkompilasi php, apakah Anda menggunakan make install? Jika Anda menemukan path tempat modul itu diinstal dan ubah konfigurasi apache Anda untuk mengarahkannya. Mac memiliki versi apache sendiri dan php5 sudah diinstal sehingga Anda melihat versi yang berbeda.
Ruggs
Pengguna Homebrew, lihat @Mick comment
BatteryAcid
1
Apakah Anda memecahkan masalah Anda? SEMUA jawaban adalah hal yang gila
Pmpr
Tak satu pun dari jawaban ini menjawab pertanyaan. Ini aneh ...
quant

Jawaban:

14

Saya pikir semua jawaban ini tidak benar-benar menjawab pertanyaan. Level root dapat ditentukan dengan menjalankan perintah httpd -V. Ini akan menunjukkan kepada Anda opsi apa yang digunakan oleh daemon Apache saat kompilasi. Inilah yang mengontrol di mana httpdmenentukan di mana mencari konfigurasi itu. file dan modul .so secara default.

Sebagai contoh:

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

Baris kunci dalam output itu adalah HTTPD_ROOT. Itu menentukan di mana ROOTdirektori Apache akan dimulai, /etc/httpddalam kasus saya, ketika mencari konfigurasi. file dan modul.

CATATAN: Ini ROOTbukan hal yang sama dengan DocumentRoot. Ini ROOTkhusus untuk bagaimana httpddaemon dikompilasi, DocumentRootuntuk menentukan di mana httpddaemon harus mulai mencari konten web yang sebenarnya (file .html dan semacamnya).

Untuk httpd.conffile saya, saya memiliki baris Muat berikut:

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

Dengan ini, jalur lengkap ke modul Anda akan, misalnya:

/etc/httpd/modules/mod_auth_basic.so

Ini dari sistem CentOS 5.x tetapi tekniknya masih tepat.

BTW, ini bisa sedikit membingungkan karena dalam kasus CentOS file-file tersebut diatur secara fisik di sini:

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

... lalu dapat diakses ke daemon Apache httpd,, melalui jalur ini:

% 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

The modulesLink menghubungkan /etc/httpd-> /usr/lib/httpd/modules.

slm
sumber
Slm seperti yang saya nyatakan dalam posting sebelumnya, ServerRoot didefinisikan dalam direktif ServerRoot dan tidak ada hubungannya dengan HTTPD_ROOT yang ditampilkan melalui "httpd -V." Silakan berkonsultasi dengan halaman web Apache yang direferensikan di posting saya sebelumnya, atau jika Anda ingin mengubah direktif ServerRoot difile httpd.conf Andadan lihat sendiri.
billynoah
ServerRoot adalah cara untuk menimpa HTTPD_ROOT. HTTPD_ROOT diset pada waktu kompilasi melalui sakelar konfigurasi --prefix. Posting Anda membedakan perbedaan ServerRoot dan DocumentRoot. httpd.apache.org/docs/current/mod/core.html#serverroot . Senang melihat Anda mendaftarkan nama dengan akun SF Anda!
slm
Apakah ini benar-benar menjawab pertanyaan: "Bagaimana saya memberi tahu Apache PHP mana yang harus digunakan?" ?
Pmpr
Trix OP menerimanya jadi ya.
slm
@slm Ini tidak menjawab pertanyaan.
quant
4

Anda dapat menemukan file di sistem Anda dengan locateperintah:

# temukan libphp5.so

Ini akan mencetak path lengkap semua file dengan nama itu. Saya punya satu di /usr/libexec/apache2/libphp5.so.

Rob Kennedy
sumber
1
Terus? apakah ini jawaban untuk pertanyaan? Atau cara menemukan file?
Pmpr
1
@Trix, si penanya berkata, "Saya tidak tahu apa atau di mana itu." Saya telah menunjukkan cara menemukan di mana itu. Saya berasumsi bahwa begitu penanya melihat semua lokasi lain dari file bernama tersebut, akan jelas bagaimana mengubah pengaturan untuk menggunakan yang berbeda.
Rob Kennedy
4

Direktori induk modul yang dimuat di httpd.conf (seperti:) libexec/apache2/libphp5.soditentukan oleh ServerRootarahan yang secara default diatur ke /usr. Saya tidak akan merekomendasikan mengubah ini tetapi mungkin berguna bagi seseorang untuk mengetahui di mana tepatnya jalur itu didefinisikan.

Situs web Apache mengatakan yang berikut tentang ServerRoot :

Jalur relatif dalam arahan konfigurasi lain (seperti Sertakan atau LoadModule, misalnya) diambil sebagai relatif terhadap direktori ini.

tambahan komentar file httpd.conf default baca:

ServerRoot: Bagian atas pohon direktori di mana konfigurasi server, kesalahan, dan file log disimpan.

billynoah
sumber
2
OP tidak mengejar definisi untuk ServerRoot. Alih-alih, dia mengajukan pertanyaan, "Bagaimana saya memberi tahu Apache PHP mana yang harus digunakan?". Jika Anda benar-benar ingin menjawabnya, maka jawablah
Pmpr
3

Apache harus mencari modul di "/ usr / libexec / httpd /". Di sana Anda akan menemukan file atau symlink yang disebut "libphp5.so". Jika itu symlink, Anda harus menautkan kembali ke libphp5.so 5.2.8 yang baru, jika tidak, cukup salin 5.2.8 libphp5.so ke "/ usr / libexec / httpd /" dan restart apache dengan "sudo apachectl restart" .


sumber
0

Saya sudah menginstal Apache dan PHP di salah satu server. Ini diinstal oleh admin sistem sebelumnya. Baik Apache dan PHP dipenuhi dari sumbernya. Selain itu ada PHP default yang diinstal. Jadi untuk mengetahui PHP mana yang digunakan oleh Apache. Saya menjalankan perintah di bawah ini

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

Ini memberi saya jalan ke apx apache

  APACHE_HOME/bin/apxs

Ini memberi saya info di mana Apache digunakan oleh php ini. Php default memberikan kesalahan saat saya mengetik

#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

Jadi dengan cara ini saya bisa mengetahui php yang digunakan oleh Apache.

pengguna2935688
sumber
1
Tolong jangan posting jawaban yang sama dua kali. Alih-alih, tautkan ke jawaban pertama.
Sven