Apache está descargando archivos php en lugar de mostrarlos


92

Información del sistema operativo y del servidor:

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

Anteriormente tenía instalado php 5.3.x pero decidí actualizar. Primero desinstalé php 5.3.xy luego instalé php 5.5.1, pero después de que se completó la instalación, apache no analizó los archivos php, simplemente los descargó. He comprobado preguntas similares aquí en stackoverflow, pero ninguna de ellas me ha ayudado hasta ahora.

Para el registro, tengo las siguientes líneas en mi httpd.conf y php.conf que deberían hacer que php funcione, pero no lo hacen:

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

Realmente apreciaria cualquier ayuda. Gracias.

EDITAR:

Tengo estas líneas en php.conf

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

EDITAR:

Quitando el

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

apache ya no descarga el archivo. Ahora apache muestra el código fuente, pero no todo es solo una parte. yo añadí

AddType text/html .php

pero no suerte.


Bueno, ¿cómo lo instalaste? ¿Qué SAPI? Consulte también ¿Cómo comprobar qué módulos de apache están habilitados / instalados?
mario

2
Su módulo php no se está ejecutando.
Sithu

1
compruebe httpd.confsi el módulo php está comentado o no
MaveRick

1
Edité las preguntas. Los módulos tienen salidas y aparentemente se están cargando
Anthony Gainor

¿Reinició apache después de la instalación?
Ahmad

Respuestas:


79

El AddType correcto para php es application / x-httpd-php

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

También asegúrese de que su módulo php esté cargado

LoadModule php5_module        modules/mod_php55.so

Cuando esté configurando Apache, intente ver la página desde otro navegador; he tenido días en los que Chrome almacena en caché obstinadamente el resultado y sigue descargando el código fuente mientras que en otro navegador está bien.


no hay ruta de módulos en mi caso
shamaseen

2
¿Podrías agregar algo de información sobre dónde poner estas líneas?
Sören

6
Para personas que buscan dónde colocar estas líneas. /etc/httpd/conf/httpd.conf
Siraj Alam

En mi caso, en Apache-2.4.6 + PHP-7.3.13> LoadModule php7_module modules / libphp7.so
shaojun lyu

22

Encontré este problema hoy y ninguna de las soluciones descritas funcionó para mí. Entonces aquí hay otra posible causa:

Si tienes algo como

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

en un .htaccessarchivo de su carpeta de contenido web, puede hacer que sus scripts PHP dejen de funcionar. En mi caso, el servidor no conocía el x-mapp-php6tipo, ya que ese .htaccessarchivo era algo que importé de un servidor web diferente cuando transferí el contenido del sitio web.

Simplemente quitando la AddHandlerlínea del .htaccessarchivo lo resolvió para mí.


Perfecto. En mi caso, fue el AddHandler application/x-httpd-php54 .php54 .phpque hubo que quitar.
Old McStopher

Tuve algún problema pero encontré el archivo .htaccess culpable en el directorio de inicio (un directorio arriba del directorio web "public_html"). Si alguien más tiene el mismo problema, busque .htaccess en los directorios principales también (la configuración en cascada).
Wireblue

Tenía un archivo .htaccess como este que había extraído de un servidor de alojamiento web. Estaba forzando una versión de PHP que no estaba instalada en mi máquina local. Por lo tanto, el host virtual no estaba ejecutando el archivo PHP correctamente.
BrightIntelDusk

Este es casi con certeza el problema si algunos sitios funcionan y otros no. Joomla .htaccess contenía un AddHandler pero WordPress no.
Peter Wooster

Esto funcionó para mí, simplemente eliminé esa línea de mi archivo público / .htaccess y se cargó el índice.
PA-GW

16

Después de luchar mucho, finalmente resolví el problema.

Si se le pide que descargue un .phparchivo en lugar de ejecutarlo, aquí está la solución perfecta: supongo que ya ha instalado PHP5 y sigue recibiendo este error.

$ sudo su
$ a2enmod php5

Eso es todo.

Pero si sigue recibiendo el error:

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

luego haz lo siguiente:

