Apache'ye hangi PHP'nin kullanılacağını nasıl söylerim?


34

Ben çalıştırıyorum Apache2'yi bir üzerinde Mac OS X (10.5) . PHP 5.2.8'i derledim ve sonunda pdo-mysqlçalışmaya başladım (ya da sanırım).

Bu terminal komutu:

php --version

5.2.8 gösteriyor ve doğru modülleri kurdum.

Ancak, ne zaman phpinfo(), Apache PHP 5.2.6 (önceki sürüm, olmadan pdo_mysql) dışarı atıyor .

Apache'ye hangi PHP'nin yükleneceğini nasıl söylerim? httpd.confHattı vardır:

LoadModule php5_module        libexec/apache2/libphp5.so

Ama bunun ne olduğunu veya nerede olduğunu bilmiyorum.

Değiştirmem gereken bu mu?


PHP'yi derlerken make install kullandınız mı? Modülünüzü kurduğunuz yolu bulduysanız ve apache config'inizi işaret edecek şekilde değiştirin. Mac'in önceden yüklenmiş olan apache ve php5 sürümü var, bu yüzden farklı bir sürüm görüyorsunuz.
Ruggs,


Homebrew kullanıcılar, @Mick yorumu görmek
BatteryAcid

1
Sorunu çözdün mü? TÜM cevaplar sadece çılgınca bir şey
Pmpr

Bu cevapların hiçbiri soruyu cevaplamıyor. Bu tuhaf ...
miktar

Yanıtlar:


14

Bence bütün bu cevaplar aslında soruya cevap vermiyor. Kök seviyesi komutu çalıştırarak belirlenebilir httpd -V. Bu size Apache arka plan programının derleme zamanında hangi seçenekleri oluşturduğunu gösterecektir. Bu, httpdconfig için nereye bakılacağını nerede belirlediğini kontrol eder . dosyaları ve .so modülleri varsayılan olarak.

Örneğin:

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

Bu çıktıdaki anahtar satır HTTPD_ROOT. Bu, Apache'nin ROOTdizininin nerede başlayacağımı, /etc/httpdbenim durumumda, config ararken tanımlar . dosyalar ve modüller.

Not: Bu ROOTaynı şey değil DocumentRoot. Bu ROOTnasıl özgü httpdcini derlendi, DocumentRootbelirtmek içindir nerede httpdcin gerçek web içeriği (.html dosyaları ve böyle) arayan başlamalıdır.

Dosyam httpd.confiçin aşağıdaki Yük satırlarına sahibim:

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

Bu göz önüne alındığında, modüllerin tam yolu, örneğin:

/etc/httpd/modules/mod_auth_basic.so

Bu bir CentOS 5.x sisteminden geliyor ancak teknik hala uygun.

BTW, biraz kafa karıştırıcı olabilir çünkü CentOS'un durumunda dosyalar burada fiziksel olarak düzenlenmiştir:

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

... ve sonra Apache arka planına httpdşu yoldan erişilebilir :

% 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

modulesBağlantı bağlandığı /etc/httpd-> /usr/lib/httpd/modules.


Önceki yazımda belirttiğim gibi slm , ServerRoot, ServerRoot yönergesinde tanımlanmıştır ve "httpd -V" ile görüntülenen HTTPD_ROOT ile ilgisi yoktur. Lütfen önceki yazıma atıfta bulunulan Apache'nin web sayfalarına bakın veya httpd.conf dosyanızdakiServerRoot yönergesini değiştirmekve kendiniz için görmekistiyorsanız.
billynoah

ServerRoot, HTTPD_ROOT'u geçersiz kılmanın bir yoludur. HTTPD_ROOT, --prefix configure anahtarı ile derleme zamanında ayarlanır. Yazınız, farklı b / w ServerRoot ve DocumentRoot'u ayırt ediyordu. httpd.apache.org/docs/current/mod/core.html#serverroot . SF hesabınıza bir isim verdiğinizi görmek güzel!
slm

Bu gerçekten şu soruyu yanıtlıyor mu: "Apache'ye hangi PHP'nin kullanılacağını nasıl söylerim?" ?
Pmpr

Trix OP bunu evet olarak kabul etti.
slm

@slm Bu soruya cevap vermiyor.
Quant

4

Sisteminizdeki dosyaları şu locatekomutla bulabilirsiniz:

# libphp5.so dosyasını bulun

Bu isimdeki tüm dosyaların tam yollarını yazdıracaktır. Bende bir tane var /usr/libexec/apache2/libphp5.so.


1
Ne olmuş yani? Bu sorunun cevabı mı? Ya da bir dosyayı bulmak için bir yol?
Pmpr

1
Asker @Trix, "Ne ya da nerede olduğunu bilmiyorum." Dedi. Nerede olduğunu nasıl bulacağımı gösterdim. Soru sahibi, söz konusu dosyanın adı verilen tüm diğer yerleri görünce, ayarın farklı bir tane kullanmak için nasıl değiştirileceği açıkça görülebilir.
Rob Kennedy,

4

Httpd.conf dosyasına yüklenen modüllerin ana dizini (örneğin:) , varsayılan olarak tipik olarak ayarlanan yönerge libexec/apache2/libphp5.soile tanımlanır . Bunu değiştirmeyi tavsiye etmem ama birinin tam olarak bu yolun tam olarak nerede tanımlandığını bilmesi faydalı olabilir.ServerRoot/usr

Apache'nin web sitesi, ServerRoot hakkında şunları söylüyor :

Diğer yapılandırma direktiflerindeki (örneğin, Include veya LoadModule gibi) göreceli yollar bu dizine göre alınır.

Ek olarak, varsayılan httpd.conf dosyası yorumlarınızı okuyun

ServerRoot: Sunucunun konfigürasyon, hata ve kayıt dosyalarının tutulduğu dizin ağacının üstü.


2
OP, ServerRoot'un tanımından sonra değil. Bunun yerine "Apache'ye hangi PHP'nin kullanılacağını nasıl söylerim?" Sorusunu sordu. Gerçekten cevaplamak istiyorsan, cevap ver
Pmpr

3

Apache "/ usr / libexec / httpd /" içindeki modülleri aramalıdır. Orada "libphp5.so" adında bir dosya veya sembolik bağlantı bulacaksınız. Bu bir bağlantıysa, yeni 5.2.8 libphp5.so ile yeniden bağlantı kurmanız gerekir, aksi halde 5.2.8 libphp5.so dosyasını "/ usr / libexec / httpd /" dizinine kopyalayın ve apache'yi "sudo apachectl restart" ile yeniden başlatın .


0

Sunucunun birine Apache ve PHP yüklendim. Bu önceki sys admin tarafından kuruldu. Hem Apache hem de PHP kaynaktan alınmıştır. Buna ek olarak, kurulu bir PHP de vardı. Apache tarafından hangi PHP'nin kullanıldığını bilmek. Aşağıdaki komutu çalıştırıyorum

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

Bu bana apxs apache yolunu verdi

  APACHE_HOME/bin/apxs

Bu bana hangi Apache'nin bu php tarafından kullanıldığı hakkında bilgi verdi. Yazarken varsayılan php hata verdi

#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

Böylece Apache'nin kullandığı php'yi bu şekilde çözebildim.


1
Lütfen aynı cevabı iki kere göndermeyin. Bunun yerine ilk cevaba bağlantı verin.
Sven
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.