Apache télécharge des fichiers php au lieu de les afficher


92

Informations sur le système d'exploitation et le serveur:

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

J'avais précédemment installé php 5.3.x mais j'ai décidé de mettre à niveau. J'ai d'abord désinstallé le php 5.3.x puis installé php 5.5.1 mais une fois l'installation terminée, apache n'a pas analysé les fichiers php, il les a simplement téléchargés. J'ai vérifié des questions similaires ici dans stackoverflow mais aucune d'entre elles ne m'a aidé jusqu'à présent.

Pour mémoire, j'ai les lignes suivantes dans mon httpd.conf et php.conf qui devraient faire fonctionner php mais ne le font pas:

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

J'apprécierais vraiment n'importe quelle aide. Je vous remercie.

ÉDITER:

J'ai ces lignes dans le php.conf

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

ÉDITER:

En supprimant le

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

apache ne télécharge plus le fichier. Maintenant, Apache affiche le code source, mais pas tout simplement une partie. J'ai ajouté

AddType text/html .php

mais pas de chance.


Eh bien, comment l' avez-vous installé? Quel SAPI? Voir aussi Comment vérifier quels modules Apache sont activés / installés?
mario

2
Votre module php n'est pas en cours d'exécution.
Sithu

1
Vérifiez httpd.confsi le module php est commenté ou non
MaveRick

1
J'ai édité les questions. Les modules sortent et ils sont apparemment chargés
Anthony Gainor

Avez-vous redémarré Apache après l'installation?
Ahmad

Réponses:


79

Le AddType correct pour php est application / x-httpd-php

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

Assurez-vous également que votre module php est chargé

LoadModule php5_module        modules/mod_php55.so

Lorsque vous configurez Apache, essayez d'afficher la page à partir d'un autre navigateur - il y a des jours où Chrome cache obstinément le résultat et continue de télécharger le code source alors que dans un autre navigateur, tout va bien.


il n'y a pas de chemin de modules dans mon cas
shamaseen

2
Pourriez-vous ajouter des informations sur l'emplacement de ces lignes?
Sören

6
Pour les personnes qui recherchent où placer ces lignes. /etc/httpd/conf/httpd.conf
Siraj Alam

Dans mon cas, sur Apache-2.4.6 + PHP-7.3.13> LoadModule php7_module modules / libphp7.so
shaojun lyu

22

Je suis tombé sur ce problème aujourd'hui et aucune des solutions décrites n'a fonctionné pour moi. Voici donc une autre cause possible:

Si vous avez quelque chose comme

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

dans un .htaccessfichier de votre dossier de contenu Web, cela peut entraîner l'arrêt de vos scripts PHP. Dans mon cas, le serveur ne connaissait pas le x-mapp-php6type, car ce .htaccessfichier était quelque chose que j'ai importé d'un hôte Web différent lorsque j'ai transféré le contenu du site Web.

Le simple fait de supprimer la AddHandlerligne du .htaccessfichier l'a résolu pour moi.


Parfait. Dans mon cas, c'est AddHandler application/x-httpd-php54 .php54 .phpqu'il fallait supprimer.
Old McStopher

J'ai eu un problème mais j'ai trouvé le fichier .htaccess coupable dans le répertoire personnel (un répertoire au-dessus du répertoire Web "public_html"). Si quelqu'un d'autre a le même problème, recherchez également .htaccess dans les répertoires parents (la cascade de paramètres).
Wireblue

J'avais un fichier .htaccess comme celui-ci que j'avais extrait d'un serveur d'hébergement Web. Cela forçait une version de PHP qui n'était pas installée sur ma machine locale. Ainsi, l'hôte virtuel n'exécutait pas correctement le fichier PHP.
BrightIntelDusk

C'est presque certainement le problème si certains sites fonctionnent et d'autres pas. Joomla .htaccess contenait un AddHandler mais pas WordPress.
Peter Wooster

Cela a fonctionné pour moi, je viens de supprimer cette ligne de mon fichier public / .htaccess et l'index a été chargé.
PA-GW

16

Après avoir beaucoup lutté, j'ai finalement résolu le problème.

Si vous êtes invité à télécharger un .phpfichier au lieu de l'exécuter, voici la solution parfaite: je suppose que vous avez déjà installé PHP5 et que vous obtenez toujours cette erreur.

$ sudo su
$ a2enmod php5

Ça y est.

Mais si vous obtenez toujours l'erreur:

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

puis procédez comme suit:

Il s'avère que les fichiers ne doivent pas être stockés mods-enabled, mais plutôt stockés mods-available. Un lien symbolique doit alors être créé dans mods-enabled pointant vers le fichier stocké dans mods-available.