Resulta que los archivos no deben almacenarse en mods-enabled , sino que deben almacenarse mods-available. Luego, se debe crear un enlace simbólico en mods habilitados que apunte al archivo almacenado en mods-available.

Primero retire el original:

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

Luego crea el enlace simbólico:

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

Espero que tu problema esté resuelto.


2
Tenga en cuenta que esto solo funciona en Linux (y específicamente en Debian Linux).
Gwyneth Llewelyn

6

Por favor, eche un vistazo a sus directivas addtype.

Me parece que Apache le está diciendo al navegador que está enviando un tipo de documento de aplicación / php para scripts con extensiones como .php5. De hecho, se supone que Apache le dice al navegador que el script está generando texto / html.

Por favor intente esto:

AddType text/html .php

Con respecto a la sugerencia anterior de que debe decirle al navegador que está generando un script PHP: me pareció una idea inusual. Lo busqué en Google y descubrí que hay bastante discusión al respecto en la web. Aparentemente, hay casos en los que es posible que desee decir que está enviando un script PHP (aunque se supone que Apache debe ejecutar el script y emitir texto / html) y también hay casos en los que el navegador simplemente no reconoce ese Mime específico Tipo.

Limpiar la memoria caché de su navegador siempre es una buena idea.

En caso de que sea útil, aquí hay una copia de mi archivo /etc/httpd/conf.d/php.conf de un servidor que ejecuta 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

Esto es interesante, pero en mi caso, solo genera el script PHP completo, esta vez formateado como HTML (en lugar de formateado solo con ASCII), ¡no es útil! El problema aquí es que PHP no se está ejecutando correctamente de alguna manera, o se están enviando los encabezados incorrectos ...
Gwyneth Llewelyn

Tenga en cuenta que la última directiva AddType (que se comenta en el ejemplo anterior) hace que un archivo .phps se imprima de forma bonita en HTML. ¿Es posible que su configuración de Apache tenga archivos .php de impresión bonita?
Sam Azer

5

Esto podría estar sucediendo debido a la falta de módulos necesarios para su php. Suponiendo que tiene php7 instalado, busque los módulos php7 disponibles usando

sudo apt-cache search php7-*

El comando anterior enumerará todos los módulos PHP7 disponibles para la instalación. Puede comenzar la instalación de módulos como,

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

4

Si su .htaccess tiene algo como esto ... AddHandler application / x-httpd-php53 .php .php5 .php4 .php3 , coméntelo e intente nuevamente actualizar esto funcionó para mí ...


3

Tengo el mismo problema. Apache no carga archivos php desde un sitio web determinado, solo lo descarga. Leí esta publicación y las respuestas y he visto que tengo esta línea en el último lugar del archivo .htaccess:

AddHandler x-mapp-php5.5  .php

Lo he comentado y todo funciona bien.

Gracias a todos !!!


2

Anteriormente tuve un problema similar, después de actualizar de 5.3 a 5.4. Pero mi configuración se ve un poco diferente ya que estoy ejecutando Debian y usando fcgid para servidor las páginas PHP, y no el módulo PHP5 apache / cgi. Entonces, después de actualizar, también instaló php5_cgi, que colisionó con mi configuración fcgid y ya no ejecutaba archivos PHP.

Tuve que deshabilitar el módulo Apache y reiniciar Apache

a2dismod php5_cgi
/etc/init.d/apache2 restart

Una vez que el módulo php5_cgi estuvo fuera del camino, fcgid pudo servir páginas PHP nuevamente.


Aww sí, este complicado bastardo cgi ^^ Resolvió mi problema después de actualizar php de 5.3 a 5.4 también desde dotdeb.
Emii Khaos

2

Tuve síntomas similares, otra solución más: en /etc/apache2/mods-enabled/php5.conf había un consejo útil en el comentario, que seguí:

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

2

En caso de que alguien esté usando php7 en un entorno Linux

Asegúrese de habilitar php7

sudo a2enmod php7

Reinicie el servicio mysql y Apache

sudo systemctl restart mysql
sudo systemctl restart apache2

2

Después de actualizar PHP a 7.3, los scripts PHP se ejecutaron con www-data en lugar de $ USER como antes.

