O código PHP não está sendo executado. Em vez disso, o código é exibido na página


320

Estou tentando executar algum código PHP em um projeto (usando o Dreamweaver), mas o código não está sendo executado.

Quando verifico o código fonte, o código PHP aparece como tags HTML (posso vê-lo no código fonte). O Apache está funcionando corretamente (estou trabalhando com o XAMPP), as páginas PHP estão sendo abertas corretamente, mas o código PHP não está sendo executado.

Alguém tem alguma sugestão sobre o que está acontecendo?

Nota: O arquivo já está nomeado comofilename.php

Edit: O Código ..:

<?
include_once("/code/configs.php");
?>

A impressão


44
Você está usando tags curtas em <?vez de <?php?
Dan Grossman

28
NUNCA use tags curtas. ( <?) Eles estão obsoletos, realmente não funcionam em muitos lugares e, de outra forma, são completamente desnecessários. Salvar três pressionamentos de tecla não é um motivo válido para permitir que seu código falhe provavelmente em metade dos servidores nos quais ele pode ser executado.
Mpsyd

10
@mopsyd Onde diz que as tags curtas estão obsoletas? Observe que as tags curtas não são iguais às tags de eco curto , e as tags de eco curto são suportadas por padrão desde o PHP 5.4, independentemente da short_open_tagconfiguração.
Kyle Anderson

5
Estou ciente de que as tags curtas não são tags de eco curto, e foi por isso que especifiquei sobre o que estava falando no comentário. No momento da redação deste artigo, as tags curtas eram sinalizadas como obsoletas para o lançamento do php 6, embora isso aparentemente tenha mudado desde então. Ainda existe o problema de muitos servidores os desativarem, o que torna seu código significativamente menos portátil. Isso não se aplica a tags de eco curtas ( <?=), que devem funcionar bem no php 5.4+, independentemente das configurações do servidor.
mopsyd

3
conversa boba sobre tags curtas. Tags longas são péssimas e feias. Eu nunca tive um problema em 10 anos de programação php. Eles quase nunca são o problema #
711 Danial

Respostas:


418

Parece que há algo errado com sua configuração. Aqui estão algumas coisas que você pode verificar:

  1. Verifique se o PHP está instalado e funcionando corretamente. Isso pode parecer bobagem, mas você nunca sabe. Uma maneira fácil de verificar é executar a php -vpartir de uma linha de comando e ver se retorna informações sobre a versão ou se há algum erro.

  2. Certifique-se de que o módulo PHP esteja listado e descomentado dentro do httpd.conf do seu Apache. Isso deve ser algo como LoadModule php5_module "c:/php/php5apache2_2.dll"no arquivo. Procure LoadModule phpe verifique se não há nenhum comentário ( ;) na frente dele.

  3. Verifique se o arquivo httpd.conf do Apache possui o tipo PHP MIME. Isso deve ser algo como AddType application/x-httpd-php .php. Isso diz ao Apache para executar .phparquivos como PHP. Pesquise AddType e verifique se há uma entrada para PHP e se ela não é comentada .

  4. Verifique se o seu arquivo possui a .phpextensão, ou a extensão especificada na definição MIME no ponto 3, caso contrário, ele não será executado como PHP.

  5. Verifique se você não está usando tags curtas no arquivo PHP ( <?), pois elas não estão ativadas em todos os servidores por padrão e seu uso é desencorajado. Use em <?phpvez disso (ou ative tags curtas no seu php.ini com short_open_tag=Onse você tiver um código que dependa delas).

  6. Verifique se você está acessando seu arquivo pelo servidor da Web usando um URL como http://localhost/file.phpnão o acesso local a arquivosfile://localhost/www/file.php

Por fim, verifique o manual do PHP para obter mais dicas de configuração .


14
Não sei por que, mas o instalador do PHP 5.3.15 não adiciona a linha AddType application/x-httpd-php .php. Muito obrigado!!
MatuDuke

7
@shmeeps: onde você viu que tags curtas estão obsoletas? Eu fiz algumas pesquisas e só posso encontrar recomendações contra eles, nada sobre depreciação. Concedido para aplicativos que serão distribuídos, é melhor usar <? Php, caso o servidor de hospedagem não os tenha habilitado, mas para aplicativos em que você tenha controle total sobre o servidor em que eles estarão, eu não veja algum motivo para não usá-los.
ClarkeyBoy

3
apontar no 6 trabalhou para mim .. acesso local não usa o servidor apache
KawaiKx

6
O ponto 2 funcionou para mim da maneira segura apt-get purge apache2; apt-get install apache2 libapache-mod-php5
#

1
@full_prog_full Tente fazer upload de um arquivo com uma .phpextensão com o conteúdo <?php echo("Success"); ?>e veja se o acesso ao arquivo através de um navegador da Web resulta na exibição de "Sucesso" sem o código PHP associado.
shmeeps

