web-dev-qa-db-fra.com

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

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 à jour. 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, mais les a simplement téléchargés. J'ai vérifié des questions similaires ici dans stackoverflow mais aucune d'entre elles ne m'aide 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 toute aide ... Merci.

MODIFIER:

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>

MODIFIER:

En enlevant le 

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

Apache ne télécharge plus le fichier. Maintenant, Apache montre le code source, mais tout n’est pas juste une partie. J'ai ajouté

AddType text/html .php

mais pas de chance.

79
Anthony Gainor

Le type approprié 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 - j’ai eu des jours où Chrome cachait obstinément le résultat et continue de télécharger le code source tandis que dans un autre navigateur, c’est parfait.

69
Mihkel

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

Si vous êtes invité à télécharger un fichier .php au lieu de l'exécuter, voici la solution idéale: 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 faites ce qui suit:

Il s'avère que les fichiers ne doivent pas être stockés dans mods-enabled, mais plutôt dans mods-available. Un lien symbolique doit ensuite ê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 ton problème est résolu.

15
Ravi Shankar

J'ai rencontré ce problème aujourd'hui et aucune des solutions décrites n'a fonctionné pour moi. Donc, voici une autre cause possible:

Si vous avez quelque chose comme

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

dans un fichier .htaccess de votre dossier de contenu Web, vos scripts PHP peuvent ne plus fonctionner. Dans mon cas, le serveur ne connaissait pas le type x-mapp-php6, car ce fichier .htaccess était quelque chose que j'avais importé d'un hôte différent lorsque j'ai transféré le contenu du site.

Le simple fait de supprimer la ligne AddHandler du fichier .htaccess a résolu le problème.

14
markus

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 tels que,

Sudo apt-get install libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json
5
Noushad PP

S'il vous plaît jeter un oeil à vos directives addtype. 

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

S'il vous plaît essayez ceci:

AddType text/html .php

En ce qui concerne la suggestion ci-dessus, vous devriez indiquer au navigateur que vous exportez un script PHP: Cela me semblait une idée inhabituelle. Je l'ai googlé et j'ai constaté qu'il y avait beaucoup de discussions à ce sujet sur le Web. Apparemment, dans certains cas, vous voudrez peut-être dire que vous envoyez un script PHP (même si Apache est supposé exécuter le script et émettre du texte/html), et il y a aussi des cas où le navigateur ne le fait tout simplement pas. reconnaître ce type de mime spécifique. 

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

Si cela peut vous être 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
5
Sam Azer

Si votre .htaccess a quelque chose comme ça ... AddHandler application/x-httpd-php53 .php .php5 .php4 .php3 Puis commentez-le et essayez à nouveau de rafraîchir cela a fonctionné pour moi ...

4
user252566

J'ai le même problème. Apache ne charge pas les fichiers php d'un certain site web, il vient de le 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 !!!

3
Ladislao Garcia

J'ai déjà eu un problème similaire après la mise à niveau de la version 5.3 à la version 5.4. Mais ma configuration est un peu différente, car j'utilise Debian et utilise fcgid pour servir les pages PHP, et non le module Apache/cgi PHP5 . qui est entré en collision avec ma configuration fcgid, et n'exécuterait 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 que le module php5_cgi était prêt, fcgid a pu servir à nouveau les pages PHP. 

2
derchris

Si 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
1
MedoAlmasry

Il est également possible que vous exécutiez nginx mais que votre php soit configuré pour fonctionner avec Apache. Pour vérifier, exécutez service nginx status et service Apache2 status pour voir lequel est en cours d'exécution. Si nginx est en cours d’exécution et pas Apache, exécutez simplement Sudo service nginx stop; Sudo service Apache2 start et votre serveur servira les fichiers php comme prévu.

1
hexicle

J'ai eu ce problème. Il s’est avéré que nginx et Apache étaient tous deux 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 le démarrage d’Apache.

1
dshepherd

J'avais des symptômes similaires, encore une autre solution:

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

J'ai passé deux jours à suivre cela 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 dans /var/www. Ils auraient dû être dans /var/www/html.

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