Necesitaba reinstalar y activar 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 asegurarme de que todo estaba bien para Virtualmin , utilicé el asistente Volver a verificar la configuración/virtual-server/check.cgi , en Vitualmin / Configuración del sistema .

Después de eso, Apache / PHP estaba descargando archivos php en lugar de ejecutarlos. Así que necesitaba editar /etc/apache2/mods-available/php7.3.confpara comentar la fila SetHandler application/x-httpd-phpcomo se muestra a continuación:

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

Después de reiniciar Apache, resolvió mi problema, espero que esto ayude.

Ocúpate también del caché del navegador.

Mi 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

1

Pasé dos días rastreando esto y descubrí que estaba poniendo mis scripts PHP en el directorio incorrecto.

En mi instalación estándar de Ubuntu, estaba colocando los scripts /var/www. Deberían haber estado en/var/www/html .

Acabo de comenzar a trabajar con PHP, así que no sé si mi solución se relaciona con el cambio de versión que atravesó.


1

esto resolvió el problema para mí (tengo php7 instalado):

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

reinicio de apache2 del servicio sudo


1

Tuve este problema. Resultó que tenía instalados nginx y apache y comenzaba automáticamente al arrancar. El problema era que nginx se vinculaba primero al puerto http, lo que impedía que apache se iniciara.


1

También es posible que tenga nginx en ejecución, pero su php está configurado para ejecutarse con apache. Para verificar, ejecutar service nginx statusy service apache2 statusver cuál se está ejecutando. En el caso de que nginx se esté ejecutando y apache no, simplemente ejecútelo sudo service nginx stop; sudo service apache2 starty su servidor ahora entregará archivos php como se esperaba.


1

Ok ... Sé que ya hay 1.000.000 de respuestas a estas preguntas, pero he pasado al menos 6 horas efectivas, averiguando esta; y lo he buscado en Google cientos de veces y no he encontrado una sola publicación al respecto. Entonces pensé que agregaría la solución a mi problema aquí.

La conclusión