61

php7:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.0-fpm
sudo service apache2 restart

24
Embora esse trecho de código possa resolver a questão, incluindo uma explicação de como e por que isso resolve o problema realmente ajudaria a melhorar a qualidade da sua postagem. Lembre-se de que você está respondendo à pergunta dos leitores no futuro, não apenas à pessoa que está perguntando agora! Por favor edite sua resposta para adicionar explicação, e dar uma indicação do que limitações e premissas se aplicam.
Toby Speight

4
Esta resposta está relacionada ao Linux, o topicstarter está claramente usando o Windows.
Raymond Nijland

3
@RaymondNijland true, mas isso é canônico e eu encontrei essa pergunta e ela me salvou após mais de uma hora de solução de problemas.
Ganso

Como e por que: isso acontece quando o PHP7 não configura o serviço CGI rápido padrão no script make. sudo a2enmod proxy_fcgi setenvifcria três novos mods /mods-available/proxy.conf proxy_fcgi.load proxy.loadDa mesma forma, sudo a2enconf php7.0-fpmcria um arquivo de configuração /conf-available/php7.0-fpm.confDepois que isso for feito, o Apache2 poderá executar o módulo PHP7 como um serviço de CGI rápido.
precisa saber é o seguinte

33

Estou executando o Apache no Ubuntu e meu problema foi que o /etc/apache2/mods-available/php5.confarquivo estava ausente:

<FilesMatch ".+\.ph(p[345]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

Eu o adicionei novamente e o php estava analisando os arquivos php corretamente.


31

nota para usuários do php 7, adicione isto ao seu arquivo httpd.conf:

# PHP 7 specific configuration
<IfModule php7_module>
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
    <IfModule dir_module>
        DirectoryIndex index.html index.php
    </IfModule>
</IfModule>

4
Apenas para ajudar outras pessoas com esse problema. O httpd.confarquivo está localizado em /etc/apache2/httpd.confSe você estiver usando o Ubuntu, ele estaria apache2.confno mesmo diretório que precisa ser modificado para o PHP7.
Ahmed Sagarwala

23

Encontrei outro problema causando esse problema e já o resolvi. Salvei acidentalmente meu script na UTF-16codificação. Parece que o PHP5 não pode reconhecer a <?phptag na codificação de 16 bits por padrão.


18

Estou postando esta resposta porque minha interface de administração do Virtualmin / Webmin decidiu que era uma boa idéia desabilitar meu mecanismo PHP. Demorei um pouco para encontrar a solução, então pensei em compartilhar com vocês:

Além disso, verifique se nenhum dos arquivos de configuração do seu site relacionados a esse host ou host virtual específico possui php_admin_value's que desativam o PHP, assim:

php_admin_value engine Off

Em caso de dúvida, comente ...

# php_admin_value engine Off

E reinicie seu servidor da web.


1
Onde estão essas configurações exatamente?
cronoklee

2
@cronoklee Nas configurações de vHost do httpd.conf. Para hosts existentes, você precisa editar a configuração do apache no webmin. Para futuros hosts, vá para virtualmin> modelo de servidor> site apache. De qualquer forma, isso não é tão seguro quanto o fastcgi - o padrão do virtualmin. Portanto, a abordagem correta deve ser a de solucionar por que o fcgi não funciona, por exemplo, pode ser causado por permissões de arquivo.
Sheepy 9/09/16

Se você estiver usando uma versão do Apache que não possui httpd.conf, consulte /etc/apache2/mods-enabled/php7.conf ouphp5.conf
Sam Malayek

