O Apache está baixando arquivos php em vez de exibi-los

92

Informações do sistema operacional e do servidor:

  • CentOS 6.4 (final)
  • Apache 2.2.15
  • PHP 5.5.1

Eu já tinha o php 5.3.x instalado, mas decidi atualizá-lo. Eu primeiro desinstalei o php 5.3.x e depois instalei o php 5.5.1, mas depois que a instalação foi concluída o apache não analisou os arquivos php, apenas baixou-os. Eu verifiquei perguntas semelhantes aqui no stackoverflow, mas nenhuma delas me ajudou até agora.

Para registro, tenho as seguintes linhas em meu httpd.conf e php.conf que deveriam fazer o php funcionar, mas não:

AddHandler application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml
AddType application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml
AddType application/x-httpd-php-source .phps
AddHandler php5-script .php

Eu realmente apreciaria qualquer ajuda. Obrigado.

EDITAR:

Eu tenho essas linhas no php.conf

<IfModule !worker.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>

EDITAR:

Ao remover o

AddType application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml

o apache não baixa mais o arquivo. Agora o apache está mostrando o código-fonte, mas não todo, apenas parte. Eu adicionei

AddType text/html .php

mas sem sorte.

Anthony Gainor
fonte
Bem, como você instalou? Qual SAPI? Veja também Como verificar quais módulos apache estão habilitados / instalados?
mario
2
Seu módulo php não está funcionando.
Sithu
1
verifique httpd.confse o módulo php está comentado ou não
MaveRick
1
Eu editei as perguntas. Os módulos saem e estão sendo carregados aparentemente
Anthony Gainor
Você reiniciou o apache após a instalação?
Ahmad

Respostas:

79

O AddType correto para php é application / x-httpd-php

AddType  application/x-httpd-php         .php
AddType  application/x-httpd-php-source  .phps

Certifique-se também de que seu módulo php está carregado

LoadModule php5_module        modules/mod_php55.so

Quando você estiver configurando o apache, tente visualizar a página de outro navegador - eu tive dias em que o Chrome obstinadamente armazena o resultado em cache e continua baixando o código-fonte enquanto em outro navegador está tudo bem.

Mihkel
fonte
não há caminho de módulos no meu caso
shamaseen
2
Você poderia adicionar algumas informações sobre onde colocar essas linhas?
Sören
6
Para pessoas que procuram onde colocar essas linhas. /etc/httpd/conf/httpd.conf
Siraj Alam
No meu caso, no Apache-2.4.6 + PHP-7.3.13> LoadModule php7_module modules / libphp7.so
shaojun lyu
22

Eu me deparei com esse problema hoje e nenhuma das soluções descritas funcionou para mim. Então, aqui está outra causa possível:

Se você tem algo como

AddHandler x-mapp-php6 .php3 .php4 .php .phtml

em um .htaccessarquivo da pasta de conteúdo da web, pode fazer com que seus scripts PHP parem de funcionar. No meu caso, o servidor não sabia o x-mapp-php6tipo, já que aquele .htaccessarquivo era algo que importei de um host diferente quando transferi o conteúdo do site.

Apenas remover a AddHandlerlinha do .htaccessarquivo resolveu para mim.

Markus
fonte
Perfeito. No meu caso, foi isso AddHandler application/x-httpd-php54 .php54 .phpque teve de ser removido.
Old McStopher
Tive alguns problemas, mas encontrei o arquivo .htaccess culpado no diretório inicial (um diretório acima do diretório web "public_html"). Se alguém mais tiver o mesmo problema, procure .htaccess nos diretórios pais também (as configurações em cascata).
Wireblue
Eu tinha um arquivo .htaccess como este que extraí de um servidor de hospedagem na web. Ele estava forçando uma versão do PHP que não estava instalada na minha máquina local. Portanto, o host virtual não estava executando o arquivo PHP corretamente.
BrightIntelDusk,
É quase certo que esse seja o problema se alguns sites funcionarem e outros não. Joomla .htaccess continha um AddHandler, mas o WordPress não.
Peter Wooster
Isso funcionou para mim, apenas removi essa linha do meu arquivo public / .htaccess e o índice foi carregado.
PA-GW
16

