Le code PHP n'est pas en cours d'exécution, mais le code s'affiche à la place sur la page


320

J'essaie d'exécuter du code PHP sur un projet (en utilisant Dreamweaver) mais le code n'est pas en cours d'exécution.

Lorsque je vérifie le code source, le code PHP apparaît sous forme de balises HTML (je peux le voir dans le code source). Apache fonctionne correctement (je travaille avec XAMPP), les pages PHP s'ouvrent correctement mais le code PHP n'est pas exécuté.

Quelqu'un a-t-il une suggestion sur ce qui se passe?

Remarque: le fichier est déjà nomméfilename.php

Edit: Le Code ..:

<?
include_once("/code/configs.php");
?>

L'empreinte


44
Utilisez-vous <?plutôt des balises courtes <?php?
Dan Grossman

28
N'utilisez JAMAIS de balises courtes. ( <?). Ils sont obsolètes, ne fonctionnent pas vraiment dans beaucoup d'endroits et sont par ailleurs complètement inutiles. L'enregistrement de trois frappes n'est pas une raison valable pour permettre à votre code d'échouer sur probablement la moitié des serveurs sur lesquels il peut fonctionner.
mopsyd

10
@mopsyd Où est-il dit que les balises courtes sont déconseillées? Veuillez noter que les balises courtes ne sont pas identiques aux balises d'écho courtes et que les balises d'écho courtes sont prises en charge par défaut depuis PHP 5.4, quel que soit le short_open_tagparamètre.
Kyle Anderson

5
Je suis conscient que les balises courtes ne sont pas des balises d'écho courtes, c'est pourquoi j'ai spécifié de quoi je parlais dans le commentaire. Au moment d'écrire ces lignes, les balises courtes ont été signalées comme obsolètes pour la version php 6, bien que cela ait apparemment changé depuis. Le problème existe toujours que beaucoup de serveurs les ont désactivés, ce qui rend votre code beaucoup moins portable. Cela ne s'applique pas aux balises d'écho courtes ( <?=), qui devraient fonctionner correctement sur php 5.4+, quels que soient les paramètres du serveur.
mopsyd

3
parler idiot de balises courtes. Les étiquettes longues sont nulles et laides. Je n'ai jamais eu de problème en 10 ans de programmation php. Ils ne sont presque jamais le problème
Danial

Réponses:


418

On dirait qu'il y a un problème avec votre configuration, voici quelques éléments que vous pouvez vérifier:

  1. Assurez-vous que PHP est installé et fonctionne correctement. Cela peut sembler idiot, mais on ne sait jamais. Un moyen facile de vérifier consiste à exécuter à php -vpartir d'une ligne de commande et à voir si renvoie des informations de version ou des erreurs.

  2. Assurez-vous que le module PHP est répertorié et non commenté à l' intérieur du httpd.conf de votre Apache Cela devrait être quelque chose comme LoadModule php5_module "c:/php/php5apache2_2.dll"dans le fichier. Recherchez LoadModule phpet assurez-vous qu'il n'y a pas de commentaire ( ;) devant.

  3. Assurez-vous que le fichier httpd.conf d'Apache contient le type PHP MIME. Cela devrait ressembler à quelque chose AddType application/x-httpd-php .php. Cela indique à Apache d'exécuter des .phpfichiers en PHP. Recherchez AddType, puis assurez-vous qu'il existe une entrée pour PHP et qu'elle n'est pas mise en commentaire .

  4. Assurez-vous que votre fichier porte l' .phpextension, ou toute extension spécifiée dans la définition MIME au point # 3, sinon il ne sera pas exécuté en PHP.

  5. Assurez-vous que vous n'utilisez pas de balises courtes dans le fichier PHP ( <?), celles-ci ne sont pas activées par défaut sur tous les serveurs et leur utilisation est déconseillée. Utilisez-le à la <?phpplace (ou activez les balises courtes dans votre php.ini avec short_open_tag=Onsi vous avez du code qui dépend d'eux).

  6. Assurez-vous que vous accédez à votre fichier sur votre serveur Web en utilisant une URL comme http://localhost/file.phppas via l'accès au fichier localfile://localhost/www/file.php

