Apache affiche le code PHP au lieu de l'exécuter

107

J'ai récemment essayé d'installer PHP et Apache sur mon ordinateur. Après de nombreuses heures, ils sont installés. J'ai modifié les fichiers httpd.conf et php.ini comme tout le monde le dit. J'ai ensuite créé un simple script PHP:

<?php phpinfo(); ?>

Mais quand j'essaie de l'exécuter avec, http://127.0.0.1/phpinfo.phpil montre simplement le code source au lieu de l'exécuter. J'utilise Apache 2, PHP 5 et Windows Vista.

LIGNES MODIFIÉES:

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"
imulsion
la source
dans phpinfo.php avez-vous ajouté des en-têtes qui rendent le fichier .php lisible?
@Peteris no mon script entier est dans ma question
imulsion
essayez un script simple: <?php echo "Hello world"; ?>affiche-t-il Hello world? s'il affiche le code, alors comment @RabNawaz a dit que votre serveur n'est pas configuré correctement!
Il suffit d'afficher à nouveau le code :(
imulsion
1
d'où accédez-vous à votre fichier php? Veuillez noter que pour exécuter le fichier php par votre serveur, vous devez placer vos fichiers dans le répertoire racine Web approprié. et accédez-y dans votre navigateur Web en tant que http://localhost/ouhttp://127.0.0.1/
Ibrahim Azhar Armar

Réponses:

90

Vous devez activer php! Vérifiez le dossier mods-enableddans le répertoire Apache (par défaut:) /etc/apache2/pour voir si vous trouvez un fichier nommé php. Je ne me souviens pas de l'extension mais je pense que c'est .so.

Vérifiez également /var/log/apache2/error.logsi vous avez d'autres erreurs.

Daniel Figueroa
la source
8
avez-vous exécuté: a2enmod php5
Daniel Figueroa
6
il n'y a pas de dossier mods_enabled dans mon répertoire apache
imulsion
@imulsion dans mon cas, il était compatible avec les mods sous / etc / apache2 /
Silveri
6
Dans mon cas pour php7, je devais le faire a2enmod php7.0et cela a résolu mon problème. Il a fallu une journée entière pour atteindre ce poste en quelque sorte!
Rorschach le
3
Il n'y a pas de fichier appelé phpdans mods-enabled, maintenant? Cette réponse n'explique pas les choses
Black
61

Wow, beaucoup de solutions ici! Voici ce que j'ai fait sur Ubuntu 16.04 :

sudo apt-get install php libapache2-mod-php
sudo a2enmod mpm_prefork && sudo a2enmod php7.0
sudo service apache2 restart
Helmy
la source
A travaillé pour moi en ajoutant --reinstallà apt-get. L'installation du module php / apache était peut-être sale.
Glastis
Cela a fonctionné pour moi sur le serveur Ubuntu 16.04 de Digital Ocean Merci
Sushant Bhargav
cela me donne les erreurs suivantes: Considering conflict php5 for php7.0, Considering conflict mpm_worker for mpm_prefork, etc ... et apache2 redémarrage échoue
MRID
Si vous obtenez, Considering conflict php5 for php7.2allez /etc/apache2/mods-availableet supprimezphp5.*
Simon Epskamp
39