Depois de lutar muito, finalmente resolvi o problema.

Se você for solicitado a baixar um .phparquivo em vez de executá-lo, aqui está a solução perfeita: Presumo que você já tenha instalado o PHP5 e ainda esteja recebendo este erro.

$ sudo su
$ a2enmod php5

É isso.

Mas se você ainda estiver recebendo o erro:

Config file php5.conf not properly enabled: /etc/apache2/mods-enabled/php5.conf is a real file, not touching it

então faça o seguinte:

Acontece que os arquivos não devem ser armazenados em mods-enabled, mas sim emmods-available . Um link simbólico deve ser criado em mods-enabled apontando para o arquivo armazenado em mods-available.

Primeiro remova o original:

$ mv /etc/apache2/mods-enabled/php5.conf /etc/apache2/mods-available/

Em seguida, crie o link simbólico:

$ ln -s /etc/apache2/mods-available/php5.conf /etc/apache2/mods-enabled/php5.conf

Espero que seu problema seja resolvido.

Ravi Shankar
fonte
2
Observe que isso só funciona no Linux (e especificamente no Debian Linux).
Gwyneth Llewelyn
6

Por favor, dê uma olhada nas suas diretivas addtype.

Parece-me que o Apache está informando ao navegador que está enviando um tipo de documento de aplicativo / php para scripts com extensões como .php5. Na verdade, o Apache deve informar ao navegador que o script está gerando texto / html.

Por favor, tente isto:

AddType text/html .php

Em relação à sugestão acima de que você deve informar ao navegador que está gerando um script PHP: Pareceu-me uma ideia incomum. Eu pesquisei e descobri que há muita discussão sobre isso na web. Aparentemente, há casos em que você pode querer dizer que está enviando um script PHP (embora o Apache deva executar o script e emitir texto / html) e também há casos em que o navegador simplesmente não reconhece aquele Mime específico Tipo.

Limpar o cache do navegador é sempre uma boa ideia.

Caso seja útil, aqui está uma cópia do meu arquivo /etc/httpd/conf.d/php.conf de um servidor executando CentOS 5.9:

#        
# PHP is an HTML-embedded scripting language which attempts to make it                                             
# easy for developers to write dynamically generated webpages.                                                  
#
<IfModule prefork.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>

#
# Cause the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php

#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php

#
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
#AddType application/x-httpd-php-source .phps
Sam Azer
fonte
Isso é interessante, mas no meu caso, ele apenas exibe todo o script PHP, desta vez formatado como HTML (em vez de formatado apenas com ASCII) - não é útil! O problema aqui é que o PHP não está sendo executado corretamente de alguma forma, ou os cabeçalhos errados estão sendo enviados ...
Gwyneth Llewelyn
Observe que a última diretiva AddType (comentada no exemplo acima) faz com que um arquivo .phps seja bem impresso em HTML. É possível que a configuração do Apache esteja imprimindo bastante arquivos .php?
Sam Azer
5

Isso pode estar acontecendo devido à falta de módulos necessários para o seu php. Supondo que você tenha php7 instalado, pesquise os módulos php7 disponíveis usando

sudo apt-cache search php7-*

O comando acima irá listar todos os módulos PHP7 disponíveis para instalação. Você pode começar a instalação de módulos como,

sudo apt-get install libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json
Noushad
fonte
4

Se o seu .htaccess tiver algo parecido com isto ... Aplicativo AddHandler / x-httpd-php53 .php .php5 .php4 .php3 então comente e tente atualizar novamente funcionou para mim ...

user252566
fonte
3

Eu tenho o mesmo problema. O Apache não carrega arquivos php de um determinado site, apenas baixado. Eu li este post e as respostas e vi que coloquei esta linha no último lugar do arquivo .htaccess:

AddHandler x-mapp-php5.5  .php

Eu comentei e tudo funciona bem.

Obrigado a todos !!!

Ladislao Garcia
fonte
2

Eu já tive um problema semelhante, após atualizar do 5.3 para o 5.4. Mas minha configuração parece um pouco diferente, já que estou executando o Debian e usando fcgid para servir as páginas PHP, e não o módulo PHP5 apache / cgi. Então, depois que eu atualizei, ele também instalou o php5_cgi, que colidiu com minha configuração do fcgid e não executou mais os arquivos PHP.

Tive que desabilitar o Módulo Apache e reiniciar o Apache

a2dismod php5_cgi
/etc/init.d/apache2 restart

Uma vez que o módulo php5_cgi estava fora do caminho, fcgid foi capaz de servir páginas PHP novamente.

Derchris
fonte
Aww yeah, esse bastardo cgi complicado ^^ Resolveu meu problema depois de atualizar o php 5.3 para 5.4 também do dotdeb.
Emii Khaos de
2

Tive sintomas semelhantes, mas outra solução: em /etc/apache2/mods-enabled/php5.conf, havia um conselho útil no comentário, que segui:

# To re-enable php in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
qbolec
fonte
2

Caso alguém esteja usando php7 em um ambiente Linux

Certifique-se de habilitar php7

sudo a2enmod php7

Reinicie o serviço mysql e Apache

sudo systemctl restart mysql
sudo systemctl restart apache2
MedoAlmasry
fonte
2

Após atualizar o PHP para 7.3, os scripts PHP foram executados com dados www em vez de $ USER como antes.

Eu precisava reinstalar e ativar o PHP-FPM:

sudo apt-get install php-fpm
sudo a2enmod proxy_fcgi setenvif
sudo service apache2 restart
sudo a2enconf php7.3-fpm
sudo service apache2 restart

Para garantir que tudo estava bem para o Virtualmin , usei o assistente de configuração de nova verificação/virtual-server/check.cgi , em Vitualmin / Configurações do sistema .

Depois disso, o Apache / PHP estava baixando arquivos php em vez de executá-los. Então eu precisava editar/etc/apache2/mods-available/php7.3.conf para comentar a linha SetHandler application/x-httpd-phpcomo abaixo:

<FilesMatch ".+\.ph(ar|p|tml)$">
#    SetHandler application/x-httpd-php
</FilesMatch>

Depois de reiniciar o Apache, ele resolveu meu problema, espero que essa ajuda.

Cuide também do cache do navegador.

Meu sistema:

Ubuntu          16.04.6 LTS
Webmin version      1.932
Usermin version     1.780
Virtualmin version  6.08
Apache version      2.4.41
PHP versions        7.3.12
PHP-FPM         7.3.12 Server
freak0
fonte
1

Passei dois dias rastreando isso e descobri que estava colocando meus scripts PHP no diretório errado.

Na minha instalação padrão do Ubuntu, coloquei os scripts /var/www. Eles deveriam ter estado em/var/www/html .

Acabei de começar o trabalho com PHP, então não sei se minha solução está relacionada à mudança de versão que você fez.

Craig Smilovitz
fonte
1

isso resolveu o problema para mim (eu tenho php7 instalado):

sudo apt-get install libapache2-mod-php7.0

sudo service apache2 restart

Marouen Mhiri
fonte
1

Eu tive esse problema. Descobri que eu tinha o nginx e o apache instalados e iniciando automaticamente na inicialização. O problema era que o nginx estava se conectando à porta http primeiro, o que impedia o apache de iniciar.

pastor
fonte
1

Também é possível que você tenha o nginx rodando, mas seu php está configurado para rodar com o apache. Para verificar, execute service nginx statuse service apache2 statusveja qual está rodando. No caso de o nginx estar rodando e o apache não, apenas rode sudo service nginx stop; sudo service apache2 starte seu servidor irá servir os arquivos php como esperado.