Et enfin, consultez le manuel PHP pour d'autres conseils de configuration .


14
Je ne sais pas pourquoi, mais l'installateur de PHP 5.3.15 n'ajoute pas la ligne AddType application/x-httpd-php .php. Merci beaucoup!!
MatuDuke

7
@shmeeps: Où avez-vous vu que les balises courtes sont obsolètes? J'ai fait quelques recherches et je ne trouve que des recommandations contre eux, rien sur la dépréciation. Accordé pour les applications qui doivent être distribuées, il est préférable d'utiliser <? Php au cas où le serveur d'hébergement ne les aurait pas activées, mais pour les applications où vous avez un contrôle total sur le serveur sur lequel elles seront, je ne le fais pas voir aucune raison de ne pas les utiliser.
ClarkeyBoy

3
le point no 6 a fonctionné pour moi .. l'accès local n'utilise pas le serveur apache
KawaiKx

6
le point 2 a fonctionné pour moi en toute sécurité -apt-get purge apache2; apt-get install apache2 libapache-mod-php5
ulkas

1
@full_prog_full Essayez de télécharger un fichier avec une .phpextension avec le contenu <?php echo("Success"); ?>et voyez si l'accès au fichier via un navigateur Web entraîne l'affichage de "Success" sans le code PHP associé.
shmeeps

61

php7:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.0-fpm
sudo service apache2 restart

24
Bien que cet extrait de code puisse résoudre la question, y compris une explication de comment et pourquoi cela résout le problème aiderait vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondrez à la question des lecteurs à l'avenir, pas seulement à la personne qui vous pose la question maintenant! Veuillez modifier votre réponse pour ajouter des explications et donner une indication des limitations et hypothèses applicables.
Toby Speight

4
Cette réponse est liée à Linux, le sujet utilise clairement Windows.
Raymond Nijland

3
@RaymondNijland true mais c'est canonique et j'ai trouvé cette question et cela m'a sauvé après plus d'une heure de dépannage.
Goose

Comment et pourquoi: cela se produit lorsque PHP7 ne configure pas le service CGI rapide par défaut dans le script make. sudo a2enmod proxy_fcgi setenvifcrée trois nouveaux mods /mods-available/proxy.conf proxy_fcgi.load proxy.loadDe même, sudo a2enconf php7.0-fpmcrée un fichier de configuration /conf-available/php7.0-fpm.confUne fois cela fait, Apache2 peut alors exécuter le module PHP7 en tant que service CGI rapide.
Talvi Watia

33

J'utilise Apache sur Ubuntu et mon problème était que le /etc/apache2/mods-available/php5.conffichier manquait ceci:

<FilesMatch ".+\.ph(p[345]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

Je l'ai rajouté et php analysait correctement les fichiers php.


31

note pour les utilisateurs de php 7, ajoutez ceci à votre fichier httpd.conf:

# PHP 7 specific configuration
<IfModule php7_module>
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
    <IfModule dir_module>
        DirectoryIndex index.html index.php
    </IfModule>
</IfModule>

4
Juste pour aider d'autres personnes avec ce problème. Le httpd.conffichier se trouve dans /etc/apache2/httpd.confSi vous utilisez Ubuntu, il se trouverait apache2.confdans le même répertoire qui doit être modifié pour PHP7.
Ahmed Sagarwala

23

J'ai trouvé un autre problème à l'origine de ce problème et je l'ai déjà résolu. J'ai accidentellement enregistré mon script dans l' UTF-16encodage. Il semble que PHP5 ne puisse pas reconnaître les <?phpbalises en encodage 16 bits par défaut.


18

Je poste cette réponse parce que mon interface d'administration Virtualmin / Webmin a décidé que c'était une bonne idée de désactiver mon moteur PHP .. il m'a fallu un certain temps pour trouver la solution, alors j'ai pensé la partager avec vous:

Assurez-vous également qu'aucun de vos fichiers de configuration de site Web liés à cet hôte ou virtualhost spécifique ne contient de php_admin_value qui désactivent PHP, comme ceci:

php_admin_value engine Off

En cas de doute, commentez-le ...