Pour PHP 7 (peut également s'appliquer aux versions précédentes), mais je devais faire ceci:

Ajoutez ceci au bas de /etc/apache2/apache2.conf

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

Exécutez ceci à partir du terminal:

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

N'oubliez pas de redémarrer Apache pour qu'il sache que vous avez changé les choses:

sudo service apache2 restart

Ceci est un résumé de: https://www.atlantic.net/community/howto/try-php7-lamp-ubuntu-14-04/

RyanNerd
la source
3
J'ai dû faire cela pour PHP 5.6 sur OSX El Capitan. (Utilisation de stock apache, mais homebrew php56)
rfay
1
Fonctionne également sur Windows (ce qui signifie que vous n'avez pas à exécuter les commandes du terminal sur Windows) Merci de m'avoir sauvé des recherches interminables.
che-azeh
lors de l'installation à partir de la source, cette correspondance de fichiers était requise. (la configuration et le make etc. activent le module dans httpd.conf pour moi, mais
n'ont
Il y a un milliard de commentaires dans l'exemple de fichier httpd.conf; quelqu'un peut-il expliquer pourquoi il n'y en a pas un pour php? Ce n'est pas une chose rarement utilisée.
Danial
@Danial httpd.apache.org/support.html a un certain nombre de méthodes où vous pouvez trouver des documents, signaler des bogues et poser des questions (par exemple, pourquoi n'y a-t-il pas un exemple sensé d'utilisation de PHP dans httpd.conf?)
RyanNerd
24

ouvrir le dossier

/etc/apache2/httpd.conf

et changer

#LoadModule php5_module libexec/apache2/libphp5.so

dans

LoadModule php5_module libexec/apache2/libphp5.so

Donc, décompressez le chargement du module PHP dans httpd.conf

inigo333
la source
Dans mon cas, la ligne a commencé par php7_module - mais sinon, cela a fonctionné pour moi!
b0rgBart3
6

Une réponse différente qui a fonctionné pour moi. Est-ce que pour installer[sudo] apt-get install libapache2-mod-php5.X

Simon Mohoalali
la source
1
Le mien était similaire. J'ai fait "sudo apt-cache search ^ libapache2 | grep php" qui trouve les paquets appropriés et ensuite installé "sudo apt-get install libapache2-mod-php". libapache2-mod-php7.0 était déjà installé.
VectorVortec
3

Bien si vous avez essayé ce qui vous a été dit ci-dessus ou plus tôt (qui sont des raisons possibles) et qu'il affiche toujours le code au lieu de l'exécuter, il y a une chose que vous faites mal qui n'a pas été résolue. L'url que vous avez utilisée pour accéder à votre code php; certaines personnes essaient d'exécuter leur code php en faisant simplement glisser le fichier .php dans le navigateur Web. cette pratique est erronée et pourrait conduire à ce genre de problème. si vous avez enregistré un fichier sous le nom "test.php" dans le dossier C: // wamp / www, vous devez accéder à ce fichier de cette manière: localhost: //test.php. ce genre d'erreur se produira lorsque vous y accédez de cette façon: localhost: //wamp/www/test.php

J'espère que j'ai aidé quelqu'un là-bas. o / ~ Daniel

DAniel
la source
3

Publier ce qui a fonctionné pour moi au cas où cela aide quelqu'un sur la route, bien que ce soit un cas inhabituel.

J'avais défini un gestionnaire pour forcer mon hôte Web à utiliser une version supérieure de php que sa version par défaut. Il y avait 5.1, mais je voulais 5.6 alors j'ai eu ceci:

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

dans mon fichier .htaccess.

Lorsque j'essayais d'exécuter mon site localement, cela provoquait la sortie de code php vers le navigateur. Le supprimer a résolu le problème.

evanmcd
la source
3

Apache affiche le code php au lieu d'exécuter le problème est résolu

1. Ouvrez php5.6 conf ou php7.x conf

# commande suivante:

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

2. A commenté les lignes suivantes

entrez la description de l'image ici

3. Redémarré le serveur

$ sudo service apache2 redémarrer

4 Profitez :)

Matthew Farrell
la source
2

Vous pouvez supprimer votre fichier .htaceess et laisser le système en créer un nouveau (vierge ou basique). Il se peut que certaines lignes que vous avez ajoutées soient des déclarations incorrectes ou que quelque chose d'autre à l'intérieur soit à l'origine du problème. Vous pouvez ensuite ajouter ligne par ligne à partir de votre ancien fichier .htaccess pour voir ce qui a causé le problème.

Cela a fonctionné pour moi. Les lignes indiquant à la machine de ne pas afficher les extensions php étaient un problème dans mon cas ( RewriteCond et RewriteRule ). Mon ancien fichier .htaccess fonctionnait très bien sur un serveur partagé, mais ce problème est apparu lorsque je suis passé à VPS.

bokistack
la source
Aussi si vous rencontrez la stupidité CORS: exécutez sudo a2enmod headerset sudo a2enmod rewrite(n'oubliez pas de redémarrer Apache).
RyanNerd
2

Merci aux autres sur ce fil pour leurs suggestions. En suivant les étapes mentionnées, j'ai constaté que le serveur Apache n'était pas en mesure de commencer à signaler une erreur de syntaxe dans un loadfichier dans /etc/apache2/mods-enabled. Il s'avère que php7.0 et php7.1 ont été activés.

a2dismod php7.0
systemctl restart apache2

et php est à nouveau rendu correctement.

djnz0feh
la source
1

si le module userdir est activé et que votre site est dans un userdir (~ / public_html), vous devez vérifier /etc/apache2/mods-enabled/php5.conf. La partie suivante le fait fonctionner (sur Ubuntu 14.10 utopic):

# 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
la source
1

Si vous êtes un utilisateur ubuntu, après l'installation d'apache, vous devez exécuter la commande suivante dans une nouvelle installation

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

Dans mon cas fonctionne très bien.

Hasan Baig
la source
1

Ce qui a fonctionné pour moi:

Dans httpd.conf actif, recherchez

<IfModule mime_module>
...
</IfModule>

Il manquait ce qui suit

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

Après avoir redémarré Apache, les fichiers .php sont correctement analysés.

Paul
la source
1

aucun des éléments ci-dessus ne s'est appliqué ou n'a fonctionné pour moi ... PHP7, Apache Httpd 2.2 sur CentOS 6

le fait est que j'ai installé (tout avec yum) php AVANT Apache ... vous devez faire l'inverse: toujours installer Apache d'abord, puis PHP, et ensuite ça marche ... En effet, vous êtes probablement absent libphp7.soet libphp7-zts.soen/etc/httpd/modules/

J'ai pu récupérer de toute façon sans désinstaller PHP. J'ai ajouté la ligne magique dans /etc/httpd/conf/httpd.conf: AddType application/x-httpd-php .php Et puis exécutez:yum install php php-mysql

Berhauz
la source
1

Pour PHP7 et Apache2.4, c'est tout ce que vous devez faire:

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

Allez tout en bas et insérez ce qui suit (tout seul):

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

Apache va maintenant tout exécuter avec PHP. Si tout ce que vous avez sont des fichiers html et php, cela fonctionnera très bien pour vous. Si vous avez d'autres types de fichiers, vous devrez adapter le fichier à votre situation. J'ai testé cela avec phpMyAdmin et il ne semble pas y avoir de problème ... jusqu'à présent.

Aucune de ces autres choses dont tout le monde parle ici n'était nécessaire pour moi. Quand j'ai mis le truc "AddType Application ....." au bon endroit, Apache m'a juste dit que ce module était déjà chargé et l'a ignoré.

Plus d'informations peuvent être trouvées ici: https://httpd.apache.org/docs/2.4/mod/core.html#filesmatch

Mon installation s'est déroulée comme suit:

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

Vous devriez également lire ceci, si vous ne l'avez pas fait: https://httpd.apache.org/docs/current/howto/htaccess.html#when

Adam Winter
la source
0

Cela m'arrivait également lors de l'exécution de $ _POST dans MAMP. Tous mes fichiers .ini et httpd ont tous été correctement configurés. Si vous manipulez des formulaires et que vous avez un document html et que vous publiez les informations dans un gestionnaire de formulaires php exécutant $ POST, assurez-vous que vous exécutez le fichier html depuis localhost via votre serveur, et pas seulement localement.

C'était un raccourci que j'ai fait pour exécuter des documents html, en cliquant simplement sur le fichier html dans mon répertoire et en le lançant dans mon navigateur Web, alors qu'en réalité pour vérifier si php est en cours de traitement dans votre formulaire, vous devez exécuter votre html via vos serveurs. Un protocole très simple que j'ai négligé.

Exemple:

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

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

Maintenant, le php devrait être traité une fois que vous avez cliqué sur votre bouton d'envoi

maidenastraea
la source
0

J'ai eu le même problème, causé par la configuration par défaut du module Debian / Ubuntu suphp. Il contenait suPHP_Engine offpour tout / usr / share, ce qui a entraîné l'affichage des sources php dans le navigateur. La désactivation avec a2dismod suphpétait la solution provisoire.

Torsten Knodt
la source
0

J'ai eu le même problème. Lorsque j'exécute un fichier php, le navigateur Web m'a montré le code php au lieu de l'exécuter. J'avais essayé plusieurs fois: désinstaller / réinstaller le wampserver64, travailler autour des paramètres / modules PHP / Apache, etc. Après 2 jours: je me suis rendu compte que lorsque j'ai essayé d'exécuter le fichier php dans le bloc-notes ++ en appuyant sur la combinaison par défaut "ctrl + alt + shift + R "pour le chrome. Il essayait d'exécuter mon fichier php comme: "fichier /// C: / wamp64 / www / bla / bla .." dans la barre d'adresse de mon chrome. C'était mon problème. J'ai fait les changements selon la page Configurer Notepad ++ pour exécuter php sur localhost? . Mon problème a été résolu. Mais après 2 jours ..

mécanicien
la source
0

Exécutez Xampp (apache) en tant qu'administrateur. Dans google chrome, tapez:

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

c'est-à-dire que si le dossier que vous avez créé est "LearnPhp", le fichier est "chapter1.php" puis tapez

localhost/LearnPhp/chapter1.php

J'ai créé ce dossier dans le dossier xampp dans le dossier htdocs qui est créé lorsque vous téléchargez xampp.

Aquasar
la source
0

Solution Debian 9:

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

Ajouter au fichier les lignes suivantes:

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

Puis exécutez:

a2enconf php && service apache2 restart
monsieur Dinkelman
la source
Cela a fonctionné pour moi, mais pas au départ. J'exécute du contenu Web dans les répertoires d'utilisateurs, qui est désactivé par défaut. Pour activer cela, voir la dernière section de/etc/apache2/mods-available/php7.2.conf
Tony Adams
0

Parfois, si vous avez des conflits de version php, cela arrive Pour surmonter cela, veuillez suivre les étapes ci-dessous

Étape 1: Liste Yum installée | grep 'php'

si vous avez plusieurs versions de php comme php 5.6 et php 7.0, ce conflit se produira

Étape 2: yum supprimez ** votre version PHP **

Étape 3: Ensuite, redémarrez l'apapche /etc/init.d/httpd restartouservice apache2 restart

sachin_ur
la source
0

Cette solution a fonctionné pour moi. J'ai purgé apache2 et réinstaller. Cela s'est produit après la purge et l'installation. S'il s'agit de la première installation, vous ne seriez pas confronté à ce problème.

Kemal Atik
la source
0

J'ai essayé un certain nombre des solutions ci-dessus, mais le correctif dans notre scénario était d'installer le module fpm.

Nous avions installé httpd avant php, ce qui peut avoir quelque chose à voir avec le problème, mais pour résoudre nous avons installé ce qui suit:

module yum installer php: 7.2

Cela a installé le module php-fpm-7.2.11-4.module + el8.1.0 + 5443 + bc1aeb77.x86_64.rpm que nous avons ensuite activé par:

systemctl enable - maintenant php-fpm

À partir de là, nous avons laissé le fichier /etc/httpd/conf.d/php.conf par défaut et avons redémarré httpd

redémarrage du service httpd

Ensuite, tout a fonctionné.

J'espère que cela aide, a pris beaucoup plus de temps qu'il n'aurait dû le comprendre.

Bren1818
la source
0

Ajouter la configuration suivante à /etc/apache2/apache2.conf

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

Et redémarrez la apacheviasudo service apache2 restart

Imran Zahoor
la source