hexículo
fonte
1

Ok ... Eu sei que já existem 1.000.000 de respostas para essas questões, - mas eu gastei pelo menos 6 horas efetivas, descobrindo esta; e eu pesquisei centenas de vezes e não encontrei um único post sobre isso. Então, decidi adicionar a solução para o meu problema aqui.

A conclusão

Se eu comentar essas duas linhas em meus arquivos .conf no /etc/apache2/[[SERVER-NAME].conf-file:

php_admin_value engine Off
IPCComTimeout 31

Não tenho ideia do que eles fazem ou como chegaram lá, - mas está em cada um dos meus .confarquivos. E se eu remover essas linhas e garantir que há um link simbólico na /etc/apache2/sites-enabled/pasta, então ele não baixa o index.php - e tudo funciona como deveria.

Toda a história

Eu tenho o VirtualMin instalado em um Ubuntu 16.04 VPS. Eu atualizei para o PHP versão 7.2. Pouco depois disso, atualizei a versão do Ubuntu e encontrei um erro 'Kernel Offset: Disabled'. Então eu tive que excluir a última versão do Ubuntu, - e quando meu sistema operacional inicializou novamente: BOOM! Recebi o erro sobre o qual seu post fala: Para cada site no meu VPS, simplesmente baixei o index.php em vez de mostrá-lo.

Eu tentei todos os tipos de coisas:

  • PHP7.2 removido e PHP5.6 instalado (eu sei agora, que a versão do PHP não tem nada a ver com isso; é a configuração do apache que precisa funcionar).
  • Tentei habilitar e desabilitar módulos apache, na instalação existente, mas sem sorte.
  • Então eu removi o apache completamente e instalei novamente, onde o problema ainda estava lá!
  • Tentei brincar com a configuração do Virutal Server no VirtualMin (Webmin >> Servers >> Apache Webserver).
  • Verifiquei a configuração em um único servidor virtual (Virtualmin >> Configurações do sistema >> Verificar novamente a configuração) ... Este passo foi bem legal, pois dizia qual módulo do Apache estava faltando; onde depois eu poderia habilitá-lo coma2enmod [MODULE_NAME] . E eu encontrei o nome do módulo pesquisando por aí. Tive que ativar cerca de 6 a 8 módulos antes de passar essa etapa na validação - e levou alguns minutos até que o cache se esgotasse -, portanto, fazer essa etapa foi uma tarefa tediosa.
  • E, por último, descobri a conclusão escrita acima - junto com os links simbólicos - e então comecei a trabalhar. Eu tive que passar por isso para cada site em meu VPS, no entanto.
Zeth
fonte
0

Tive um problema semelhante ao OP ao atualizar o php5 de uma versão mais antiga, para 5.5.9, que é a versão instalada com o Mint 17.

Estou executando uma configuração LAMP em uma máquina em minha rede local, que uso para visualizar as alterações em sites antes de carregá-las no servidor real. Portanto, mantenho um espelho local perfeito do site real.

Após a atualização, os arquivos executados e exibidos perfeitamente no site real não seriam exibidos, ou apenas exibiriam html na máquina local. PHP não foi analisado. O comando phpinfo () funcionou, então eu sabia que o php estava funcionando de outra forma. O log não gerou erros. A visualização do código-fonte da página me mostrou o código PHP real.

Eu construí uma página test.php que continha o seguinte código:

<?php phpinfo(); ?>

Isso funcionou. Então descobri quando mudei <?phppara <?o comando não funcionava mais. Todos os meus sites php usam em <?vez do <?phpque pode não ser ideal, mas é a realidade. Corrigi o problema indo para / etc / php5 / apache2, procurando por "short_open_tag" e alterando o valor de Desligado para Ligado.

Escorregar
fonte
0

Se nenhuma das opções acima funcionar,

tente comentar a linha

SetHandler ....

e reinicie o apache usando

/etc/init.d/httpd restart

Deve funcionar!

Cosmo Arun
fonte
0

PHP56

vim /etc/httpd/conf/httpd.conf

LoadModule php5_module        libexec/apache/libphp5.so
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Roberto Carlos Reyes Fernandez
fonte
0

Eu tenho esse tipo de problema. É assim que eu resolvo. Depois de instalar o Apache , instalei o PHP usando este comando.

sudo apt-get install php libapache2-mod-php

ele executa corretamente, mas eu solicito o arquivo .php do Apache, ele dá sem executar o script PHP .

Então eu verifico que o PHP está habilitado.

$ cd /etc/apache2
$ ls -l mods-*/*php*

mas não mostrou nenhum resultado. Eu verifico os pacotes PHP instalados.

$ dpkg -l | grep php| awk '{print $2}' |tr "\n" " "

Diferentes tipos de versões de PHP instaladas no meu computador. Então, removo alguns pacotes PHP da minha lista anterior, usando apt-get purge .

sudo apt-get purge libapache2-mod-php7.0 php7.0 php7.0-cli php7.0-common php7.0-json

Eu reinstalo o PHP

sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql

Verifique se o módulo PHP está carregado

$ a2query -m php7.0

se não habilitado com:

$ sudo a2enmod php7.0

Reinicie o servidor Apache

$ sudo systemctl restart apache2

Finalmente, eu verifico o processo PHP no Apache

crie um arquivo vazio

sudo vim /var/www/html/info.php

Adicione este conteúdo a info.php e salve.

<?php
  phpinfo();
?>

Verifique no navegador:

http: //localhost/info.php

mostra corretamente. Acho que isso vai ajudar alguém.

Janaka Pushpakumara
fonte
0

Eu tive esse problema e se você nunca mexeu nas configurações do seu servidor, então o seu problema está 90% no seu arquivo .htaccess

Você pode modificar o arquivo .htaccess LOCALMENTE ou excluí-lo (LOCALMENTE)

Dia
fonte
0

Se você tiver o virtualmin, tente comentar essas linhas na configuração do apache em / etc / apache2 / sites-available

  #RemoveHandler .php
  #RemoveHandler .php7.0
  #php_admin_value engine Off
TomoMiha
fonte
0

Quando eu atualizei do PHP 7.2 para o PHP 7.4, também tive o mesmo problema. Trabalhou fazendo o seguinte: -

  1. Em [domain].conf file, comentou a seguir:

    php_admin_value engine Off

E acrescentou:

AddType  application/x-httpd-php-source  .phps
AddType text/html .php
  1. Desative o mod 7.2 e ative 7.4 da seguinte forma:

    a2dismod php7.2
    a2enmod php7.4

  2. No /etc/apache2/mods-enabled/php7.4.confarquivo, comente a seguir:

    SetHandler application / x-httpd-php
    php_admin_flag engine Desligado

Clint
fonte
0

Para as pessoas que encontraram esta postagem do Google quase 6 anos no futuro (e além!), Você pode encontrar esse problema com o Apache 2 e o PHP 7 enquanto usa o UserDirmódulo.

Outra possível causa desse problema pode ser que você está tentando executar o script em um "diretório do usuário" do UserDirmódulo. A execução de scripts PHP em diretórios de usuário está desabilitada por padrão. Você terá esse problema se o script estiver no public_htmldiretório da sua pasta pessoal e você estiver tentando acessá-lo de http://localhost/~your_username.

Para consertar isso, abra /etc/apache2/mods-enabled/php7.2.conf. Você deve comentar ou excluir o bloco de tag na parte inferior que diz

<IfModule mod_userdir.c>
    <Directory /home/*/public_html>
        php_admin_flag engine Off
    </Directory>
</IfModule>
mevers303
fonte
-1

Se o seu .htaccess tiver algo assim

AddType application/x-httpd-ea-php56 .php .php5 .phtm .html .htm
Subash Pandey
fonte