El código PHP no se está ejecutando, en su lugar, el código se muestra en la página

320

Estoy tratando de ejecutar un código PHP en un proyecto (usando Dreamweaver) pero el código no se está ejecutando.

Cuando reviso el código fuente, el código PHP aparece como etiquetas HTML (puedo verlo en el código fuente). Apache se ejecuta correctamente (estoy trabajando con XAMPP), las páginas PHP se abren correctamente pero el código PHP no se ejecuta.

¿Alguien tiene una sugerencia sobre lo que está sucediendo?

Nota: El archivo ya está nombrado comofilename.php

Editar: El Código ..:

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

La impresión

Gui
fuente
44
¿Estás usando etiquetas cortas en <?lugar de <?php?
Dan Grossman
28
NUNCA use etiquetas cortas. ( <?) Están en desuso, en realidad no funcionan en muchos lugares y, por lo demás, son completamente innecesarios. Guardar tres pulsaciones de teclas no es una razón válida para permitir que su código falle en probablemente la mitad de los servidores en los que puede ejecutarse.
mopsyd
10
@mopsyd ¿Dónde dice que las etiquetas cortas están en desuso? Tenga en cuenta que las etiquetas cortas no son lo mismo que las etiquetas de eco cortas , y las etiquetas de eco cortas se admiten de forma predeterminada desde PHP 5.4, independientemente de la short_open_tagconfiguración.
Kyle Anderson
55
Soy consciente de que las etiquetas cortas no son etiquetas de eco cortas, por lo que especifiqué de qué estaba hablando en el comentario. Al momento de escribir, se marcaron etiquetas cortas por desaprobación para el lanzamiento de php 6, aunque eso aparentemente ha cambiado desde entonces. Todavía existe el problema de que muchos servidores los tienen deshabilitados, lo que hace que su código sea significativamente menos portátil. Esto no se aplica a las etiquetas de eco cortas ( <?=), que deberían funcionar bien en php 5.4+ independientemente de la configuración del servidor.
mopsyd
3
hablar tontamente sobre etiquetas cortas. Las etiquetas largas apestan y son feas. Nunca he tenido un problema en 10 años de programación php. Casi nunca son el problema
Danial

Respuestas:

418

Parece que hay algo mal con su configuración, aquí hay algunas cosas que puede verificar:

  1. Asegúrese de que PHP esté instalado y funcionando correctamente. Esto puede sonar tonto, pero nunca se sabe. Una manera fácil de verificar es ejecutar php -vdesde una línea de comando y ver si devuelve información de la versión o algún error.

  2. Asegúrese de que el módulo PHP esté en la lista y sin comentarios dentro de httpd.conf de su Apache. Esto debería ser algo así como LoadModule php5_module "c:/php/php5apache2_2.dll"en el archivo. Busque LoadModule phpy asegúrese de que no haya ningún comentario ( ;) delante.

  3. Asegúrese de que el archivo httpd.conf de Apache tenga el tipo MIME de PHP. Esto debería ser algo así AddType application/x-httpd-php .php. Esto le dice a Apache que ejecute .phparchivos como PHP. Busque AddType y luego asegúrese de que haya una entrada para PHP y que no esté comentada .

  4. Asegúrese de que su archivo tenga la .phpextensión, o la extensión especificada en la definición MIME en el punto # 3, de lo contrario no se ejecutará como PHP.

  5. Asegúrese de no utilizar etiquetas cortas en el archivo PHP ( <?), estas no están habilitadas en todos los servidores de forma predeterminada y se desaconseja su uso. Utilice en su <?phplugar (o habilite etiquetas cortas en su php.ini con short_open_tag=Onsi tiene un código que se base en ellas).

  6. Asegúrese de acceder a su archivo a través de su servidor web utilizando una URL como http://localhost/file.phpno a través del acceso a archivos localesfile://localhost/www/file.php

Y, por último, consulte el manual de PHP para obtener más consejos de configuración .

shmeeps
fuente
14
No sé por qué, pero el instalador de PHP 5.3.15 no agrega la línea AddType application/x-httpd-php .php. ¡¡Muchas gracias!!
MatuDuke
77
@shmeeps: ¿Dónde has visto que las etiquetas cortas están en desuso? He hecho algunas búsquedas y solo puedo encontrar recomendaciones en contra de ellos, nada sobre despreciación. Concedido para las aplicaciones que se van a distribuir, es mejor usar <? Php en caso de que el servidor de alojamiento no las tenga habilitadas, pero para las aplicaciones donde tiene control total sobre el servidor en el que van a estar, no las tengo. Vea alguna razón para no usarlos.
ClarkeyBoy
3
el punto no 6 funcionó para mí ... el acceso local no utiliza el servidor apache
KawaiKx
66
el punto 2 funcionó para mí de manera segura -apt-get purge apache2; apt-get install apache2 libapache-mod-php5
ulkas
1
@full_prog_full Intente cargar un archivo con una .phpextensión con el contenido <?php echo("Success"); ?>y vea si acceder al archivo a través de un navegador web hace que se muestre "Éxito" sin el código PHP asociado.
shmeeps
61