Retirez d'abord l'original:

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

Créez ensuite le lien symbolique:

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

J'espère que votre problème est résolu.


2
Notez que cela ne fonctionne que sous Linux (et spécifiquement Debian Linux).
Gwyneth Llewelyn

6

Veuillez jeter un œil à vos directives addtype.

Il me semble qu'Apache dit au navigateur qu'il envoie un document de type application / php pour les scripts avec des extensions comme .php5. En fait, Apache est censé indiquer au navigateur que le script génère du texte / html.

Veuillez essayer ceci:

AddType text/html .php

Concernant la suggestion ci-dessus que vous devriez dire au navigateur que vous sortez un script PHP: Cela m'a semblé être une idée inhabituelle. Je l'ai googlé et j'ai trouvé qu'il y avait pas mal de discussions à ce sujet sur le Web. Apparemment, il y a des cas où vous voudrez peut-être dire que vous envoyez un script PHP (même si Apache est censé exécuter le script et émettre du texte / html,) et il y a aussi des cas où le navigateur ne reconnaît tout simplement pas ce Mime spécifique Type.

Effacer le cache de votre navigateur est toujours une bonne idée.

Au cas où cela serait utile, voici une copie de mon fichier /etc/httpd/conf.d/php.conf à partir d'un serveur exécutant 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

C'est intéressant, mais dans mon cas, il ne fait que sortir tout le script PHP, cette fois au format HTML (par opposition à formaté avec ASCII uniquement) - pas utile! Le problème ici est que PHP ne fonctionne pas correctement d'une manière ou d'une autre, ou que les mauvais en-têtes sont envoyés ...
Gwyneth Llewelyn

