O que é mod_php?

108

Enquanto fazia um tutorial do Zend , me deparei com a seguinte declaração:

Observe que as configurações de php_flag em .htaccess só funcionam se você estiver usando mod_php.

Alguém pode explicar o que isso significa?

SpikETidE
fonte

Respostas:

158

mod_phpsignifica PHP, como um módulo Apache .

Basicamente, ao carregar mod_phpcomo um módulo Apache, permite ao Apache interpretar arquivos PHP (aqueles são interpretados por mod_php) .


EDITAR: Existem (pelo menos) duas maneiras de executar o PHP, ao trabalhar com o Apache:

  • Usando CGI : um processo PHP é lançado pelo Apache, e é esse processo que interpreta o código PHP - não o próprio Apache
  • Usando PHP como um módulo Apache (chamado mod_php) : o interpretador PHP é então meio "embutido" dentro do processo Apache: não há nenhum processo PHP externo - o que significa que Apache e PHP podem se comunicar melhor.


E reeditar, após o comentário : usando CGI ou mod_phpé com você: é só uma questão de configuração do seu servidor web.

Para saber qual caminho está sendo usado atualmente em seu servidor, você pode verificar a saída de phpinfo(): deve haver algo indicando se o PHP está rodando via mod_php (ou mod_php5) , ou via CGI.

Você também pode querer dar uma olhada na php_sapi_name()função: ela retorna o tipo de interface entre o servidor da web e o PHP .


Se você verificar os arquivos de configuração do Apache, ao usar mod_php, deve haver uma LoadModulelinha parecida com esta:

LoadModule php5_module        modules/libphp5.so

(O nome do arquivo, à direita, pode ser diferente - no Windows, por exemplo, deve ser a .dll)

Pascal MARTIN
fonte
Usei o xampp para instalar o pacote php, apache e mysql ... Então, qual será a minha configuração?
SpikETidE
Você deve habilitá-lo se o PHP não estiver funcionando atualmente. Se o PHP já estiver funcionando, ele deve estar usando CGI; nesse caso, você provavelmente precisará fazer mais do que apenas habilitar o módulo. O módulo pode nem existir no sistema.
d11wtq
1
Sim..!. Quando executo phpinfo () vejo que mod_php5 está incluído na seção Módulos carregados ... E isso significa que ele está sendo executado como um módulo apache ... certo?
SpikETidE
3
mod_phpé de longe a configuração mais comum.
troelskn
@Pascal, eu diria que mod_phpnão é PHP real; é apenas um complemento do Apache. Ou melhor, acho que você deve começar a resposta com uma definição de O que exatamente o PHP significa?
Pacerier
58

Esta resposta foi retirada do TuxRadar :

Ao executar o PHP através do seu servidor web, existem duas opções distintas: executá-lo usando o CGI SAPI do PHP ou executá-lo como um módulo para o servidor web. Cada um tem seus próprios benefícios, mas, em geral, o módulo é geralmente preferido.

Executar o PHP como CGI significa que você basicamente informa ao seu servidor da web a localização do arquivo executável do PHP, e o servidor executa esse executável, fornecendo a ele o script que você chamou, cada vez que visitar uma página. Isso significa que cada vez que você carrega uma página, o PHP precisa ler php.ini e definir suas configurações, precisa carregar todas as suas extensões e, em seguida, precisa começar a trabalhar na análise do script - há muito trabalho repetido.

Quando você executa o PHP como um módulo, o PHP literalmente fica dentro do seu servidor web - ele inicia apenas uma vez, carrega suas configurações e extensões apenas uma vez e também pode armazenar informações entre as sessões. Por exemplo, os aceleradores de PHP contam com a capacidade do PHP de salvar dados em cache em solicitações, o que é impossível usando a versão CGI.

A vantagem óbvia de usar o PHP como módulo é a velocidade - você verá um grande aumento na velocidade se converter de CGI em módulo. Muitas pessoas, principalmente usuários de Windows, não percebem isso e continuam usando o php.exe CGI SAPI, o que é uma pena - o módulo é geralmente três a cinco vezes mais rápido.

Existe uma vantagem chave em usar a versão CGI, entretanto, é que o PHP lê suas configurações toda vez que você carrega uma página. Com o PHP sendo executado como um módulo, qualquer alteração feita no arquivo php.ini não é iniciada até que você reinicie seu servidor web, o que torna a versão CGI preferível se você estiver testando várias configurações novas e quiser ver respostas instantâneas.

SpikETidE
fonte
@JohannEchavarria, A menos que você tenha adicionado muitas coisas malucas, reiniciar o servidor levará apenas alguns segundos. Para sistemas modernos "normais" com SSD é menos de 2 segundos.
Pacerier
12

Seu servidor precisa ter os módulos php instalados para que possa analisar o código php.

Se você estiver no Ubuntu, você pode fazer isso facilmente com

sudo apt-get install apache2

sudo apt-get install php5

sudo apt-get install libapache2-mod-php5

sudo /etc/init.d/apache2 restart

Caso contrário, você pode compilar o apache com php: http://dan.drydog.com/apache2php.html

Especificar o sistema operacional do servidor ajudará outros a responder mais especificamente.

cado
fonte
5

Isso significa que você deve ter o PHP instalado como um módulo no Apache, ao invés de iniciá-lo como um script CGI.

Ondrej Slinták
fonte
3

Apenas para adicionar essas respostas é que mod_php é o método mais antigo e lento disponível no servidor HTTPD para usar PHP. Não é recomendado, a menos que você esteja executando versões antigas do Apache HTTPD e PHP. php-fpm e proxy_cgi são os métodos preferidos.

Tejas Sarade
fonte
0

mod_php é um interpretador PHP.

A partir do docs, uma captura importante do mod_php é,

"mod_php não é seguro para threads e força você a usar o mpm prefork (multiprocesso, sem threads), que é a configuração mais lenta possível"

kta
fonte