Apache mostra il codice PHP invece di eseguirlo


107

Recentemente ho provato a installare PHP e Apache sul mio computer. Dopo molte ore vengono installati. Ho modificato i file httpd.conf e php.ini come dicono tutti. Ho quindi creato un semplice script PHP:

<?php phpinfo(); ?>

Ma quando provo a eseguirlo http://127.0.0.1/phpinfo.phpmostra solo il codice sorgente invece di eseguirlo. Sto usando Apache 2, PHP 5 e Windows Vista.

LINEE MODIFICATE:

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"

in phpinfo.php hai aggiunto alcune intestazioni che rendono leggibile il file .php?

@Peteris no, tutta la mia sceneggiatura è nella mia domanda
imulsion

prova un semplice script: <?php echo "Hello world"; ?>mostra Hello world? se mostra il codice, allora come @RabNawaz ha detto che il tuo server non è configurato correttamente!

Visualizza di nuovo il codice :(
imulsion

1
da dove stai accedendo al tuo file php? tieni presente che per eseguire il file php dal tuo server devi mettere i tuoi file nella corretta directory principale del web. e accedilo nel tuo browser web come http://localhost/ohttp://127.0.0.1/
Ibrahim Azhar Armar

Risposte:


90

Devi abilitare php! Controlla la cartella mods-enablednella directory Apache (predefinita :) /etc/apache2/per vedere se trovi un file denominato php. Non ricordo l'estensione ma penso che sia .so.

Controlla anche /var/log/apache2/error.logse hai altri errori.


8
hai eseguito: a2enmod php5
Daniel Figueroa

6
non c'è nessuna cartella mods_enabled nella mia directory apache
imulsion

@imulsion nel mio caso era abilitato per le mod in / etc / apache2 /
Silveri

6
Nel mio caso per php7, dovevo farlo a2enmod php7.0e ha risolto il mio problema. Ho impiegato l'intera giornata per raggiungere questo post in qualche modo!
Rorschach

3
Non v'è alcun file chiamato phpin mods-enabled, e adesso? Questa risposta non spiega le cose
Black

61

Wow, molte soluzioni qui! Ecco cosa ho fatto su Ubuntu 16.04 :

sudo apt-get install php libapache2-mod-php
sudo a2enmod mpm_prefork && sudo a2enmod php7.0
sudo service apache2 restart

Ha funzionato per me aggiungendo --reinstallad apt-get. L'installazione del modulo php / apache potrebbe essere sporca.
Glastis

Questo ha funzionato per me sul server Ubuntu 16.04 di Digital Ocean Grazie
Sushant Bhargav

questo mi dà i seguenti errori: Considering conflict php5 for php7.0, Considering conflict mpm_worker for mpm_prefork, ecc ... e apache2 restart non riesce
mrid

Se Considering conflict php5 for php7.2vai /etc/apache2/mods-availablee cancelliphp5.*
Simon Epskamp

39

Per PHP 7 (può essere applicato anche alle versioni precedenti), ma dovevo farlo:

Aggiungilo in fondo a /etc/apache2/apache2.conf

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

Eseguilo dal terminale:

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

Quindi non dimenticare di riavviare Apache in modo che sappia che hai cambiato cose:

sudo service apache2 restart

Questo è un riepilogo da: https://www.atlantic.net/community/howto/try-php7-lamp-ubuntu-14-04/


3
Ho dovuto farlo per PHP 5.6 su OSX El Capitan. (Utilizzando apache stock, ma homebrew php56)
rfay

1
Funziona anche su Windows (il che significa che non devi eseguire i comandi del terminale su Windows) Grazie per avermi salvato infinite ricerche.
che-azeh

durante l'installazione dall'origine, questa corrispondenza di file era richiesta. (la configurazione e il make ecc.
abilitano

Ci sono un miliardo di commenti nel file httpd.conf di esempio; qualcuno può spiegare perché non ce n'è uno per php? Non è una cosa usata raramente.
Danial

@Danial httpd.apache.org/support.html ha un numero di metodi in cui puoi trovare documenti, segnalare bug e porre domande (come perché non c'è un buon esempio di utilizzo di PHP in httpd.conf?)
RyanNerd

24

apri il file

/etc/apache2/httpd.conf

e cambiare

#LoadModule php5_module libexec/apache2/libphp5.so

in

LoadModule php5_module libexec/apache2/libphp5.so

Quindi decomprimi il caricamento del modulo PHP in httpd.conf


Nel mio caso la linea iniziava con php7_module - ma per il resto ha funzionato per me!
b0rgBart3


6

Una risposta diversa che ha funzionato per me. È quello, da installare[sudo] apt-get install libapache2-mod-php5.X


1
Il mio era simile. Ho fatto "sudo apt-cache search ^ libapache2 | grep php" che trova i pacchetti rilevanti e poi ho installato "sudo apt-get install libapache2-mod-php". libapache2-mod-php7.0 era già installato.
VectorVortec

3

Va bene se hai provato quello che ti è stato detto sopra o prima (che sono possibili ragioni) e mostra ancora il codice invece di eseguirlo, allora c'è una cosa che stai sbagliando che non è stata affrontata. L'URL che hai usato per accedere al tuo codice php; alcune persone cercano di eseguire il loro codice php semplicemente trascinando il file .php nel browser web. questa è una pratica sbagliata e potrebbe portare a questo tipo di problema. se hai salvato un file come "test.php" nella cartella C: // wamp / www, devi accedere a questo file in questo modo: localhost: //test.php. questo tipo di errore si verificherà quando si accede in questo modo: localhost: //wamp/www/test.php

Spero di aver aiutato qualcuno là fuori. o / ~ Daniel


3

Pubblicare ciò che ha funzionato per me nel caso in cui aiuti qualcuno lungo la strada, anche se è un caso insolito.

Avevo impostato un gestore per forzare il mio host web a utilizzare una versione di php superiore a quella predefinita. C'era 5.1, ma volevo 5.6 quindi avevo questo:

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

nel mio file .htaccess.

Quando ho provato a eseguire il mio sito localmente, averlo lì ha causato l'output del codice php al browser. Rimuoverlo ha risolto il problema.


3

Apache mostra il codice php invece di eseguire Problema risolto

1. Apri php5.6 conf o php7.x conf

# comando seguente:

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

2. Commentato le seguenti righe

inserisci qui la descrizione dell'immagine

3. Riavviato il server

$ sudo service apache2 riavvio

4 Divertiti :)


2

Puoi eliminare il tuo file .htaceess e lasciare che il sistema ne crei uno nuovo (vuoto o di base). È possibile che alcune righe che hai aggiunto siano affermazioni errate o qualcos'altro all'interno sta causando il problema. È quindi possibile aggiungere riga per riga dal vecchio file .htaccess per vedere cosa ha causato il problema.

Ha funzionato per me. Le righe che dicevano alla macchina di non visualizzare le estensioni php erano un problema nel mio caso ( RewriteCond e RewriteRule ). Il mio vecchio file .htaccess funzionava perfettamente su un server condiviso, ma questo problema è apparso quando sono passato a VPS.


Anche se ti imbatti nella stupidità CORS: esegui sudo a2enmod headerse sudo a2enmod rewrite(non dimenticare di riavviare Apache).
RyanNerd

2

Grazie ad altri su questo thread per i loro suggerimenti. Seguendo i passaggi menzionati, ho scoperto che il server Apache non è stato in grado di iniziare a segnalare un errore di sintassi in un loadfile in formato /etc/apache2/mods-enabled. Risulta che sia php7.0 che php7.1 erano abilitati.

a2dismod php7.0
systemctl restart apache2

e php viene visualizzato di nuovo correttamente.


1

se il modulo userdir è abilitato e il tuo sito è in una userdir (~ / public_html) devi controllare /etc/apache2/mods-enabled/php5.conf. La parte seguente lo fa funzionare (su 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>

1

Se sei un utente Ubuntu, dopo aver installato Apache devi eseguire il seguente comando in una nuova installazione

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

Nel mio caso funziona bene.


1

Cosa ha funzionato per me:

In httpd.conf attivo, trova

<IfModule mime_module>
...
</IfModule>

Mancava quanto segue

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

Dopo aver riavviato apache, i file .php vengono analizzati correttamente.


1

nessuno dei precedenti si è applicato o ha funzionato per me ... PHP7, Apache Httpd 2.2 su CentOS 6

Infatti ho installato (tutto con yum) php PRIMA di Apache ... devi fare il contrario: installa sempre prima Apache, poi PHP, e poi funziona ... In effetti, probabilmente ti manca libphp7.soe libphp7-zts.soin/etc/httpd/modules/

Sono stato in grado di recuperare comunque senza disinstallare PHP. Ho aggiunto la linea magica in /etc/httpd/conf/httpd.conf: AddType application/x-httpd-php .php E poi ho eseguito:yum install php php-mysql


1

Per PHP7 e Apache2.4, questo è tutto ciò che devi fare:

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

Vai in fondo e inserisci quanto segue (tutto da solo):

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

Apache ora eseguirà tutto con PHP. Se tutto ciò che hai sono file html e php, allora questo funzionerà bene per te. Se hai altri tipi di file, dovrai adattare il file alla tua situazione. L'ho testato con phpMyAdmin e non sembra avere problemi .... finora.

Nessuna di quelle altre cose di cui tutte le persone parlano qui era necessaria per me. Quando ho messo la cosa "AddType Application ....." nella posizione corretta, Apache mi ha appena detto che quel modulo era già caricato e lo ha saltato.

Ulteriori informazioni possono essere trovate qui: https://httpd.apache.org/docs/2.4/mod/core.html#filesmatch

La mia installazione è stata eseguita come segue:

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

Dovresti leggere anche questo, se non l'hai fatto: https://httpd.apache.org/docs/current/howto/htaccess.html#when


0

Questo mi stava accadendo anche durante l'esecuzione di $ _POST in MAMP. Tutti i miei file .ini e httpd sono stati impostati correttamente. Se stai gestendo i moduli e hai un documento html e invii le informazioni a un formhandler php che esegue $ POST, assicurati di eseguire il file html da localhost tramite il tuo server e non solo localmente.

Questa è stata una scorciatoia che ho fatto per eseguire documenti html, semplicemente facendo clic sul file html nella mia directory e avviandolo nel mio browser web, quando in realtà per verificare se php è in elaborazione nel tuo modulo, devi eseguire il tuo html attraverso i tuoi server. Un protocollo molto semplice che ho trascurato.

Esempio:

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

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

Ora il php dovrebbe essere elaborato dopo aver fatto clic sul pulsante di invio


0

Ho avuto lo stesso problema, causato dalla configurazione predefinita del modulo Debian / Ubuntu suphp. Conteneva suPHP_Engine offper intero / usr / share, il che ha comportato la visualizzazione dei sorgenti php nel browser. Disattivare con a2dismod suphpera la soluzione provvisoria.


0

Ho avuto lo stesso problema. Quando eseguo un file php, il browser web mi ha mostrato il codice php invece di eseguirlo. Avevo provato molte volte: disinstallare / reinstallare wampserver64, aggirare le impostazioni / moduli PHP / Apache, ecc. Dopo 2 giorni: mi sono reso conto che quando ho provato a eseguire il file php all'interno del blocco note ++ premendo la combinazione predefinita "ctrl + alt + maiusc + R "per chrome. Stava cercando di eseguire il mio file php come: "file /// C: / wamp64 / www / bla / bla .." nella barra degli indirizzi di Chrome. Questo era il mio problema. Ho apportato le modifiche in base alla pagina Configurazione di Notepad ++ per eseguire php su localhost? . Il mio problema è stato risolto. Ma dopo 2 giorni ..


0

Esegui Xampp (apache) come amministratore. In google chrome digita:

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

cioè, se la cartella che hai creato è "LearnPhp", il file è "chapter1.php" quindi digita

localhost/LearnPhp/chapter1.php

Ho creato questa cartella nella cartella xampp nella cartella htdocs che viene creata quando scarichi xampp.


0

Soluzione Debian 9:

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

Aggiungi al file le righe successive:

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

Quindi esegui:

a2enconf php && service apache2 restart

Questo ha funzionato per me, ma non inizialmente. Sto eseguendo contenuti web nelle directory degli utenti, che è disabilitato per impostazione predefinita. Per abilitarlo, vedere l'ultima sezione in/etc/apache2/mods-available/php7.2.conf
Tony Adams

0

A volte, se hai conflitti di versione php, succede per superarli, segui i passaggi seguenti

Passaggio 1: elenco Yum installato | grep 'php'

se hai più versioni di php come php 5.6 e php 7.0 si verificherà questo conflitto

Passaggio 2: yum rimuovi ** la tua versione php **

Passaggio 3: quindi riavviare apapche /etc/init.d/httpd restartoservice apache2 restart


0

Questa soluzione ha funzionato per me. Ho eliminato apache2 e reinstallato. È successo dopo l'eliminazione e l'installazione. Se è la prima installazione, non dovresti affrontare questo problema.


0

Ho provato una serie di soluzioni sopra, tuttavia la correzione nel nostro scenario era installare il modulo fpm.

Avevamo installato httpd prima di php, il che potrebbe avere qualcosa a che fare con il problema, ma per risolverlo abbiamo installato quanto segue:

yum module install php: 7.2

Questo ha installato il modulo php-fpm-7.2.11-4.module + el8.1.0 + 5443 + bc1aeb77.x86_64.rpm che abbiamo poi abilitato da:

systemctl abilita --now php-fpm

Da quel punto abbiamo lasciato /etc/httpd/conf.d/php.conf come predefinito e riavviato httpd

servizio httpd riavvio

Poi tutto ha funzionato.

Spero che questo aiuti, ci è voluto molto più tempo di quanto avrebbe dovuto capire.


0

Aggiungi la seguente configurazione a /etc/apache2/apache2.conf

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

E riavvia il apacheviasudo service apache2 restart

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.