php7:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.0-fpm
sudo service apache2 restart
sj59
fuente
24
Si bien este fragmento de código puede resolver la pregunta, incluir una explicación de cómo y por qué esto resuelve el problema realmente ayudaría a mejorar la calidad de su publicación. Recuerde que está respondiendo la pregunta para los lectores en el futuro, ¡no solo la persona que pregunta ahora! Por favor, editar su respuesta para agregar explicación y dar una indicación de lo que se aplican limitaciones y supuestos.
Toby Speight
44
Esta respuesta está relacionada con Linux, el iniciador del tema claramente está usando Windows.
Raymond Nijland
3
@RaymondNijland es cierto, pero esto es canónico y encontré esta pregunta y me salvó después de más de una hora de resolución de problemas.
Goose
Cómo y por qué: Esto sucede cuando PHP7 no configura el servicio predeterminado de CGI rápido en el script de creación. sudo a2enmod proxy_fcgi setenvifcrea tres nuevas modificaciones. /mods-available/proxy.conf proxy_fcgi.load proxy.loadDel mismo modo, sudo a2enconf php7.0-fpmcrea un archivo de configuración. /conf-available/php7.0-fpm.confUna vez hecho esto, Apache2 puede ejecutar el módulo PHP7 como un servicio rápido de CGI.
Talvi Watia el
33

Estoy ejecutando Apache en Ubuntu y mi problema fue que al /etc/apache2/mods-available/php5.confarchivo le faltaba esto:

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

Lo agregué nuevamente y php estaba analizando los archivos php correctamente.

Matt McDonald
fuente
31

nota para usuarios de php 7, agregue esto a su archivo 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>
EdC
fuente
44
Solo para ayudar a otras personas con este problema. El httpd.confarchivo se encuentra en /etc/apache2/httpd.confSi está usando Ubuntu, estaría apache2.confen el mismo directorio que necesita ser modificado para PHP7.
Ahmed Sagarwala
23

Encontré otro problema que causa este problema y ya lo resolví. Accidentalmente guardé mi script en la UTF-16codificación. Parece que PHP5 no puede reconocer la <?phpetiqueta en la codificación de 16 bits de forma predeterminada.

Arrvi
fuente
18

Estoy publicando esta respuesta porque mi interfaz de administrador Virtualmin / Webmin decidió que era una buena idea deshabilitar mi motor PHP ... me tomó un tiempo encontrar la solución, así que pensé en compartirla con ustedes:

Además, asegúrese de verificar que ninguno de los archivos de configuración de su sitio web relacionados con este host específico o host virtual tenga ningún php_admin_value en ellos que apague PHP, como este:

php_admin_value engine Off

En caso de duda, coméntalo ...

# php_admin_value engine Off

Y reinicie su servidor web.

