Apache muestra código PHP en lugar de ejecutarlo

107

Recientemente he intentado instalar PHP y Apache en mi computadora. Después de muchas horas, están instaladas. He modificado los archivos httpd.conf y php.ini como dicen todos. Luego creé un script PHP simple:

<?php phpinfo(); ?>

Pero cuando trato de ejecutarlo, http://127.0.0.1/phpinfo.phpsolo muestra el código fuente en lugar de ejecutarlo. Estoy usando Apache 2, PHP 5 y Windows Vista.

LÍNEAS 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"
imulsión
fuente
en phpinfo.php, ¿ha agregado algunos encabezados que hacen que el archivo .php sea legible?
@Peteris no, todo mi guión está en mi pregunta
imulsión
pruebe un script simple: <?php echo "Hello world"; ?>¿muestra Hola mundo? Si muestra el código, ¡cómo dijo @RabNawaz que su servidor no está configurado correctamente!
Simplemente muestra el código nuevamente :(
imulsión
1
¿desde dónde accedes a tu archivo php? tenga en cuenta que para ejecutar el archivo php en su servidor, debe colocar sus archivos en el directorio raíz web adecuado. y acceda a él en su navegador web como http://localhost/ohttp://127.0.0.1/
Ibrahim Azhar Armar

Respuestas:

90

¡Debe habilitar php! Verifique la carpeta mods-enableden el directorio de Apache (predeterminado:) /etc/apache2/para ver si encuentra un archivo llamado php. No recuerdo la extensión, pero creo que sí .so.

También verifique /var/log/apache2/error.logsi tiene otros errores.

Daniel Figueroa
fuente
8
has ejecutado: a2enmod php5
Daniel Figueroa
6
no hay carpeta mods_enabled en mi directorio de apache
imulsion
@imulsión en mi caso estaba habilitado para mods en / etc / apache2 /
Silveri
6
En mi caso para php7, tenía que hacerlo a2enmod php7.0y resolvió mi problema. ¡Tomó todo el día para llegar a esta publicación de alguna manera!
Rorschach
3
No hay ningún archivo llamado phpen mods-enabled, ¿ahora qué? Esta respuesta no explica las cosas
Negro
60

¡Vaya, muchas soluciones aquí! Esto es lo que hice en Ubuntu 16.04 :

sudo apt-get install php libapache2-mod-php
sudo a2enmod mpm_prefork && sudo a2enmod php7.0
sudo service apache2 restart
helmy
fuente
Me funcionó al agregar --reinstalla apt-get. Es posible que la instalación del módulo php / apache esté sucia.
Glastis
Esto funcionó para mí en el servidor Ubuntu 16.04 de Digital Ocean Gracias
Sushant Bhargav
esto me da los siguientes errores: Considering conflict php5 for php7.0, Considering conflict mpm_worker for mpm_prefork, etc ... y no apache2 restart
MRID
Si puede Considering conflict php5 for php7.2ir a /etc/apache2/mods-availabley eliminarphp5.*
Simon Epskamp
39

Para PHP 7 (también puede aplicarse a versiones anteriores), pero tuve que hacer esto:

Agregue esto al final de /etc/apache2/apache2.conf

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

Ejecute esto desde la terminal:

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

Entonces no olvide reiniciar Apache para que sepa que ha cambiado cosas:

sudo service apache2 restart

Este es un resumen de: https://www.atlantic.net/community/howto/try-php7-lamp-ubuntu-14-04/

RyanNerd
fuente
3
Tuve que hacer esto para PHP 5.6 en OSX El Capitan. (Usando stock apache, pero homebrew php56)
rfay
1
También funciona en Windows (lo que significa que no tiene que ejecutar los comandos del terminal en Windows) Gracias por ahorrarme búsquedas interminables.
che-azeh
al instalar desde la fuente, se requería esta coincidencia de archivos. (la configuración y la marca, etc. habilita el módulo en httpd.conf para mí, pero no
agregué
Hay mil millones de comentarios en el archivo httpd.conf de muestra; ¿Alguien puede explicar por qué no hay uno para php? No es algo que se use con poca frecuencia.
Danial
@Danial httpd.apache.org/support.html tiene varios métodos en los que puede encontrar documentos, informar errores y hacer preguntas (como por ejemplo, ¿por qué no hay un ejemplo sano de usar PHP en httpd.conf?)
RyanNerd
24

abre el archivo

/etc/apache2/httpd.conf

y cambio

#LoadModule php5_module libexec/apache2/libphp5.so

dentro

LoadModule php5_module libexec/apache2/libphp5.so

Así que no comentar la carga del módulo PHP en httpd.conf

Iñigo333
fuente
En mi caso, la línea comenzó con php7_module, ¡pero por lo demás, esto funcionó para mí!
b0rgBart3
6

Una respuesta diferente que funcionó para mí. Es eso, para instalar[sudo] apt-get install libapache2-mod-php5.X

Simon Mohoalali
fuente
1
El mío era similar. Hice "sudo apt-cache search ^ libapache2 | grep php" que encuentra los paquetes relevantes y luego instalé "sudo apt-get install libapache2-mod-php". libapache2-mod-php7.0 ya estaba instalado.
VectorVortec
3

De acuerdo, si ha intentado lo que le dijeron anteriormente o antes (que son posibles razones) y aún muestra el código en lugar de ejecutarlo, entonces hay una cosa que está haciendo mal que no se ha abordado. La URL que usó para acceder a su código php; algunas personas intentan ejecutar su código php simplemente arrastrando el archivo .php al navegador web. esta es una práctica incorrecta y podría provocar este tipo de problema. si ha guardado un archivo como "test.php" en la carpeta C: // wamp / www, entonces debe acceder a este archivo de esta manera: localhost: //test.php. este tipo de error surgirá cuando acceda a él de esta manera: localhost: //wamp/www/test.php

Espero haber ayudado a alguien. o / ~ Daniel

DAniel
fuente
3

Publicar lo que funcionó para mí en caso de que ayude a alguien en el futuro, aunque es un caso inusual.

Había configurado un controlador para obligar a mi servidor web a usar una versión de php superior a la predeterminada. Había 5.1, pero quería 5.6, así que tenía esto:

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

en mi archivo .htaccess.

Al intentar ejecutar mi sitio localmente, tener eso allí hizo que el código php se enviara al navegador. Quitarlo resolvió el problema.

evanmcd
fuente
3

Apache muestra el código php en lugar de ejecutar el problema solucionado

1. Abrió php5.6 conf o php7.x conf

# siguiente comando:

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

2. Comentó las siguientes líneas

ingrese la descripción de la imagen aquí

3. Reinició el servidor

$ sudo service apache2 reiniciar

4 Disfruta :)

Matthew Farrell
fuente
2

Puede eliminar su archivo .htaceess y dejar que el sistema cree uno nuevo (en blanco o básico). Puede ser que algunas líneas que agregó sean declaraciones incorrectas o que algo más adentro esté causando el problema. Luego puede agregar línea por línea desde su antiguo archivo .htaccess para ver qué causó el problema.

Eso funcionó para mí. Las líneas que le decían a la máquina que no mostrara extensiones php fueron un problema en mi caso ( RewriteCond y RewriteRule ). Mi antiguo archivo .htaccess funcionó bien en un servidor compartido, pero este problema apareció cuando cambié a VPS.

bokistack
fuente
Además, si se encuentra con la estupidez de CORS: ejecute sudo a2enmod headersy sudo a2enmod rewrite(no olvide reiniciar Apache).
RyanNerd
2

Gracias a otros en este hilo por sus sugerencias. Siguiendo los pasos mencionados, descubrí que el servidor apache no podía comenzar a informar un error de sintaxis en un loadarchivo en formato /etc/apache2/mods-enabled. Resulta que tanto php7.0 como php7.1 estaban habilitados.

a2dismod php7.0
systemctl restart apache2

y php se vuelve a representar correctamente.

djnz0feh
fuente
1

si el módulo userdir está habilitado y su sitio está en un userdir (~ / public_html), debe verificar /etc/apache2/mods-enabled/php5.conf. La siguiente parte lo hace funcionar (en 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
fuente
1

Si es un usuario de ubuntu, después de instalar apache debe ejecutar el siguiente comando en una instalación nueva

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

En mi caso funciona bien.

Hasan Baig
fuente
1

Lo que funcionó para mí:

En httpd.conf activo, busque

<IfModule mime_module>
...
</IfModule>

Faltaba lo siguiente

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

Después de reiniciar Apache, los archivos .php se analizan correctamente.

Pablo
fuente
1

nada de lo anterior se aplicó o funcionó para mí ... PHP7, Apache Httpd 2.2 en CentOS 6

El hecho es que instalé (todo con yum) php ANTES de Apache ... debe hacer lo contrario: siempre instale Apache primero, luego PHP, y luego funciona ... De hecho, es probable que falte libphp7.soy libphp7-zts.soen/etc/httpd/modules/

Pude recuperarme de todos modos sin desinstalar PHP. Agregué la línea mágica en /etc/httpd/conf/httpd.conf: AddType application/x-httpd-php .php Y luego ejecuté:yum install php php-mysql

berhauz
fuente
1

Para PHP7 y Apache2.4, esto es todo lo que necesita hacer:

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

Vaya al final e inserte lo siguiente (por sí solo):

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

Apache ahora ejecutará todo con PHP. Si todo lo que tiene son archivos html y php, entonces esto funcionará bien para usted. Si tiene otros tipos de archivos, deberá adaptar la coincidencia de archivos a su situación. He probado esto con phpMyAdmin y no parece tener ningún problema ... hasta ahora.

Ninguna de esas otras cosas de las que habla toda la gente aquí era necesaria para mí. Cuando puse la cosa "AddType Application ....." en el lugar correcto, Apache me dijo que ese módulo ya estaba cargado y lo saltó.

Puede encontrar más información aquí: https://httpd.apache.org/docs/2.4/mod/core.html#filesmatch

Mi instalación se realizó de la siguiente manera:

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

También debería leer esto, si no lo ha hecho: https://httpd.apache.org/docs/current/howto/htaccess.html#when

Adam Winter
fuente
0

Esto me estaba sucediendo también cuando ejecutaba $ _POST en MAMP. Todos mis archivos .ini y httpd se configuraron correctamente. Si está manejando formularios y tiene un documento html y publicando la información en un php formhandler que ejecuta $ POST, asegúrese de que está ejecutando el archivo html desde localhost a través de su servidor, y no solo localmente.

Este fue un atajo que hice para ejecutar documentos html, simplemente haciendo clic en el archivo html en mi directorio y abriéndolo en mi navegador web, cuando en realidad para verificar si php se está procesando en su formulario, debe ejecutar su html a través de sus servidores. Un protocolo muy simple que pasé por alto.

Ejemplo:

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

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

Ahora, el php debe procesarse una vez que haga clic en el botón enviar

maidenastraea
fuente
0

Tuve el mismo problema, causado por la configuración predeterminada del módulo Debian / Ubuntu suphp. Contenía suPHP_Engine offpara todo / usr / share, lo que resultó en que las fuentes php se mostraran en el navegador. Desactivar con a2dismod suphpfue la solución provisional.

Torsten Knodt
fuente
0

Yo tuve el mismo problema. Cuando ejecuto un archivo php, el navegador web me mostró el código php en lugar de ejecutarlo. Lo había intentado muchas veces: desinstalar / reinstalar el wampserver64, trabajar con la configuración / módulos de PHP / Apache, etc. Después de 2 días: me di cuenta de que cuando intenté ejecutar el archivo php dentro del bloc de notas ++ presionando la combinación predeterminada "ctrl + alt + shift + R "para cromo. Estaba intentando ejecutar mi archivo php como: "archivo /// C: / wamp64 / www / bla / bla .." en la barra de direcciones de mi Chrome. Ese era mi problema. Hice los cambios de acuerdo con la página ¿ Configurar Notepad ++ para ejecutar php en localhost? . Mi problema fue resuelto. Pero después de 2 días ...

mecánico
fuente
0

Ejecute Xampp (apache) como administrador. En google chrome, escribe:

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

es decir, si la carpeta que creó es "LearnPhp", el archivo es "chapter1.php", escriba

localhost/LearnPhp/chapter1.php

Creé esta carpeta en la carpeta xampp en la carpeta htdocs que se crea cuando descargas xampp.

Aquasar
fuente
0

Solución Debian 9:

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

Agregar al archivo las siguientes líneas:

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

Entonces corre:

a2enconf php && service apache2 restart
mrDinkelman
fuente
Esto funcionó para mí, pero no inicialmente. Estoy ejecutando contenido web en directorios de usuarios, que está deshabilitado de forma predeterminada. Para habilitar eso, vea la última sección en/etc/apache2/mods-available/php7.2.conf
Tony Adams
0

Algunas veces, si tiene conflictos con la versión de php, sucede Para superarlos, siga los pasos a continuación

Paso 1: lista de Yum instalada | grep 'php'

si tiene varias versiones de php como php 5.6 y php 7.0, este conflicto ocurrirá

Paso 2: yum elimina ** tu versión de php **

Paso 3: luego reinicia el apapche /etc/init.d/httpd restartoservice apache2 restart

sachin_ur
fuente
0

Esta solución funcionó para mí. Purgué apache2 y lo reinstalé. Ocurrió después de purgar e instalar. Si es la primera instalación, no enfrentaría este problema.

Kemal Atik
fuente
0

Probé varias de las soluciones anteriores, sin embargo, la solución en nuestro escenario fue instalar el módulo fpm.

Habíamos instalado httpd antes de php, lo que puede haber tenido algo que ver con el problema, pero para resolverlo, instalamos lo siguiente:

módulo yum instalar php: 7.2

Esto instaló el módulo php-fpm-7.2.11-4.module + el8.1.0 + 5443 + bc1aeb77.x86_64.rpm que luego habilitamos mediante:

systemctl enable - ahora php-fpm

Desde ese punto dejamos el /etc/httpd/conf.d/php.conf por defecto y reiniciamos httpd

reinicio del servicio httpd

Entonces todo funcionó.

Espero que esto ayude, tomó más tiempo del que debería averiguar.

Bren1818
fuente