Co to jest mod_php?

108

Przechodząc przez samouczek Zend , natknąłem się na następujące stwierdzenie:

Zauważ, że ustawienia php_flag w .htaccess działają tylko wtedy, gdy używasz mod_php.

Czy ktoś może wyjaśnić, co to oznacza?

SpikETidE
źródło

Odpowiedzi:

159

mod_phpoznacza PHP, jako moduł Apache .

Zasadniczo, ładując mod_phpjako moduł Apache, pozwala Apache interpretować pliki PHP (te są interpretowane przez mod_php) .


EDYCJA: Istnieją (przynajmniej) dwa sposoby uruchamiania PHP podczas pracy z Apache:

  • Korzystanie z CGI : proces PHP jest uruchamiany przez Apache i to ten proces PHP interpretuje kod PHP, a nie sam Apache
  • Używanie PHP jako modułu Apache (nazywanego mod_php) : interpreter PHP jest wtedy jakby „osadzony” w procesie Apache: nie ma zewnętrznego procesu PHP - co oznacza, że ​​Apache i PHP mogą się lepiej komunikować .


I edytuj ponownie, po komentarzu : używając CGI lub mod_phpzależy od Ciebie: to tylko kwestia konfiguracji Twojego serwera WWW.

Aby dowiedzieć się, który sposób jest aktualnie używany na serwerze, możesz sprawdzić wyjście phpinfo(): powinno być coś wskazującego, czy PHP działa przez mod_php (lub mod_php5) , czy przez CGI.

Możesz również przyjrzeć się php_sapi_name()funkcji: zwraca typ interfejsu między serwerem WWW a PHP .


Jeśli mod_phpzaznaczysz pliki konfiguracyjne Apache, podczas korzystania z nich powinna pojawić się LoadModulelinia wyglądająca następująco:

LoadModule php5_module        modules/libphp5.so

(Nazwa pliku po prawej stronie może być inna - na przykład w systemie Windows powinna to być a .dll)

Pascal MARTIN
źródło
Użyłem xampp do zainstalowania pakietów php, apache i mysql ... Jaka będzie więc moja konfiguracja?
SpikETidE
Powinieneś ją włączyć, jeśli PHP obecnie nie działa. Jeśli PHP już działa, musi używać CGI, w takim przypadku prawdopodobnie będziesz musiał zrobić więcej niż tylko włączyć moduł. Moduł może nawet nie istnieć w systemie.
d11wtq
1
Tak..!. Kiedy uruchamiam phpinfo (), widzę, że mod_php5 znajduje się w sekcji Loaded Modules… A to oznacza, że ​​mam go uruchomionego jako moduł Apache… prawda?
SpikETidE
3
mod_phpjest zdecydowanie najpowszechniejszą konfiguracją.
troelskn
@Pascal, powiedziałbym, że mod_phpto nie jest prawdziwy PHP; to tylko dodatek do Apache. A raczej myślę, że powinieneś zacząć odpowiedź od definicji Co dokładnie oznacza PHP?
Pacerier
58

Ta odpowiedź pochodzi z TuxRadar :

Podczas uruchamiania PHP przez serwer WWW istnieją dwie różne opcje: uruchomienie go przy użyciu interfejsu PHP CGI SAPI lub uruchomienie go jako modułu dla serwera WWW. Każdy z nich ma swoje zalety, ale ogólnie moduł jest preferowany.

Uruchamianie PHP jako CGI oznacza, że ​​zasadniczo przekazujesz serwerowi WWW lokalizację pliku wykonywalnego PHP, a serwer uruchamia ten plik wykonywalny, przekazując mu skrypt, który wywołałeś, za każdym razem, gdy odwiedzasz stronę. Oznacza to, że za każdym razem, gdy ładujesz stronę, PHP musi odczytać php.ini i ustawić jego ustawienia, musi załadować wszystkie jego rozszerzenia, a następnie musi rozpocząć pracę nad analizą skryptu - jest dużo powtarzalnej pracy.

Kiedy uruchamiasz PHP jako moduł, PHP dosłownie znajduje się na serwerze sieciowym - uruchamia się tylko raz, ładuje ustawienia i rozszerzenia tylko raz, a także może przechowywać informacje między sesjami. Na przykład akceleratory PHP polegają na tym, że PHP może zapisywać dane w pamięci podręcznej między żądaniami, co jest niemożliwe w przypadku wersji CGI.

Oczywistą zaletą używania PHP jako modułu jest szybkość - zobaczysz duży wzrost szybkości, jeśli przekonwertujesz CGI na moduł. Wiele osób, szczególnie użytkownicy Windowsa, nie zdaje sobie z tego sprawy i nadal korzysta z php.exe CGI SAPI, a szkoda - moduł jest zwykle od trzech do pięciu razy szybszy.

Jednak korzystanie z wersji CGI ma jedną kluczową zaletę - PHP odczytuje swoje ustawienia za każdym razem, gdy ładujesz stronę. Gdy PHP działa jako moduł, wszelkie zmiany wprowadzone w pliku php.ini nie zostaną wprowadzone, dopóki nie zrestartujesz serwera WWW, co sprawia, że ​​wersja CGI jest preferowana, jeśli testujesz wiele nowych ustawień i chcesz zobaczyć natychmiastowe odpowiedzi.

SpikETidE
źródło
@JohannEchavarria, Jeśli nie dodałeś wielu szalonych rzeczy, ponowne uruchomienie serwera zajmie tylko kilka sekund. W przypadku „normalnych” nowoczesnych systemów z dyskiem SSD to mniej niż 2 sekundy.
Pacerier,
12

Twój serwer musi mieć zainstalowane moduły php, aby mógł analizować kod php.

Jeśli korzystasz z systemu Ubuntu, możesz to łatwo zrobić za pomocą

sudo apt-get install apache2

sudo apt-get install php5

sudo apt-get install libapache2-mod-php5

sudo /etc/init.d/apache2 restart

W przeciwnym razie możesz skompilować Apache z php: http://dan.drydog.com/apache2php.html

Określenie systemu operacyjnego serwera pomoże innym odpowiedzieć bardziej szczegółowo.

cdated
źródło
5

Oznacza to, że musisz mieć PHP zainstalowane jako moduł w Apache, zamiast uruchamiać go jako skrypt CGI.

Ondrej Slinták
źródło
3

Wystarczy dodać te odpowiedzi, że mod_php jest najstarszą i najwolniejszą dostępną na serwerze HTTPD metodą używania PHP. Nie jest zalecane, chyba że używasz starszych wersji Apache HTTPD i PHP. php-fpm i proxy_cgi to metody preferowane.

Tejas Sarade
źródło
0

mod_php to interpreter PHP.

Z dokumentacji, jednym ważnym haczykiem mod_php jest:

„mod_php nie jest bezpieczny dla wątków i zmusza Cię do trzymania się preforków mpm (wieloprocesowy, bez wątków), co jest najwolniejszą możliwą konfiguracją”

kta
źródło