Henry van Megen
fuente
1
¿Dónde están estos ajustes de configuración exactamente?
cronoklee
2
@cronoklee En la configuración de vHost de httpd.conf. Para los hosts existentes, debe editar la configuración de apache en webmin. Para futuros hosts, vaya a virtualmin> plantilla de servidor> sitio web apache. De todos modos, esto no es tan seguro como fastcgi, el valor predeterminado de virtualmin. Por lo tanto, el enfoque correcto debería ser solucionar por qué fcgi no funciona, por ejemplo, puede ser causado por permisos de archivo.
Sheepy
Si está utilizando una versión de Apache que no tiene httpd.conf, busque /etc/apache2/mods-enabled/php7.confophp5.conf
Sam Malayek
Cuando tenga dudas sobre la ubicación de una determinada configuración, siempre puede usar grep para encontrar lo que está buscando (por ejemplo, en este caso) escribiendo:sudo grep php_admin_value /etc/* -R
Henry van Megen
17

Solo está abriendo su archivo php en el navegador. Tienes que abrirlo usando localhost url. si abre un archivo directamente desde su directorio, no ejecutará el código php en ningún caso.

uso: http://locahost/index.phpohttp:127.0.0.1/index.php

Habilitar código corto de php. En su caso, está utilizando <?cuál es el código corto de PHP <?php. Por defecto, los códigos cortos de php están deshabilitados.

También use: sudo apt-get install php5 libapache2-mod-php5 php5-mcryptsi es un usuario de ubuntu.

Hasan Baig
fuente
1
¿Por qué se requiere mcrypt cuando solo incluyo un archivo? Debes notar que esta pregunta es antigua y el problema de las etiquetas cortas se mencionó 16 veces, también en el comentario superior de mi pregunta.
Gui
1
Solo comparto mi solución, también estaba enfrentando el mismo error y después de ejecutar este comando de mcrypt, mi problema se resolvió. También puedes intentarlo.
Hasan Baig
por defecto, los códigos cortos de php están habilitados. short_open_tag = On (Valor predeterminado = ON) en php 5.6
zond
Este fue mi problema, mi configuración de virtualmin / apache era para 127.0.0.2 pero estaba poniendo mi dirección IP externa en el navegador, acabo de actualizar mi configuración de v / a y ahora funciona
Hayden Thring
Solo me faltaba el libapache2-mod-php7.3.
dxvargas
8

Sé que debería sonar tonto ... pero rara vez sucede.

Comprueba si estás intentando ejecutar php desde

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

y no de

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

ps> puedes notar que si escribes desde shell

php info.php 

responde con el código (significa funciones php).

usuario3257072
fuente
PHP funciona bien (marcado usando la línea de comando). pero, cuando accedo al archivo usando URL, muestra el código PHP.
muaaz
8

Esto me sucedió nuevamente, junto con el servidor descargando archivos html, en lugar de procesarlos. No había usado el servidor web Apache por algún tiempo en la computadora y mientras tanto Ubuntu actualizó como dos versiones más de LTS instalado originalmente. Ahora es

$ cat /etc/issue
Ubuntu 16.04 LTS

Entonces el php funcionó así:

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

El servidor web ahora estaba analizando el php. Tal vez ahora tengo que actualizar algunas webs desde que php7.0 ahora se ejecuta donde estaba antes de ejecutar php5. Oh bien.

ndasusers
fuente
5

He resuelto esto desinstalando XAMPP e instalando WAMP. Gracias por la ayuda.

Gui
fuente
Soy xampp pero funciona bien. has encontrado eso que estaba mostrando el código php @Gui
Pie
5

Me enfrenté a este problema en php 7.1 que viene con High Sierra (OS X 10.13.5), la edición /etc/apache2/httpd.confcon los siguientes cambios ayudó:

  1. Descomenta esta línea

    LoadModule php7_module libexec/apache2/libphp7.so
  2. Pegar siguiendo al 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>
AamirR
fuente
Igual puede usted por favor sugerir la versión de Wamp 3 mismo error. No hay ruta de carpeta /etc/apache2/httpd.conf en wamp 3. @AamirR
Gem
Esto funcionó para mí! El mío era un tema más extraño. Algunos archivos representaban el PHP y otros no, y solo mostraban el código.
sjw0525
4

en mi ubuntu 14.04, apache 2.4, php 5.5.9 install, probé con un sample.php en / var / www / html (raíz de documento predeterminada) y funcionó bien. Entonces el problema estaba en mi configuración de Servidores Virtuales. La solución fue incluir, en la definición del Directorio que contiene el .php, esta línea:

    php_admin_flag engine on
Rogelio Triviño
fuente
¿Y dónde debo agregar esta línea en el archivo Apache en httpd.conf de mi servidor virtual? y estoy usando Webmin
suresh pareek
4

Asegúrese de que el script contenga

<?php

antes del código que debe ejecutarse. No debe haber espacio entre <?y phpen esto.

Barmar
fuente
3

Tuve un problema similar pero en mi caso la solución fue diferente. mi archivo que contenía código php se llamaba "somename.html" lo cambió a "somename.php" funcionó bien

Netrus
fuente
Esto también lo resolvió para mí. ¿Alguien sabe si el servidor ejecutará php en un archivo .html o la terminación del archivo siempre debe cambiarse a .php cuando hay una línea de php para ejecutar?
full_prog_full
depende de la configuración del servidor, en la mayoría de los casos se ejecutará el código php que existe en anyfile.html. y si no lo hace, se puede cambiar, aunque no sé cómo: P
Netrus
3

Para una nueva configuración de LAMP ejecutando php 7, edite el archivo /etc/httpd/conf/httpd.conf Nota: asegúrese de hacer una copia de seguridad antes de cambiar nada.

Pegue esto en la parte inferior del archivo:

<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>

Luego, busque LoadModule y pegue la siguiente línea:

LoadModule php7_module modules/libphp7.so

Esta línea simplemente le pedirá a httpd que cargue el módulo php 7

Luego reinicie httpd

Eric Libay
fuente
3

Verifique todos los paquetes que ha instalado para php usando:

yum list installed | grep remi

Instale todos los paquetes php relevantes , especialmente php-devel en su máquina.

Chaitanya Shivade
fuente
2

Esto estaba en mi .htaccess

DirectoryIndex index.html index.htm

index.html contenía código PHP. Por defecto, PHP no procesará archivos con extensiones como htm * como código PHP.

Puede anular esto, agregando lo siguiente a .htaccess:

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

Creo que el problema de que muestra código en lugar del resultado es que no va al host local. vuelva a verificar en qué dirección ingresa. ¿Va a un directorio de archivos local o al host local?

de la captura de pantalla que envió, va a su computadora, no al host local.

"file: ///" debería ser "localhost /"

Nav
fuente
1

Reinstalar el mcryptmódulo funcionó para mí.

$sudo apt-get install php5-mcrypt
$sudo php5enmod mcrypt
bg
fuente
Honestamente lo hizo, tal vez porque no había configurado el PHP correctamente en mi sistema, pero dado que la pregunta que hice sobre el mismo problema se marcó como un duplicado de esta pregunta, solo pude responderla aquí. Me pregunto por qué el voto negativo.
bg
Esta respuesta está relacionada con Linux, el iniciador del tema está usando claramente Windows
Raymond Nijland
1

Tuve un caso en el que accidentalmente comencé a descomprimir mi directorio de archivos en la raíz. Agregó el archivo .htaccess de mi carpeta de archivos que bloquearía todo php

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

Línea inferior verifique el archivo .htaccess en la raíz.

Albertski
fuente
1

Si tiene una configuración como esta:

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

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

Descomente las siguientes líneas en su httpd.conf

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

Esto funciona para mi

usuario3890355
fuente
1

Agregue AddType application/x-httpd-php .phpa su archivo httpd.conf si está usando Apache 2.4

Ashahmali
fuente
1

Acabo de pasar horas intentando que PHP 5 se ejecute con Apache 2.4 en Windows 10 . Finalmente para mí fue un error tipográfico en httpd.conf LoadModule . Atrajo la atención hacia la escritura y la ruta exacta del módulo a través de la última respuesta en este hilo de apachelounge de denny2018 . ¡Gracias!

Después de dos noches descubrí ... Mi directorio estaba escrito c:(minúscula)

Tenía LoadModule php5_module "c:/php/php5apache2.dll"pero correcto para Apache 2.4 es:

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

Así que también me perdí el _4antes (para apache 2.4 ). El fragmento completo que funcionó para mí:

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

Acabo de probar PHP 7 . Allí se lee la LoadModulelínea en httpd.conf para Apache 2.4

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

Actualmente manual de php muestra c:/php/php5apache2.dll cuál, por supuesto, debe ajustarse.

burbuja bobble
fuente
1

en mi caso (Apache / 2.4.34),

después de descomentar el módulo específico

"LoadModule php7_module libexec / apache2 / libphp7.so"

de

"/etc/apache2/httpd.conf"

Mi problema se fue.

sh6210
fuente
1

En caso de que estemos en la misma página, haga lo siguiente

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

Para habilitar PHP 7.2 FPM en Apache2, haga lo siguiente:

a2enmod proxy_fcgi setenvif

a2enconf php7.2-fpm

Actualización 2: Apache descarga el archivo .php en lugar de renderizar

Después de eso, me enfrenté al problema anterior. Hay preguntas similares como esta .

No sé por qué, pero solo sucedió con mis archivos .php en /var/www/html/la carpeta raíz. todo estaba bien para los subdirectorios. (por ejemplo, wordpress y phpmyadmin funcionaron bien)

Entonces aquí está mi solución. Decidí habilitar el módulo php. entonces ejecuté este comando:

a2enmod php7.2

pero tengo estos errores:

Considerando la dependencia mpm_prefork para php7.2: Considerando el conflicto mpm_event para mpm_prefork: ERROR: El módulo mpm_event está habilitado - no puede continuar debido a conflictos. ¡Primero debe deshabilitarse! Considerando el conflicto mpm_worker para mpm_prefork: ERROR: No se pudo habilitar la dependencia mpm_prefork para php7.2, abortando

así que decidí desactivar mpm ejecutando los siguientes comandos:

sudo a2dismod mpm_prefork
sudo a2dismod mpm_worker
sudo a2dismod mpm_event

luego reinicie apache:

systemctl restart apache2

luego habilite php7.2 (mi versión instalada):

sudo a2enmod php7.2

y ahora todo funciona bien.

AmirRezaM75
fuente
1

Otra posible causa de este problema podría ser que está intentando ejecutar el script en un "directorio de usuarios" desde el UserDirmódulo. La ejecución de scripts PHP en directorios de usuarios está deshabilitada de forma predeterminada. Te encontrarás con este problema si el script está en el public_htmldirectorio de tu carpeta de inicio y estás intentando acceder a él desdehttp://localhost/~your_username .

Para arreglar esto, abre /etc/apache2/mods-enabled/php7.2.conf. Debe comentar o eliminar el bloque de etiqueta en la parte inferior que dice

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

el archivo que pones en / var / www / html / debe tener .php ejemplo ejemplo.php si es ejemplo no está funcionando pero si lo cambias a ejemplo.php funciona.

yasin lachini
fuente