Apache mostra o código PHP em vez de executá-lo

107

Recentemente, tentei instalar o PHP e o Apache no meu computador. Depois de muitas horas, eles estão instalados. Eu modifiquei os arquivos httpd.conf e php.ini como todo mundo diz. Em seguida, criei um script PHP simples:

<?php phpinfo(); ?>

Mas quando tento executá- http://127.0.0.1/phpinfo.phplo apenas mostra o código-fonte em vez de executá-lo. Estou usando Apache 2, PHP 5 e Windows Vista.

LINHAS EDITADAS:

PHP.INI:

short_open_tag = On

HTTPD.CONF

LoadModule php5_module "C:/php/php5apache2_2.dll"
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
PHPIniDir "C:/php"
imulsão
fonte
em phpinfo.php você adicionou alguns cabeçalhos que tornam o arquivo .php legível?
@Peteris não, todo o meu script está na minha dúvida
imulsão
tente um script simples: <?php echo "Hello world"; ?>ele exibe Olá, mundo? se mostra o código então como @RabNawaz disse que seu servidor não está configurado corretamente!
Apenas exibe o código novamente :(
imulsion
1
de onde você está acessando seu arquivo php? observe que para executar o arquivo php pelo seu servidor, você precisa colocar seus arquivos no diretório raiz da web adequado. e acesse-o em seu navegador como http://localhost/ouhttp://127.0.0.1/
Ibrahim Azhar Armar

Respostas:

90

Você deve habilitar o php! Verifique a pasta mods-enabledno diretório Apache (padrão /etc/apache2/:) para ver se você encontrou um arquivo chamado php. Não me lembro da extensão, mas acho que é .so.

Verifique também /var/log/apache2/error.logse há outros erros.

Daniel Figueroa
fonte
8
você executou: a2enmod php5
Daniel Figueroa
6
não há pasta mods_enabled no meu diretório apache
imulsion
@imulsion no meu caso foi habilitado para mods em / etc / apache2 /
Silveri
6
No meu caso para php7, tive que fazer a2enmod php7.0e resolveu meu problema. Demorou um dia inteiro para chegar a este post de alguma forma!
Rorschach de
3
Não há nenhum arquivo chamado phpno mods-enabled, e agora? Esta resposta não explica as coisas
Preto,
61

Uau, muitas soluções aqui! Aqui está o que fiz no Ubuntu 16.04 :

sudo apt-get install php libapache2-mod-php
sudo a2enmod mpm_prefork && sudo a2enmod php7.0
sudo service apache2 restart
Helmy
fonte
Funcionou para mim adicionando --reinstallao apt-get. Talvez a instalação do módulo php / apache esteja suja.
Glastis
Isso funcionou para mim no servidor Ubuntu 16.04 da Digital Ocean. Obrigado
Sushant Bhargav
isto dá-me os seguintes erros: Considering conflict php5 for php7.0, Considering conflict mpm_worker for mpm_prefork, etc ... e apache2 restart falhar
mrid
Se você conseguir, Considering conflict php5 for php7.2vá para /etc/apache2/mods-availablee excluaphp5.*
Simon Epskamp
39

Para PHP 7 (pode se aplicar a versões anteriores também), mas eu tive que fazer isso:

Adicione isso ao final de /etc/apache2/apache2.conf

<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>

Execute a partir do terminal:

sudo a2dismod mpm_event && sudo a2enmod mpm_prefork && sudo a2enmod php7

Então não se esqueça de reiniciar o Apache para que ele saiba que você mudou algumas coisas:

sudo service apache2 restart

Este é um resumo de: https://www.atlantic.net/community/howto/try-php7-lamp-ubuntu-14-04/

RyanNerd
fonte
3
Eu tive que fazer isso para PHP 5.6 no OSX El Capitan. (Usando Apache estoque, mas php56 homebrew)
rfay
1
Funciona no Windows também (o que significa que você não precisa executar os comandos de terminal no Windows) Obrigado por me salvar pesquisas intermináveis.
che-azeh
ao instalar a partir da fonte, esta correspondência de arquivos foi necessária. (o config e o make etc. habilitam o módulo em httpd.conf para mim, mas não adicionei este.)
user7296055
Há um bilhão de comentários no arquivo httpd.conf de amostra; alguém pode explicar por que não há um para php? Não é uma coisa raramente usada.
Danial
@Danial httpd.apache.org/support.html tem vários métodos onde você pode encontrar documentos, relatar bugs e fazer perguntas (como por que não existe um exemplo
lógico
24

abra o arquivo

/etc/apache2/httpd.conf

e mudar

#LoadModule php5_module libexec/apache2/libphp5.so

para dentro

LoadModule php5_module libexec/apache2/libphp5.so

Então, apenas descomente o carregamento do módulo PHP em httpd.conf

inigo333
fonte
No meu caso, a linha começou com php7_module - mas fora isso funcionou para mim!
b0rgBart3
6

Uma resposta diferente que funcionou para mim. É isso, para instalar[sudo] apt-get install libapache2-mod-php5.X

Simon Mohoalali
fonte
1
O meu era semelhante. Eu fiz "sudo apt-cache search ^ libapache2 | grep php" que encontra os pacotes relevantes e depois instalei "sudo apt-get install libapache2-mod-php". libapache2-mod-php7.0 já foi instalado.
VectorVortec
3

Tudo bem, se você tentou o que lhe foi dito acima ou antes (que são os motivos possíveis) e ainda exibe o código em vez de executá-lo, então há algo que você está fazendo de errado que não foi resolvido. O url que você usou para acessar seu código php; algumas pessoas tentam executar seu código php apenas arrastando o arquivo .php para o navegador. esta é uma prática errada e pode levar a este tipo de problema. se você salvou um arquivo como "test.php" na pasta C: // wamp / www, você deve acessar este arquivo desta forma: localhost: //test.php. esse tipo de erro surgirá quando você acessá-lo desta forma: localhost: //wamp/www/test.php

Espero ter ajudado alguém aí. o / ~ Daniel

DAniel
fonte
3

Postar o que funcionou para mim no caso de ajudar alguém no futuro, embora seja um caso incomum.

Eu configurei um manipulador para forçar meu host da web a usar uma versão superior do php do que o padrão. Havia 5.1, mas eu queria 5.6 então eu tinha este:

<FilesMatch \.php$>
    SetHandler php56-cgi
</FilesMatch>

no meu arquivo .htaccess.

Ao tentar executar meu site localmente, isso fez com que o código php fosse enviado para o navegador. Removê-lo resolveu o problema.

evanmcd
fonte
3

O Apache mostra o código php em vez de executar o problema corrigido

1. Php5.6 conf aberto ou php7.x conf

# seguinte comando:

$ sudo vi /etc/apache2/mods-enabled/php5.6.conf

2. Comentado nas seguintes linhas

insira a descrição da imagem aqui

3. Reiniciou o servidor

$ sudo service apache2 restart

4 Aproveite :)

Matthew Farrell
fonte
2

Você pode excluir seu arquivo .htaceess e permitir que o sistema crie um novo (em branco ou básico). Pode ser que algumas linhas que você adicionou sejam declarações incorretas ou alguma outra coisa interna esteja causando o problema. Você pode adicionar linha por linha do seu arquivo .htaccess antigo para ver o que causou o problema.

Isso funcionou para mim. As linhas dizendo à máquina para não exibir extensões php foram um problema no meu caso ( RewriteCond e RewriteRule ). Meu antigo arquivo .htaccess funcionava bem em um servidor compartilhado, mas esse problema apareceu quando mudei para VPS.

bokistack
fonte
Além disso, se você se deparar com a estupidez do CORS: execute sudo a2enmod headerse sudo a2enmod rewrite(não se esqueça de reiniciar o Apache).
RyanNerd
2

Obrigado a outras pessoas neste tópico por suas sugestões. Seguindo as etapas mencionadas, descobri que o servidor apache não foi capaz de começar a relatar um erro de sintaxe em um loadarquivo no /etc/apache2/mods-enabled. Acontece que ambos php7.0 e php7.1 foram habilitados.

a2dismod php7.0
systemctl restart apache2

e o php é renderizado corretamente novamente.

djnz0feh
fonte
1

se o módulo userdir estiver habilitado e seu site estiver em um userdir (~ / public_html), você deve verificar /etc/apache2/mods-enabled/php5.conf. A parte a seguir faz com que funcione (no Ubuntu 14.10 utópico):

# Running PHP scripts in user directories is disabled by default
# 
# 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.

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

Se você for um usuário ubuntu, após instalar o apache deve executar o seguinte comando na instalação nova

sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt

No meu caso funciona bem.

Hasan Baig
fonte
1

O que funcionou para mim:

Em httpd.conf ativo, encontre

<IfModule mime_module>
...
</IfModule>

Estava faltando o seguinte

AddType application/x-httpd-php .php
AddHandler application/x-httpd-php .php

Depois de reiniciar o apache, os arquivos .php são analisados ​​corretamente.

Paulo
fonte
1

nenhuma das opções acima se aplica ou funcionou para mim ... PHP7, Apache Httpd 2.2 no CentOS 6

fato é que eu instalado (todos com yum) php ANTES Apache ... você deve fazer o inverso: sempre instale Apache em primeiro lugar, em seguida, PHP, e, em seguida, ele funciona ... Na verdade, você provavelmente está faltando libphp7.soe libphp7-zts.soem/etc/httpd/modules/

Consegui me recuperar de qualquer maneira sem desinstalar o PHP. Eu adicionei a linha mágica em /etc/httpd/conf/httpd.conf: AddType application/x-httpd-php .php E então executei:yum install php php-mysql

Berhauz
fonte
1

Para PHP7 e Apache2.4, isso é tudo que você precisa fazer:

sudo vim /etc/httpd/conf/httpd.conf

Vá até o final e insira o seguinte (sozinho):

<FilesMatch "\.*">
SetHandler application/x-httpd-php
</FilesMatch>

O Apache agora executará tudo com PHP. Se tudo o que você tem são arquivos html e php, isso funcionará bem para você. Se você tiver outros tipos de arquivos, precisará adaptar o arquivo de acordo com sua situação. Eu testei isso com phpMyAdmin e não parece haver um problema ... até agora.

Nenhuma daquelas outras coisas de que todas as pessoas estão falando aqui era necessária para mim. Quando coloquei "AddType Application ....." no local correto, o Apache apenas me disse que aquele módulo já estava carregado e o ignorou.

Mais informações podem ser encontradas aqui: https://httpd.apache.org/docs/2.4/mod/core.html#filesmatch

Minha instalação foi feita da seguinte maneira:

sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd

Você também deve ler isto, se ainda não o fez: https://httpd.apache.org/docs/current/howto/htaccess.html#when

Adam Winter
fonte
0

Isso estava acontecendo comigo também ao executar $ _POST no MAMP. Todos os meus arquivos .ini e httpd foram configurados corretamente. Se você estiver fazendo o tratamento de formulários e tiver um documento html e postar as informações em um manipulador de formulários php executando $ POST, certifique-se de que está executando o arquivo html do localhost através do seu servidor, e não apenas localmente.

Este foi um atalho que fiz para rodar documentos html, bastando clicar no arquivo html do meu diretório e lançar no meu navegador, quando na realidade para verificar se o php está sendo processado no seu formulário, você deve rodar o html nos seus servidores. Um protocolo muito simples que esqueci.

Exemplo:

Errado: file:///Applications/MAMP/htdocs/form/form.html

Certo: http://localhost:your port number/form/form.html

Agora, o php deve ser processado assim que você clicar no botão de envio

maidenastraea
fonte
0

Eu tive o mesmo problema, causado pela configuração padrão do módulo Debian / Ubuntu suphp. Ele continha suPHP_Engine offpara todo o / usr / share, o que resultou na exibição das fontes php no navegador. Desativar com a2dismod suphpera a solução provisória.

Torsten Knodt
fonte
0

Eu tive o mesmo problema. Quando executo um arquivo php, o navegador da web me mostra o código php em vez de executá-lo. Já tentei várias vezes: desinstalar / reinstalar o wampserver64, contornar as configurações / módulos PHP / Apache, etc. Após 2 dias: percebi isso quando tentei executar o arquivo php no notepad ++ pressionando a combinação padrão "ctrl + alt + shift + R "para cromo. Ele estava tentando executar meu arquivo php como: "file /// C: / wamp64 / www / bla / bla .." na barra de endereços do meu cromo. Esse foi o meu problema. Fiz as alterações de acordo com a página Configurando o Notepad ++ para executar php no localhost? . Meu problema foi resolvido. Mas depois de 2 dias ..

mecânico
fonte
0

Execute o Xampp (apache) como administrador. No google chrome digite:

localhost/<insert folder name here>/<insert file name>

ou seja, se a pasta que você criou é "LearnPhp", o arquivo é "capítulo1.php" e digite

localhost/LearnPhp/chapter1.php

Eu criei esta pasta na pasta xampp na pasta htdocs que é criada quando você baixa o xampp.

Aquasar
fonte
0

Solução Debian 9:

touch /etc/apache2/conf-available/php.conf 

Adicionar ao arquivo as próximas linhas:

<IfModule mod_php5.c>
    <IfModule mod_mime.c>
        AddType application/x-httpd-php .php
    </IfModule>
    <FilesMatch ".+\.php$">
        SetHandler application/x-httpd-php
    </FilesMatch>
</IfModule>
<IfModule mod_php.c>
    <IfModule mod_mime.c>
        AddType application/x-httpd-php .php
    </IfModule>
    <FilesMatch ".+\.php$">
        SetHandler application/x-httpd-php
    </FilesMatch>
</IfModule>

Então corra:

a2enconf php && service apache2 restart
mrDinkelman
fonte
Isso funcionou para mim, mas não inicialmente. Estou executando conteúdo da web em diretórios de usuários, que estão desabilitados por padrão. Para habilitar isso, consulte a última seção em/etc/apache2/mods-available/php7.2.conf
Tony Adams
0

Algumas vezes se você tiver conflitos de versão php isso acontece Para superar isso por favor siga os passos abaixo

Etapa 1: Lista Yum instalada | grep 'php'

se você tiver várias versões do php como php 5.6 e php 7.0, este conflito acontecerá

Etapa 2: yum remova ** sua versão php **

Etapa 3: reinicie o apapche /etc/init.d/httpd restartouservice apache2 restart

sachin_ur
fonte
0

Essa solução funcionou para mim. Limpei o apache2 e reinstalei. Aconteceu depois de limpar e instalar. Se for a primeira instalação, você não enfrentará esse problema.

Kemal Atik
fonte
0

Tentei várias das soluções acima, mas a correção em nosso cenário foi instalar o módulo fpm.

Instalamos o httpd antes do php, o que pode ter algo a ver com o problema, mas para resolver, instalamos o seguinte:

yum module install php: 7.2

Isso instalou o módulo php-fpm-7.2.11-4.module + el8.1.0 + 5443 + bc1aeb77.x86_64.rpm, que então habilitamos por:

systemctl enable --now php-fpm

A partir desse ponto, deixamos o /etc/httpd/conf.d/php.conf como padrão e reiniciamos o httpd

reiniciar serviço httpd

Então tudo funcionou.

Espero que isso ajude, demorou muito mais do que deveria para descobrir.

Bren1818
fonte
0

Adicionar a seguinte configuração a /etc/apache2/apache2.conf

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>

E reinicie o apacheviasudo service apache2 restart

Imran Zahoor
fonte