Em caso de dúvida sobre a localização de uma determinada configuração, você sempre pode usar o grep para encontrar o que você está procurando por (por exemplo, neste caso) digitando:sudo grep php_admin_value /etc/* -R
Henry van Megen

17

Você está apenas abrindo seu arquivo php no navegador. Você precisa abri-lo usando o URL do host local. se você abrir um arquivo diretamente do seu diretório, ele não executará o código php em nenhum caso.

use: http://locahost/index.phpouhttp:127.0.0.1/index.php

Ativar código curto php. No seu caso, você está usando o <?qual é um código curto php <?php. Por padrão, os códigos curtos de php estão desativados.

Também use: sudo apt-get install php5 libapache2-mod-php5 php5-mcryptse você é um usuário do Ubuntu.


1
Por que o mcrypt é necessário quando estou apenas incluindo um arquivo? Você deve notar que esta pergunta é antiga e que o problema das tags curtas foi mencionado 16 vezes, também no comentário principal da minha pergunta.
Gui

1
Acabei de compartilhar minha solução, também estava enfrentando o mesmo erro e depois de executar este comando do mcrypt meu problema foi resolvido. você também pode tentar.
precisa

por padrão, os códigos curtos de php estão ativados. short_open_tag = On (Valor padrão = ON) no php 5.6
zond

Este foi o meu problema, meu virtualmin / apache configuração era para 127.0.0.2, mas eu estava colocando o meu endereço IP externo no navegador, eu só atualizou o meu v / a configuração e agora seu trabalho
Hayden Thring

Eu estava sentindo falta do libapache2-mod-php7.3.
dxvargas

8

Eu sei que deve parecer bobagem ... mas raramente acontece.

Verifique se você está tentando executar o php de

**http://localhost/info.php**

e não de

file:///var/www/info.php

ps> você pode perceber que se você escrever a partir do shell

php info.php 

responde com o código (significa funções php) ..


O PHP funciona bem (verificado usando a linha de comando). mas, quando eu acesso o arquivo usando URL, ele mostra o código PHP.
muaaz

8

Isso aconteceu comigo de novo, junto com o servidor baixando arquivos html, em vez de processá-los. Eu não usava o servidor apache há algum tempo no computador e, enquanto isso, o Ubuntu atualizava como mais duas versões do LTS originalmente instalado. Agora é

$ cat /etc/issue
Ubuntu 16.04 LTS

Então o php funcionou depois da seguinte maneira:

$ sudo apt-get install lamp-server^
$ sudo a2enmod php7.0
$ sudo service apache2 restart 

O servidor web estava agora analisando o php. Talvez agora tenha que atualizar algumas webs desde o php7.0 agora executando onde estava antes de executar o php5. Ah bem.


5

Eu resolvi isso desinstalando o XAMPP e instalando o WAMP. Obrigado pela ajuda.


Eu sou xampp, mas funciona bem. você descobriu por que estava mostrando o código php @Gui
Pie

5

Eu enfrentei esse problema no php 7.1 que vem com o High Sierra (OS X 10.13.5), a edição /etc/apache2/httpd.confcom as seguintes alterações ajudou:

  1. Remova o comentário desta linha

    LoadModule php7_module libexec/apache2/libphp7.so
  2. Cole a seguir no final

    <IfModule php7_module>
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php-source .phps
    
        <IfModule dir_module>
            DirectoryIndex index.html index.php
        </IfModule>
    </IfModule>

Da mesma forma, você pode sugerir o mesmo erro da versão Wamp 3. Não há caminho da pasta /etc/apache2/httpd.conf no wamp 3. @AamirR
Gem

Isso funcionou para mim !!! A minha era uma questão mais estranha. Alguns arquivos renderizados no PHP e outros não exibiram o código.
sjw0525

4

no meu ubuntu 14.04, apache 2.4, instalação do php 5.5.9, tentei com um sample.php em / var / www / html (raiz padrão do documento) e funcionou bem. Portanto, o problema estava na minha configuração de Servidores Virtuais. A solução foi incluir, no diretório Def que contém o .php, esta linha:

    php_admin_flag engine on

e onde devo adicionar esta linha no arquivo Apache no httpd.conf do meu servidor virtual? e eu estou usando Webmin
pareek suresh

4

Verifique se o script contém

<?php

antes do código que deve ser executado. Não deve haver espaço entre <?e phpnisso.


3

Eu tive um problema semelhante, mas no meu caso a solução foi diferente. meu arquivo que continha o código php foi chamado "somename.html" e mudou para "somename.php" funcionou bem


Isso também resolveu para mim. Alguém sabe se o servidor irá executar o php em um arquivo .html ou o final do arquivo sempre precisará ser alterado para .php quando houver uma linha de php a ser executada?
full_prog_full

depende das configurações do servidor, na maioria dos casos, o código php existente em anyfile.html será executado. e se isso não acontecer, pode ser alterado, apesar de como: P
Netrus 4/16/16

3

Para uma nova configuração do LAMP executando o php 7, edite o arquivo /etc/httpd/conf/httpd.conf Nota: certifique-se de fazer backup antes de alterar qualquer coisa.

Cole isso na parte inferior do arquivo:

<IfModule php7_module>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

Em seguida, procure LoadModule e cole a seguinte linha:

LoadModule php7_module modules/libphp7.so

Essa linha simplesmente solicitará ao httpd que carregue o módulo php 7

Então reinicie o httpd


3

Verifique todos os pacotes que você instalou para o php usando:

yum list installed | grep remi

Instale todos os pacotes php relevantes , especialmente o php-devel em sua máquina.


2

Isso estava no meu .htaccess

DirectoryIndex index.html index.htm

index.html continha código PHP. Por padrão, o PHP não processa arquivos com extensões como htm * como código PHP.

Você pode substituir isso adicionando o seguinte ao .htaccess:

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

1

Eu acho que o problema que está mostrando o código em vez do resultado é que ele não está indo para o host local. verifique novamente o endereço que você está acessando. Você está indo para um diretório de arquivos local ou para o host local.

a partir da captura de tela enviada, o computador não será enviado para o host local.

"file: ///" deve ser "localhost /"


1

Reinstalar o mcryptmódulo funcionou para mim.

$sudo apt-get install php5-mcrypt
$sudo php5enmod mcrypt

Sinceramente, talvez porque eu não tenha configurado o PHP corretamente no meu sistema. Eu me pergunto por que o voto negativo.
bg

Essa resposta é linux relacionados a topicstarter está claramente usando o windows
Raymond Nijland

1

Tive um caso em que acidentalmente comecei a descompactar meu diretório de arquivos na raiz. Ele adicionou o arquivo .htaccess da minha pasta de arquivos que bloquearia todo o php

# If we know how to do it safely, disable the PHP engine entirely.
<IfModule mod_php5.c>
  php_flag engine off
</IfModule>

Bottom line verifique o arquivo .htaccess na raiz.


1

Se você tiver uma configuração como esta:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot "/var/www/example.com"

    <FilesMatch "\.php$">
        SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
</VirtualHost>

Remova o comentário das próximas linhas do seu httpd.conf

LoadModule proxy_module lib/httpd/modules/mod_proxy.so
LoadModule proxy_fcgi_module lib/httpd/modules/mod_proxy_fcgi.so

Funciona para mim


1

Adicione AddType application/x-httpd-php .phpao seu arquivo httpd.conf se você estiver usando o Apache 2.4


1

Apenas passei horas tentando executar o PHP 5 com o Apache 2.4 no Windows 10 . Finalmente, para mim, foi um erro de digitação no httpd.conf LoadModule . Chamei a atenção para a escrita e o caminho exato do módulo através da última resposta neste tópico do denny2018 . Obrigado!

Depois de duas noites, descobri ... Meu diretório foi escrito c:(em minúsculas)

Eu tinha LoadModule php5_module "c:/php/php5apache2.dll"mas correto para o apache 2.4 é:

LoadModule php5_module "C:/php/php5apache2_4.dll"

Então, eu também perdi o _4antes (para o apache 2.4 ). O trecho completo que funcionou para mim:

# PHP
LoadModule php5_module "C:/php/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

Apenas tentei o PHP 7 . Lá a LoadModulelinha no httpd.conf para Apache 2.4 diz

LoadModule php7_module "C:/php/php7apache2_4.dll"

Atualmente, o manual php mostra c:/php/php5apache2.dll quais obviamente precisam ser ajustados.


1

no meu caso (Apache / 2.4.34),

depois de descomentar o módulo específico

"LoadModule php7_module libexec / apache2 / libphp7.so"

de

"/etc/apache2/httpd.conf"

meu problema se foi.


1

No caso de estarmos na mesma página, faça o seguinte

sudo apt-get install php -y sudo apt-get install php-{bcmath,bz2,intl,gd,mbstring,mysql,zip,fpm} -y

Para ativar o PHP 7.2 FPM no Apache2 faça:

a2enmod proxy_fcgi setenvif

a2enconf php7.2-fpm

atualização 2: o Apache baixa o arquivo .php em vez de renderizar

Depois disso, enfrentei o problema acima. Existem perguntas semelhantes como esta .

Eu não sei por que, mas isso só aconteceu para os meus arquivos .php na /var/www/html/pasta raiz. tudo estava bem para subdiretórios. (por exemplo, wordpress e phpmyadmin funcionaram bem)

Então aqui está a minha solução. Eu decidi ativar o módulo php. então eu executei este comando:

a2enmod php7.2

mas eu tenho esses erros:

Considerando a dependência mpm_prefork para php7.2: Considerando conflito mpm_event para mpm_prefork: ERRO: O módulo mpm_event está ativado - não pode continuar devido a conflitos. Ele precisa ser desativado primeiro! Considerando conflito mpm_worker para mpm_prefork: ERRO: Não foi possível ativar a dependência mpm_prefork para php7.2, interrompendo

então decidi desativar o mpm executando os seguintes comandos:

sudo a2dismod mpm_prefork
sudo a2dismod mpm_worker
sudo a2dismod mpm_event

depois reinicie o apache:

systemctl restart apache2

habilite o php7.2 (minha versão instalada):

sudo a2enmod php7.2

e agora tudo funciona bem.


1

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

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

<IfModule mod_userdir.c>
    <Directory /home/*/public_html>
        php_admin_flag engine Off
    </Directory>
</IfModule>

-1

o arquivo que você colocou em / var / www / html / deve ter .php, por exemplo, example.php se for exemplo, não está funcionando, mas se você mudar para example.php, ele funcionará.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.