Mod_php nedir?


108

Bir Zend eğitiminden geçerken şu ifadeyle karşılaştım:

.Htaccess içindeki php_flag ayarlarının sadece mod_php kullanıyorsanız çalıştığını unutmayın.

Birisi bunun ne anlama geldiğini açıklayabilir mi?

Yanıtlar:


159

mod_phpApache modülü olarak PHP anlamına gelir .

Temel olarak, mod_phpbir Apache modülü olarak yüklerken , Apache'nin PHP dosyalarını (bunlar tarafından yorumlanır mod_php) yorumlamasına izin verir .


DÜZENLEME: Var (en azından) PHP çalıştırmanın iki şekilde, Apache ile çalışırken:

  • Kullanma CGI : Bir PHP süreci Apache tarafından başlatılan, ve öyle ki PHP süreç olduğunu yorumlayıp PHP kodu - değil Apaçi kendisi
  • PHP'yi bir Apache modülü olarak kullanmak (denir mod_php) : PHP yorumlayıcısı daha sonra Apache sürecinin içine bir tür "gömülüdür": harici bir PHP işlemi yoktur - bu da Apache ve PHP'nin daha iyi iletişim kurabileceği anlamına gelir .


Ve yorumdan sonra yeniden düzenleyin : CGI kullanmak veya mod_phpsize kalmış: bu yalnızca web sunucunuzun yapılandırması ile ilgilidir.

Sunucunuzda şu anda hangi yolun kullanıldığını öğrenmek için, şu çıktıyı kontrol edebilirsiniz phpinfo(): PHP'nin mod_php (veya mod_php5) veya CGI aracılığıyla mı çalıştığını gösteren bir şey olmalıdır .

Ayrıca php_sapi_name()işleve bir göz atmak isteyebilirsiniz : web sunucusu ile PHP arasındaki arabirim türünü döndürür .


Apache'nizin yapılandırma dosyalarını kontrol ederseniz, kullanırken şuna benzer mod_phpbir LoadModulesatır olmalıdır :

LoadModule php5_module        modules/libphp5.so

(Sağdaki dosya adı farklı olabilir - örneğin Windows'ta a olmalıdır .dll)


Php, apache ve mysql paketini kurmak için xampp kullandım ... Peki, kurulumum ne olacak?
SpikETidE

PHP şu anda çalışmıyorsa etkinleştirmelisiniz. PHP zaten çalışıyorsa, CGI kullanıyor olmalıdır, bu durumda muhtemelen modülü etkinleştirmekten daha fazlasını yapmanız gerekecektir. Modül sistemde bile olmayabilir.
d11wtq

1
Evet..!. Phpinfo () 'yu çalıştırdığımda mod_php5'in Yüklü Modüller bölümüne dahil edildiğini görüyorum .... Ve bu, onu bir apache modülü olarak çalıştırdığım anlamına geliyor ... değil mi?
SpikETidE

3
mod_phpaçık farkla en yaygın yapılandırmadır.
troelskn

@Pascal, mod_phpgerçek PHP olmadığını söyleyebilirim ; bu sadece bir Apache eklentisidir. Daha doğrusu, yanıta PHP'nin tam olarak ne anlama geldiğini tanımlayarak başlamanız gerektiğini düşünüyorum.
Pacerier

58

Bu cevap TuxRadar'dan alınmıştır :

PHP'yi web sunucunuz üzerinden çalıştırırken iki farklı seçenek vardır: PHP'nin CGI SAPI'sini kullanarak çalıştırmak veya web sunucusu için bir modül olarak çalıştırmak. Her birinin kendi avantajları vardır, ancak genel olarak modül genellikle tercih edilir.

PHP'yi bir CGI olarak çalıştırmak, temel olarak web sunucunuza PHP çalıştırılabilir dosyasının konumunu söylediğiniz anlamına gelir ve sunucu, bir sayfayı her ziyaret ettiğinizde aradığınız komut dosyasını vererek bu yürütülebilir dosyayı çalıştırır. Bu, bir sayfayı her yüklediğinizde, PHP'nin php.ini'yi okuması ve ayarlarını yapması gerektiği, tüm uzantılarını yüklemesi gerektiği ve ardından komut dosyasını ayrıştırmaya başlaması gerektiği anlamına gelir - çok sayıda tekrarlanan çalışma vardır.

PHP'yi bir modül olarak çalıştırdığınızda, PHP kelimenin tam anlamıyla web sunucunuzun içinde oturur - yalnızca bir kez başlar, ayarlarını ve uzantılarını yalnızca bir kez yükler ve ayrıca oturumlar arasında bilgi depolayabilir. Örneğin, PHP hızlandırıcıları, PHP'nin istekler arasında önbelleğe alınmış verileri kaydedebilmesine güvenir, bu da CGI sürümünü kullanarak imkansızdır.

PHP'yi bir modül olarak kullanmanın bariz avantajı hızdır - CGI'dan bir modüle dönüştürürseniz büyük bir hız artışı göreceksiniz. Pek çok kişi, özellikle Windows kullanıcıları bunun farkında değildir ve utanç verici olan php.exe CGI SAPI'yi kullanmaya devam eder - modül genellikle üç ila beş kat daha hızlıdır.

Yine de CGI sürümünü kullanmanın önemli bir avantajı vardır ve o da, bir sayfayı her yüklediğinizde PHP'nin ayarlarını okmasıdır. PHP bir modül olarak çalışırken, php.ini dosyasında yaptığınız herhangi bir değişiklik, web sunucunuzu yeniden başlatana kadar devreye girmez; bu, çok sayıda yeni ayarı test ediyorsanız ve anında yanıtlar görmek istiyorsanız CGI sürümünü tercih edilebilir kılar.


@JohannEchavarria, Çok fazla çılgın şey eklemediğiniz sürece, sunucuyu yeniden başlatmak yalnızca birkaç saniye sürecektir. SSD'li "normal" modern sistemler için 2 saniyeden azdır.
Pacerier

12

Sunucunuzun php modüllerinin kurulu olması gerekir, böylece php kodunu ayrıştırabilir.

Eğer ubuntu'daysanız, bunu kolayca yapabilirsiniz.

sudo apt-get install apache2

sudo apt-get install php5

sudo apt-get install libapache2-mod-php5

sudo /etc/init.d/apache2 restart

Aksi takdirde apache'yi php ile derleyebilirsiniz: http://dan.drydog.com/apache2php.html

Sunucunuzun işletim sistemini belirtmeniz, başkalarının daha spesifik yanıt vermesine yardımcı olacaktır.


5

Bu, PHP'yi bir CGI betiği olarak başlatmak yerine Apache'de bir modül olarak kurmanız gerektiği anlamına gelir.


3

Sadece bu yanıtları eklemek için mod_php, HTTPD sunucusunda PHP'yi kullanmak için mevcut olan en eski ve en yavaş yöntemdir. Apache HTTPD ve PHP'nin eski sürümlerini çalıştırmadığınız sürece önerilmez. php-fpm ve proxy_cgi tercih edilen yöntemlerdir.


0

mod_php bir PHP yorumlayıcısıdır.

Dokümanlardan mod_php'nin önemli bir yakalaması şudur:

"mod_php iş parçacığı güvenli değildir ve sizi olası en yavaş yapılandırma olan prefork mpm'ye (çoklu işlem, iş parçacığı yok) bağlı kalmaya zorlar"

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.