Notez que la dernière directive AddType (qui est commentée dans l'exemple ci-dessus) entraîne une jolie impression d'un fichier .phps en HTML. Est-il possible que votre configuration Apache imprime de jolis fichiers .php?
Sam Azer

5

Cela peut se produire en raison des modules manquants requis pour votre php. En supposant que vous avez installé php7, recherchez les modules php7 disponibles en utilisant

sudo apt-cache search php7-*

La commande ci-dessus listera tous les modules PHP7 disponibles pour l'installation. Vous pouvez commencer l'installation de modules comme,

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

4

Si votre .htaccess a quelque chose comme ça ... Application AddHandler / x-httpd-php53 .php .php5 .php4 .php3 puis commentez-le et essayez à nouveau d'actualiser cela a fonctionné pour moi ...


3

J'ai le même problème. Apache ne charge pas les fichiers php à partir d'un certain site Web, il vient de les télécharger. J'ai lu ce post et les réponses et j'ai vu que j'avais cette ligne à la dernière place du fichier .htaccess:

AddHandler x-mapp-php5.5  .php

Je l'ai commenté et tout fonctionne bien.

Merci à tous !!!


2

J'ai déjà eu un problème similaire, après la mise à niveau de 5.3 à 5.4. Mais ma configuration est un peu différente car j'exécute Debian et j'utilise fcgid pour serveur les pages PHP, et non le module apache / cgi PHP5. Donc, après la mise à niveau, il a également installé php5_cgi, qui est entré en collision avec ma configuration fcgid, et n'exécutait plus les fichiers PHP.

J'ai dû désactiver le module Apache et redémarrer Apache

a2dismod php5_cgi
/etc/init.d/apache2 restart

Une fois le module php5_cgi éliminé, fcgid a pu à nouveau servir les pages PHP.


Aww ouais, ce bâtard cgi délicat ^^ a résolu mon problème après avoir mis à jour php de 5.3 à 5.4 aussi depuis dotdeb.
Emii Khaos

2

J'ai eu des symptômes similaires, encore une autre solution: dans /etc/apache2/mods-enabled/php5.conf, il y avait un conseil utile dans le commentaire, que j'ai suivi:

# 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

Au cas où quelqu'un utilise php7 sous un environnement Linux

Assurez-vous d'activer php7

sudo a2enmod php7

Redémarrez le service mysql et Apache

sudo systemctl restart mysql
sudo systemctl restart apache2

2

Après la mise à jour de PHP vers la version 7.3, les scripts PHP étaient exécutés avec www-data au lieu de $ USER comme auparavant.

J'avais besoin de réinstaller et d'activer 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

Pour m'assurer que tout allait bien pour Virtualmin , j'ai utilisé l' assistant Re-Check Configuration/virtual-server/check.cgi , sous Vitualmin / System Settings .

Après cela, Apache / PHP téléchargeait des fichiers php au lieu de les exécuter. Je devais donc modifier /etc/apache2/mods-available/php7.3.confpour commenter la ligne SetHandler application/x-httpd-phpcomme ci-dessous:

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

Après avoir redémarré Apache, cela a résolu mon problème, espérons cette aide.

Prenez également soin du cache du navigateur.

Mon système:

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

J'ai passé deux jours à le suivre et j'ai découvert que je mettais mes scripts PHP dans le mauvais répertoire.

Sur mon installation Ubuntu standard, je mettais les scripts /var/www. Ils auraient dû être dans/var/www/html .

Je viens de commencer le travail PHP, donc je ne sais pas si ma solution est liée au changement de version que vous avez subi.


1

cela a résolu le problème pour moi (j'ai installé php7):

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

redémarrage du service sudo apache2


1

J'ai eu ce problème. Il s'est avéré que nginx et apache étaient installés et démarraient automatiquement au démarrage. Le problème était que nginx se liait d'abord au port http, ce qui empêchait apache de démarrer.


1

Il est également possible que nginx soit en cours d'exécution mais que votre PHP soit configuré pour fonctionner avec apache. Pour vérifier, exécuter service nginx statuset service apache2 statusvoir lequel est en cours d'exécution. Dans le cas où nginx est en cours d'exécution et qu'apache ne l'est pas, exécutez simplement sudo service nginx stop; sudo service apache2 startet votre serveur servira maintenant les fichiers php comme prévu.


1

Ok ... Je sais qu'il y a déjà 1.000.000 de réponses à ces questions, - mais j'ai passé au moins 6 heures effectives à comprendre celle-ci; et je l'ai googlé des centaines de fois et je n'ai trouvé aucun article à ce sujet. J'ai donc pensé que j'ajouterais la solution à mon problème ici.

La conclusion

Si j'ai commenté ces deux lignes dans mes fichiers .conf dans le /etc/apache2/[[SERVER-NAME].conf-file:

php_admin_value engine Off
IPCComTimeout 31

Je n'ai aucune idée de ce qu'ils font ou comment ils y sont arrivés, - mais c'est dans chacun de mes .conffichiers. Et si je supprime ces lignes et m'assure qu'il y a un lien symbolique dans /etc/apache2/sites-enabled/-folder, alors il ne télécharge pas l'index.php - et tout fonctionne comme il se doit.

L'histoire entière

J'ai VirtualMin installé sur un VPS Ubuntu 16.04. Je suis passé à la version 7.2 de PHP. Peu de temps après, j'ai mis à jour la version Ubuntu et j'ai frappé une erreur 'Kernel Offset: Disabled'. J'ai donc dû supprimer la dernière version d'Ubuntu, - et quand mon système d'exploitation a redémarré: BOOM! J'ai eu l'erreur dont parle son message: pour chaque site de mon VPS, il a simplement téléchargé le fichier index.php au lieu de le montrer.

J'ai essayé toutes sortes de choses:

  • Suppression de PHP7.2 et installation de PHP5.6 (je sais maintenant que la version PHP n'a rien à voir avec cela; c'est la configuration apache qui a besoin de travail).
  • J'ai essayé d'activer et de désactiver les modules apache, sur l'installation existante, mais sans chance.
  • Ensuite, j'ai complètement supprimé Apache et je l'ai réinstallé , où le problème était toujours là!
  • J'ai essayé de jouer avec la configuration du serveur Virutal dans VirtualMin (Webmin >> Serveurs >> Apache Webserver).
  • Vérification de la configuration sur un seul serveur virtuel (Virtualmin >> Paramètres système >> Re-vérifier la configuration) ... Cette étape était assez agréable, car elle indiquait quel module dans Apache était manquant; où-après je pourrais l'activer avec a2enmod [MODULE_NAME]. Et j'ai trouvé le nom du module en recherchant sur Google. J'ai dû activer environ 6 à 8 modules, avant de franchir cette étape de la validation - et cela a pris quelques minutes avant que le cache ne s'épuise, - donc cela était une étape fastidieuse.
  • Et enfin, j'ai compris la conclusion écrite ci-dessus - avec les liens symboliques, - puis je l'ai fait fonctionner. Je devais le parcourir pour chaque site sur mon VPS, cependant.

0

J'ai eu un problème similaire à l'OP lors de la mise à niveau de php5 d'une ancienne version vers la 5.5.9, qui est la version installée avec Mint 17.

J'exécute une configuration LAMP sur une machine de mon réseau local, que j'utilise pour prévisualiser les modifications apportées aux sites Web avant de télécharger ces modifications sur le serveur réel. Je garde donc un miroir local parfait du site actuel.

Après la mise à niveau, les fichiers qui s'exécutent et s'affichent parfaitement sur le site réel ne s'afficheront pas ou afficheront uniquement du HTML sur la machine locale. PHP n'a pas été analysé. La commande phpinfo () fonctionnait, donc je savais que php fonctionnait autrement. Le journal n'a généré aucune erreur. La visualisation de la source de la page m'a montré le code php réel.

J'avais construit une page test.php qui contenait le code suivant:

<?php phpinfo(); ?>

Cela a fonctionné. Puis j'ai découvert quand je suis passé <?phpà <?la commande ne fonctionnait plus. Tous mes sites php utilisent à la <?place de <?phpce qui n'est peut-être pas idéal, mais c'est la réalité. J'ai résolu le problème en allant dans / etc / php5 / apache2, en recherchant "short_open_tag" et en changeant la valeur de Off à On.


0

Si aucune des solutions ci-dessus ne fonctionne,

essayez de commenter la ligne

SetHandler ....

et redémarrez Apache en utilisant

/etc/init.d/httpd restart

Ça devrait marcher!


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

J'ai ce genre de problème. Voilà comment je le résous. Après avoir installé Apache, j'ai installé PHP en utilisant cette commande.

sudo apt-get install php libapache2-mod-php

il s'exécute correctement mais je demande le fichier .php à Apache, il donne sans exécuter le script PHP .

Ensuite, je vérifie que PHP est activé.

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

mais il n'a montré aucun résultat. Je vérifie les packages PHP installés.

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

Différents types de versions PHP installées sur mon ordinateur. Ensuite, je supprime certains paquets PHP de ma liste précédente, en utilisant apt-get purge .

sudo apt-get purge libapache2-mod-php7.0 php7.0 php7.0-cli php7.0-common php7.0-json

Je réinstalle PHP

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

Vérifiez que le module PHP est chargé

$ a2query -m php7.0

s'il n'est pas activé avec:

$ sudo a2enmod php7.0

Redémarrez le serveur Apache

$ sudo systemctl restart apache2

Enfin, je vérifie le processus PHP sur Apache

créer un fichier vide

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

Ajoutez ce contenu à info.php et enregistrez.

<?php
  phpinfo();
?>

Vérifier sur le navigateur:

http: //localhost/info.php

ça se voit correctement, je pense que ça aidera n'importe qui.


0

J'ai eu ce problème et si vous n'avez jamais joué avec les paramètres de configuration de votre serveur, votre problème est à 90% dans votre fichier .htaccess

Vous pouvez soit modifier le fichier .htaccess LOCALEMENT, soit le supprimer (LOCALEMENT)


0

Si vous avez virtualmin, essayez de commenter ces lignes dans votre configuration apache dans / etc / apache2 / sites-available

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

0

Lorsque j'ai mis à jour PHP 7.2 vers PHP 7.4, j'ai également eu le même problème. Travaillé en faisant ce qui suit: -

  1. Dans [domain].conf file, a commenté ce qui suit:

    Moteur php_admin_value désactivé

Et ajouté:

AddType  application/x-httpd-php-source  .phps
AddType text/html .php
  1. Désactivez le mod 7.2 et activez 7.4 en suivant:

    a2dismod php7.2
    a2enmod php7.4

  2. Dans le /etc/apache2/mods-enabled/php7.4.conffichier, commentez ce qui suit:

    Application SetHandler / x-httpd-php
    moteur php_admin_flag désactivé


0

Pour les personnes qui ont trouvé ce message de Google près de 6 ans dans le futur (et au-delà!), Vous pouvez rencontrer ce problème avec Apache 2 et PHP 7 tout en utilisant également le UserDirmodule.

Une autre cause possible de ce problème peut être que vous essayez d'exécuter le script dans un "répertoire utilisateur" à partir du UserDirmodule. L'exécution de scripts PHP dans les répertoires des utilisateurs est désactivée par défaut. Vous rencontrerez ce problème si le script se trouve dans le public_htmlrépertoire de votre dossier de départ et que vous essayez d'y accéder depuishttp://localhost/~your_username .

Pour résoudre ce problème, ouvrez /etc/apache2/mods-enabled/php7.2.conf. Vous devez commenter ou supprimer le bloc de balises en bas qui lit

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

-1

Si votre .htaccess a quelque chose comme ça

AddType application/x-httpd-ea-php56 .php .php5 .phtm .html .htm
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.