# php_admin_value engine Off

Et redémarrez votre serveur Web.


1
Où sont ces paramètres de configuration exactement?
cronoklee

2
@cronoklee Dans les paramètres vHost de httpd.conf. Pour les hôtes existants, vous devez modifier la configuration d'apache dans webmin. Pour les futurs hôtes, accédez à virtualmin> modèle de serveur> site Web apache. Quoi qu'il en soit, ce n'est pas aussi sûr que fastcgi - virtualmin par défaut. Donc, la bonne approche devrait être de résoudre les problèmes de fonctionnement de fcgi, par exemple, cela peut être dû à des autorisations de fichier.
Sheepy

Si vous utilisez une version d'Apache qui n'a pas httpd.conf, regardez dans /etc/apache2/mods-enabled/php7.confouphp5.conf
Sam Malayek

En cas de doute sur l'emplacement d'un certain paramètre de configuration, vous pouvez toujours utiliser grep pour trouver ce que vous recherchez en (par exemple dans ce cas) en tapant:sudo grep php_admin_value /etc/* -R
Henry van Megen

17

Vous venez d'ouvrir votre fichier php dans le navigateur. Vous devez l'ouvrir en utilisant l'URL localhost. si vous ouvrez un fichier directement depuis votre répertoire, il n'exécutera en aucun cas le code php.

utiliser: http://locahost/index.phpouhttp:127.0.0.1/index.php

Activez le code court php. Dans votre cas, vous utilisez <?qui est le code court php <?php. Par défaut, les codes courts php sont désactivés.

Utilisez également: sudo apt-get install php5 libapache2-mod-php5 php5-mcryptsi vous êtes un utilisateur ubuntu.


1
Pourquoi mcrypt est-il requis lorsque j'inclus simplement un fichier? Vous devriez remarquer que cette question est ancienne et que le problème des balises courtes a été mentionné 16 fois, également dans le premier commentaire de ma question.
Gui

1
Je viens de partager ma solution, j'étais également confronté à la même erreur et après avoir exécuté cette commande de mcrypt, mon problème a été résolu. vous pouvez également essayer.
Hasan Baig

par défaut, les codes courts php sont activés. short_open_tag = On (valeur par défaut = ON) dans php 5.6
zond

C'était mon problème, ma configuration virtualmin / apache était pour 127.0.0.2 mais je mettais mon adresse IP externe dans le navigateur, je viens de mettre à jour ma configuration v / a et maintenant son fonctionnement
Hayden Thring

Je manquais juste le libapache2-mod-php7.3.
dxvargas

8

Je sais que ça devrait paraître idiot ... mais ça arrive rarement.

Vérifiez si vous essayez d'exécuter php depuis

**http://localhost/info.php**

et non de

file:///var/www/info.php

ps> vous pouvez remarquer que si vous écrivez depuis le shell

php info.php 

il répond avec le code (ça veut dire les fonctions php) ..


PHP fonctionne bien (vérifié en ligne de commande). mais, lorsque j'accède au fichier à l'aide de l'URL, il affiche du code PHP.
muaaz

8

Cela m'est encore arrivé, avec le serveur téléchargeant des fichiers html, plutôt que de les traiter. Je n'avais pas utilisé le serveur Web apache depuis un certain temps sur l'ordinateur et pendant ce temps, Ubuntu était mis à jour comme deux autres versions de LTS installé à l'origine. C'est maintenant

$ cat /etc/issue
Ubuntu 16.04 LTS

Donc, le php a fonctionné comme suit:

$ sudo apt-get install lamp-server^
$ sudo a2enmod php7.0
$ sudo service apache2 restart 

Le serveur Web analysait maintenant le php. Peut-être avons-nous maintenant à mettre à jour certains sites Web depuis que php7.0 fonctionne maintenant où il était avant d'exécuter php5. Tant pis.


5

J'ai résolu ce problème en désinstallant XAMPP et en installant WAMP. Merci pour l'aide.


Je suis xampp mais ça marche bien. avez-vous trouvé pourquoi il montrait le code php @Gui
Pie

5

J'ai rencontré ce problème sur php 7.1 fourni avec High Sierra (OS X 10.13.5), l'édition /etc/apache2/httpd.confavec les changements suivants a aidé:

  1. Décommenter cette ligne

    LoadModule php7_module libexec/apache2/libphp7.so
  2. Coller à la fin

    <IfModule php7_module>
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php-source .phps
    
        <IfModule dir_module>
            DirectoryIndex index.html index.php
        </IfModule>
    </IfModule>

Comme la même chose, vous pouvez suggérer la même erreur à la version 3 de Wamp. Il n'y a pas de chemin de dossier /etc/apache2/httpd.conf dans le wamp 3. @AamirR
Gem

Cela a fonctionné pour moi !!! Le mien était un problème plus étrange. Certains fichiers ont rendu le PHP et d'autres pas et ont simplement affiché le code.
sjw0525

4

sur mon installation ubuntu 14.04, apache 2.4, php 5.5.9, j'ai essayé avec un sample.php sur / var / www / html (racine de document par défaut) et ça a bien fonctionné. Le problème était donc sur ma configuration Virtual Servers. La solution consistait à inclure, sur le répertoire def contenant le .php, cette ligne:

    php_admin_flag engine on

et où dois-je ajouter cette ligne dans le fichier Apache dans httpd.conf de mon serveur virtuel? et j'utilise Webmin
suresh pareek

4

Assurez-vous que le script contient

<?php

avant le code qui doit être exécuté. Il ne devrait y avoir aucun espace entre <?et phpen cela.


3

j'ai eu un problème similaire mais dans mon cas, la solution était différente. mon fichier qui contenait du code php s'appelait "somename.html" l'a changé en "somename.php" a bien fonctionné


Cela l'a également résolu pour moi. Est-ce que quelqu'un sait si le serveur exécutera php dans un fichier .html ou la fin du fichier doit-elle toujours être changée en .php quand il y a une ligne de php à exécuter?
full_prog_full

dépend des paramètres du serveur, dans la plupart des cas, le code php qui existe dans anyfile.html s'exécutera. et si ce n'est pas le cas, il peut être changé, mais idk comment: P
Netrus

3

Pour une nouvelle configuration de LAMP exécutant php 7, éditez le fichier /etc/httpd/conf/httpd.conf Remarque: assurez-vous de faire une sauvegarde avant de changer quoi que ce soit.

Collez-le tout en bas du fichier:

<IfModule php7_module>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

Ensuite, recherchez LoadModule et collez la ligne suivante:

LoadModule php7_module modules/libphp7.so

Cette ligne demandera simplement à httpd de charger le module php 7

Redémarrez ensuite httpd


3

Vérifiez tous les packages que vous avez installés pour php en utilisant:

yum list installed | grep remi

Installez tous les packages php pertinents , en particulier php-devel sur votre machine.


2

C'était dans mon .htaccess

DirectoryIndex index.html index.htm

index.html contenait du code PHP. Par défaut, PHP ne traitera pas les fichiers avec des extensions comme htm * comme code PHP.

Vous pouvez remplacer cela en ajoutant ce qui suit à .htaccess:

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

1

Je pense que le problème qu'il montre du code au lieu du résultat est qu'il ne va pas à l'hôte local. revérifiez quelle adresse vous allez. allez-vous dans un répertoire de fichiers local ou sur l'hôte local.

à partir de la capture d'écran que vous avez envoyée, il ne va pas à l'ordinateur local.

"file: ///" il devrait être "localhost /"


1

La réinstallation du mcryptmodule a fonctionné pour moi.

$sudo apt-get install php5-mcrypt
$sudo php5enmod mcrypt

Honnêtement, c'est peut-être parce que je n'avais pas configuré correctement le PHP sur mon système, mais comme la question que j'ai posée concernant le même problème a été marquée comme doublon à cette question, je n'ai pu y répondre qu'ici. Je me demande pourquoi le vote négatif.
bg

Cette réponse est liée à Linux, le sujet utilise clairement Windows
Raymond Nijland

1

J'ai eu un cas où j'ai accidentellement commencé à décompresser mon répertoire de fichiers à la racine. Il a ajouté le fichier .htaccess de mon dossier de fichiers qui bloquerait tous les php

# If we know how to do it safely, disable the PHP engine entirely.
<IfModule mod_php5.c>
  php_flag engine off
</IfModule>

En bout de ligne, vérifiez le fichier .htaccess à la racine.


1

Si vous avez une configuration comme celle-ci:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot "/var/www/example.com"

    <FilesMatch "\.php$">
        SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
</VirtualHost>

Décommentez les lignes suivantes dans votre httpd.conf

LoadModule proxy_module lib/httpd/modules/mod_proxy.so
LoadModule proxy_fcgi_module lib/httpd/modules/mod_proxy_fcgi.so

Ça marche pour moi


1

Ajoutez AddType application/x-httpd-php .phpà votre fichier httpd.conf si vous utilisez Apache 2.4


1

Je viens de passer des heures à essayer de faire fonctionner PHP 5 avec Apache 2.4 sur Windows 10 . Enfin pour moi, c'était une faute de frappe dans httpd.conf LoadModule . A attiré l'attention sur l'écriture et le chemin exact du module à travers la dernière réponse dans ce fil d' apachelounge de denny2018 . Je vous remercie!

Après deux nuits, j'ai découvert ... Mon répertoire a été écrit c:(en minuscules)

J'avais LoadModule php5_module "c:/php/php5apache2.dll"mais correct pour apache 2.4 c'est:

LoadModule php5_module "C:/php/php5apache2_4.dll"

J'ai donc également raté l' _4avant (pour apache 2.4 ). L'extrait complet qui a fonctionné pour moi:

# PHP
LoadModule php5_module "C:/php/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

Je viens d'essayer PHP 7 . Là, la LoadModuleligne dans httpd.conf pour Apache 2.4 se lit

LoadModule php7_module "C:/php/php7apache2_4.dll"

Actuellement, le manuel php montre c:/php/php5apache2.dll lequel doit bien sûr être ajusté.


1

dans mon cas (Apache / 2.4.34),

après avoir décommenté le module spécifique

"LoadModule php7_module libexec / apache2 / libphp7.so"

de

"/etc/apache2/httpd.conf"

mon problème était parti.


1

Au cas où nous serions sur la même page, suivez

sudo apt-get install php -y sudo apt-get install php-{bcmath,bz2,intl,gd,mbstring,mysql,zip,fpm} -y

Pour activer PHP 7.2 FPM dans Apache2, procédez comme suit:

a2enmod proxy_fcgi setenvif

a2enconf php7.2-fpm

mise à jour 2: Apache télécharge le fichier .php au lieu du rendu

Après cela, j'ai rencontré le problème ci-dessus. Il y a des questions similaires comme celle-ci .

Je ne sais pas pourquoi mais cela ne s'est produit que pour mes fichiers .php dans /var/www/html/le dossier racine. tout était ok pour les sous-répertoires. (par exemple, wordpress et phpmyadmin ont bien fonctionné)

Voici donc ma solution. J'ai décidé d'activer le module php. j'ai donc exécuté cette commande:

a2enmod php7.2

mais j'ai eu ces erreurs:

Considérant la dépendance mpm_prefork pour php7.2: Considérant le conflit mpm_event pour mpm_prefork: ERREUR: le module mpm_event est activé - ne peut pas continuer en raison de conflits. Il doit d'abord être désactivé! Considération du conflit mpm_worker pour mpm_prefork: ERREUR: impossible d'activer la dépendance mpm_prefork pour php7.2, abandon

j'ai donc décidé de désactiver mpm en exécutant les commandes suivantes:

sudo a2dismod mpm_prefork
sudo a2dismod mpm_worker
sudo a2dismod mpm_event

puis redémarrez apache:

systemctl restart apache2

puis activez php7.2 (ma version installée):

sudo a2enmod php7.2

et maintenant tout fonctionne bien.


1

Une autre cause possible de ce problème pourrait ê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 utilisateur 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 depuis http://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

le fichier que vous placez dans / var / www / html / devrait avoir .php par exemple example.php si c'est exemple il ne fonctionne pas mais si vous le changez en example.php cela fonctionne.

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.