Si comenté estas dos líneas en mis archivos .conf en el /etc/apache2/[[SERVER-NAME].confarchivo -file:

php_admin_value engine Off
IPCComTimeout 31

No tengo idea de lo que hacen o cómo llegaron allí, pero está en cada uno de mis .confarchivos. Y si elimino esas líneas y me aseguro de que haya un enlace simbólico en la /etc/apache2/sites-enabled/carpeta, entonces no descarga el index.php, y todo funciona como debería.

Toda la historia

Tengo VirtualMin instalado en un Ubuntu 16.04 VPS. Actualicé a la versión 7.2 de PHP. Poco después de eso, actualicé la versión de Ubuntu y encontré un error 'Kernel Offset: Disabled'. Así que tuve que eliminar la última versión de Ubuntu, y cuando mi sistema operativo se reinició: ¡BOOM! Recibí el error del que habla su publicación: para cada sitio en mi VPS, simplemente descargó el index.php en lugar de mostrarlo.

Probé todo tipo de cosas:

  • Se eliminó PHP7.2 e instalé PHP5.6 (ahora sé que la versión de PHP no tiene nada que ver con eso; es la configuración de apache la que necesita trabajo).
  • Intenté habilitar y deshabilitar los módulos apache, en la instalación existente, pero sin suerte.
  • Luego eliminé apache por completo y lo instalé de nuevo, ¡y después el problema seguía ahí!
  • Intenté jugar con la configuración del servidor Virutal en VirtualMin (Webmin >> Servidores >> Servidor web Apache).
  • Verificó la configuración en un solo servidor virtual (Virtualmin >> Configuración del sistema >> Volver a verificar la configuración) ... Este paso fue bastante bueno, ya que decía qué módulo de Apache faltaba; dónde-después podría habilitarlo con a2enmod [MODULE_NAME]. Y encontré el nombre del módulo buscando en Google. Tuve que activar alrededor de 6-8 módulos, antes de pasar ese paso en la validación, y pasaron un par de minutos antes de que se agotara la caché, por lo que hacer esto fue un paso tedioso.
  • Y, por último, descubrí la conclusión escrita anteriormente, junto con los enlaces simbólicos, y luego lo hice funcionar. Sin embargo, tuve que revisarlo para todos los sitios de mi VPS.

0

Tuve un problema similar al OP al actualizar php5 de una versión anterior a 5.5.9, que es la versión instalada con Mint 17.

Estoy ejecutando una configuración LAMP en una máquina en mi red local, que utilizo para obtener una vista previa de los cambios en los sitios web antes de cargar esos cambios en el servidor en vivo real. Así que mantengo un espejo local perfecto del sitio real.

Después de la actualización, los archivos que se ejecutan y se muestran perfectamente en el sitio real no se mostrarán o solo mostrarán html en la máquina local. PHP no fue analizado. El comando phpinfo () funcionó, así que sabía que php estaba funcionando. El registro no generó errores. Ver la fuente de la página me mostró el código php real.

Había construido una página test.php que contenía el siguiente código:

<?php phpinfo(); ?>

Esto funcionó. Luego descubrí cuando cambié <?phpal <?comando que ya no funcionaba. Todos mis sitios php usan en <?lugar de lo <?phpque podría no ser ideal, pero es la realidad. Solucioné el problema yendo a / etc / php5 / apache2, buscando "short_open_tag" y cambiando el valor de Off a On.


0

Si nada de lo anterior funciona,

intenta comentar la línea

SetHandler ....

y reinicie apache usando

/etc/init.d/httpd restart

¡Deberia de funcionar!


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

0

Tengo este tipo de problema. Así es como lo soluciono. Después de instalar Apache , instalé PHP usando este comando.

sudo apt-get install php libapache2-mod-php

se ejecuta correctamente pero solicito el archivo .php de Apache, lo da sin ejecutar el script PHP .

Luego verifico que PHP esté habilitado.

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

pero no mostró ningún resultado. Verifico los paquetes PHP instalados.

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

Diferentes tipos de versiones de PHP instaladas en mi computadora. Luego elimino algunos paquetes PHP de mi 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

Reinstalo PHP

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

Verifique que el módulo PHP esté cargado

$ a2query -m php7.0

si no está habilitado con:

$ sudo a2enmod php7.0

Reinicie el servidor Apache

$ sudo systemctl restart apache2

Finalmente, verifico el proceso PHP en Apache

crear un archivo vacío

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

Agregue este contenido a info.php y guárdelo.

<?php
  phpinfo();
?>

Compruebe el navegador:

http: //localhost/info.php

se muestra correctamente Creo que esto ayudará a cualquiera.


0

Tuve este problema y si en realidad nunca jugaste con los ajustes de configuración de tu servidor, entonces tu problema es del 90% en tu archivo .htaccess

Puede modificar el archivo .htaccess LOCALMENTE o eliminarlo (LOCALMENTE)


0

Si tiene virtualmin, intente comentar estas líneas en su configuración de apache en / etc / apache2 / sites-available

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

0

Cuando actualicé de PHP 7.2 a PHP 7.4, también tuve el mismo problema. Trabajado haciendo lo siguiente: -

  1. En [domain].conf file, comentó lo siguiente:

    motor php_admin_value apagado

Y agregado:

AddType  application/x-httpd-php-source  .phps
AddType text/html .php
  1. Deshabilite el mod 7.2 y habilite el 7.4 de la siguiente manera:

    a2dismod php7.2
    a2enmod php7.4

  2. En el /etc/apache2/mods-enabled/php7.4.confarchivo, comente lo siguiente:

    Aplicación SetHandler / x-httpd-php
    php_admin_flag motor apagado


0

Para las personas que han encontrado esta publicación de Google casi 6 años en el futuro (¡y más allá!), Es posible que se encuentren con este problema con Apache 2 y PHP 7 mientras también usan el UserDirmódulo.

Otra posible causa de este problema podría ser que esté intentando ejecutar el script en un "directorio de usuario" 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 desde http://localhost/~your_username.

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

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

-1

Si su .htaccess tiene algo como esto

AddType application/x-httpd-ea-php56 .php .php5 .phtm .html .htm
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.