1
Craig Smilovitz

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

Sudo apt-get installez libapache2-mod-php7.0

Service Sudo Apache2 redémarrer

1
Marouen Mhiri

Ok ... Je sais qu’il ya déjà 1.000.000 réponses à cette question - 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 pas trouvé un seul post à 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 fichier /etc/Apache2/[[SERVER-NAME].conf-:

php_admin_value engine Off
IPCComTimeout 31

Je n'ai aucune idée de ce qu'ils font ni de la façon dont ils y sont arrivés - mais cela se trouve dans chacun de mes fichiers .conf-. Et si je supprime ces lignes et s’assure qu’il existe un lien symbolique dans /etc/Apache2/sites-enabled/-, il ne télécharge pas le fichier index.php - et tout fonctionne normalement.

Toute l'histoire

J'ai VirtualMin installé sur un Ubuntu 16.04 VPS. J'ai mis à niveau vers PHP version 7.2. Peu de temps après, j’ai mis à jour la version d’Ubuntu et jeté une erreur «Décalage du noyau: désactivé». Je devais donc supprimer la dernière version d'Ubuntu - et lorsque mon système d'exploitation a redémarré: BOOM! J'ai eu l'erreur que son message parle de: Pour chaque site sur mon VPS, il a simplement téléchargé 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 succès. 
  • Ensuite, j'ai enlevé complètement Apache et l'ai réinstallé, où-après le problème était toujours là!
  • J'ai essayé de jouer avec la configuration de Virutal Server dans VirtualMin (Webmin >> Serveurs >> Apache Webserver). 
  • Vérifié la configuration sur un seul serveur virtuel (Virtualmin >> Paramètres système >> Vérifier à nouveau la configuration) ... Cette étape était plutôt agréable, car elle indiquait quel module manquait dans Apache; où-après je pourrais l'activer avec a2enmod [MODULE_NAME]. Et j'ai trouvé le nom du module en cherchant sur Google. J'ai dû activer environ 6 à 8 modules avant de passer l'étape de validation - et cela a pris quelques minutes avant que la mémoire cache ne soit épuisée - c'est donc une étape fastidieuse.
  • Enfin, j'ai compris la conclusion ci-dessus - ainsi que les liens symboliques - et je l'ai ensuite mise au travail. Je devais cependant passer par tous les sites de mon VPS. 
0
Zeth

Si rien de ce qui précède ne fonctionne,

essayez de commenter la ligne

SetHandler ....

et redémarrez Apache en utilisant 

/etc/init.d/httpd restart

Ça devrait marcher!

0
Cosmo Arun

J'ai ce genre de problème. Voici comment je le résous . Après avoir installé Apache, j’ai installé PHP à l’aide de 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 paquets PHP installés.

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

Différents types de versions PHP installés 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

si non 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 & save.

<?php
  phpinfo();
?>

Vérifiez sur le navigateur:

http: //localhost/info.php

ça se voit correctement. Je pense que cela aidera n'importe qui.

0
Janaka Pushpakumara

J'ai eu un problème similaire à l'OP lors de la mise à niveau de php5 à partir d'une version antérieure, vers la version 5.5.9, qui est la version installée avec la menthe 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 les télécharger sur le serveur réel. Je maintiens 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'affichent pas ou affichent uniquement le code HTML sur la machine locale. PHP n'a pas été analysé. La commande phpinfo () fonctionnait, alors je savais que php fonctionnait autrement. Le journal n'a généré aucune erreur. Voir la source de la page m'a montré le code PHP actuel.

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

<?php phpinfo(); ?>

Cela a fonctionné. Ensuite, j'ai découvert que lorsque j'ai remplacé <?php par <?, la commande ne fonctionnait plus. Tous mes sites php utilisent <? au lieu de <?php, ce 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 cherchant "short_open_tag" et en changeant la valeur de Off à On.

0
Slip

Si vous avez virtualmin, essayez de commenter ces lignesdans votre configuration Apache dans/etc/Apache2/sites-available

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

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

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

Vous pouvez soit modifier .htaccess file LOCALLY, soit le supprimer (LOCALLY)

0
Dia