Apache sta scaricando file php invece di visualizzarli


92

Informazioni sul sistema operativo e sul server:

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

In precedenza avevo installato php 5.3.x ma ho deciso di aggiornare. Ho prima disinstallato php 5.3.x e poi php 5.5.1 ma dopo l'installazione completata apache non ha analizzato i file php li ha semplicemente scaricati. Ho controllato domande simili qui in stackoverflow ma nessuna di esse mi ha aiutato finora.

Per la cronaca ho le seguenti righe nel mio httpd.conf e php.conf che dovrebbero far funzionare php ma non lo fanno:

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

Apprezzerei davvero qualsiasi aiuto. Grazie.

MODIFICARE:

Ho queste righe nel php.conf

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

MODIFICARE:

Rimuovendo il file

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

apache non scarica più il file. Ora apache mostra il codice sorgente, ma non tutto è solo una parte. Ho aggiunto

AddType text/html .php

ma senza fortuna.


Ebbene, come l' hai installato? Quale SAPI? Vedi anche Come controllare quali moduli Apache sono abilitati / installati?
mario

2
Il tuo modulo php non è in esecuzione.
Sithu

1
controlla httpd.confse il modulo php è commentato o meno
MaveRick

1
Ho modificato le domande. I moduli escono e apparentemente vengono caricati
Anthony Gainor

Hai riavviato Apache dopo l'installazione?
Ahmad

Risposte:


79

L'AddType corretto per php è application / x-httpd-php

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

Assicurati anche che il tuo modulo php sia caricato

LoadModule php5_module        modules/mod_php55.so

Quando configuri Apache, prova a visualizzare la pagina da un altro browser: ho avuto giorni in cui Chrome memorizza ostinatamente il risultato nella cache e continua a scaricare il codice sorgente mentre in un altro browser va bene.


non c'è alcun percorso dei moduli nel mio caso
shamaseen

2
Potresti aggiungere qualche informazione su dove mettere queste righe?
Sören,

6
Per le persone che cercano dove mettere queste righe. /etc/httpd/conf/httpd.conf
Siraj Alam

Nel mio caso, su Apache-2.4.6 + PHP-7.3.13> LoadModule php7_module modules / libphp7.so
shaojun lyu

22

Oggi mi sono imbattuto in questo problema e nessuna delle soluzioni descritte ha funzionato per me. Quindi ecco un'altra possibile causa:

Se hai qualcosa di simile

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

in un .htaccessfile della cartella del contenuto web, può causare l'interruzione del funzionamento degli script PHP. Nel mio caso il server non conosceva il x-mapp-php6tipo, poiché quel .htaccessfile era qualcosa che avevo importato da un host web diverso quando trasferivo il contenuto del sito web.

La semplice rimozione della AddHandlerriga dal .htaccessfile ha risolto il problema.


Perfetto. Nel mio caso, era AddHandler application/x-httpd-php54 .php54 .phpquello che doveva essere rimosso.
Old McStopher

Ho avuto qualche problema ma ho trovato il file .htaccess colpevole nella directory home (una directory sopra la directory web "public_html"). Se qualcun altro ha lo stesso problema, cerca anche .htaccess nelle directory principali (le impostazioni a cascata).
Wireblue

Avevo un file .htaccess come questo che avevo estratto da un server di hosting web. Stava forzando una versione di PHP che non era installata sulla mia macchina locale. Pertanto, l'host virtuale non stava eseguendo correttamente il file PHP.
BrightIntelDusk

Questo è quasi certamente il problema se alcuni siti funzionano e altri no. Joomla .htaccess conteneva un AddHandler ma WordPress no.
Peter Wooster

Questo ha funzionato per me, ho appena rimosso quella riga dal mio file public / .htaccess e l'indice è stato caricato.
PA-GW

16

Dopo aver lottato molto ho finalmente risolto il problema.

Se ti viene chiesto di scaricare un .phpfile invece di eseguirlo, ecco la soluzione perfetta: presumo che tu abbia già installato PHP5 e che continui a ricevere questo errore.

$ sudo su
$ a2enmod php5

Questo è.

Ma se continui a ricevere l'errore:

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

quindi procedi come segue:

Risulta che i file non dovrebbero essere archiviati mods-enabled, ma dovrebbero piuttosto essere archiviati in mods-available. Un collegamento simbolico dovrebbe quindi essere creato in mods-enabled che punta al file memorizzato in mods-available.

Prima rimuovi l'originale:

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

Quindi crea il collegamento simbolico:

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

Spero che il tuo problema sia risolto.


2
Nota che questo funziona solo sotto Linux (e in particolare Debian Linux).
Gwyneth Llewelyn

6

Dai un'occhiata alle tue direttive addtype.

Mi sembra che Apache stia dicendo al browser che sta inviando un tipo di documento di application / php per script con estensioni come .php5. Infatti Apache dovrebbe dire al browser che lo script sta emettendo text / html.

Per favore prova questo:

AddType text/html .php

Per quanto riguarda il suggerimento di cui sopra, dovresti dire al browser che stai emettendo uno script PHP: Mi sembrava un'idea insolita. Ho cercato su Google e ho scoperto che c'è un bel po 'di discussioni al riguardo sul web. Apparentemente ci sono casi in cui potresti voler dire che stai inviando uno script PHP (anche se Apache dovrebbe eseguire lo script ed emettere testo / html) e ci sono anche casi in cui il browser semplicemente non riconosce quel Mime specifico Genere.

Svuotare la cache del browser è sempre una buona idea.

Nel caso in cui sia utile, ecco una copia del mio file /etc/httpd/conf.d/php.conf da un server che esegue 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

Questo è interessante, ma nel mio caso, restituisce solo l'intero script PHP, questa volta formattato come HTML (invece di formattato solo con ASCII) - non utile! Il problema qui è che PHP non viene eseguito correttamente in qualche modo o vengono inviate intestazioni sbagliate ...
Gwyneth Llewelyn

Nota che l'ultima direttiva AddType (che è commentata nell'esempio sopra) fa sì che un file .phps venga stampato in modo abbastanza accurato in HTML. È possibile che la tua configurazione di Apache sia file .php piuttosto stampabili?
Sam Azer

5

Ciò potrebbe accadere a causa dei moduli mancanti richiesti per il tuo php. Supponendo che tu abbia installato php7, cerca i moduli php7 disponibili usando

sudo apt-cache search php7-*

Il comando sopra elencherà tutti i moduli PHP7 disponibili per l'installazione. Puoi iniziare l'installazione di moduli come,

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

4

Se il tuo .htaccess ha qualcosa del genere ... AddHandler application / x-httpd-php53 .php .php5 .php4 .php3 quindi commentalo e riprova ad aggiornare questo ha funzionato per me ...


3

Ho lo stesso problema. Apache non carica i file php da un determinato sito Web, lo scarica semplicemente. Ho letto questo post e le risposte e ho visto che ho questa riga nell'ultimo posto del file .htaccess:

AddHandler x-mapp-php5.5  .php

L'ho commentato e tutto funziona bene.

Grazie a tutti !!!


2

In precedenza ho riscontrato un problema simile, dopo l'aggiornamento da 5.3 a 5.4. Ma la mia configurazione sembra un po 'diversa in quanto sto eseguendo Debian e utilizzo fcgid per server le pagine PHP, e non il modulo PHP5 apache / cgi. Quindi, dopo l'aggiornamento, ha installato anche php5_cgi, che è entrato in conflitto con la mia configurazione di fcgid e non eseguiva più i file PHP.

Ho dovuto disabilitare il modulo Apache e riavviare Apache

a2dismod php5_cgi
/etc/init.d/apache2 restart

Una volta che il modulo php5_cgi è stato tolto di mezzo, fcgid è stato in grado di servire di nuovo le pagine PHP.


Aww sì, questo bastardo cgi difficile ^^ Ha risolto il mio problema dopo aver aggiornato php da 5.3 a 5.4 anche da dotdeb.
Emii Khaos

2

Avevo sintomi simili, ancora un'altra soluzione: in /etc/apache2/mods-enabled/php5.conf c'era un consiglio utile nel commento, che ho seguito:

# 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

Nel caso qualcuno stia usando php7 in un ambiente Linux

Assicurati di abilitare php7

sudo a2enmod php7

Riavvia il servizio mysql e Apache

sudo systemctl restart mysql
sudo systemctl restart apache2

2

Dopo aver aggiornato PHP 7.3, gli script PHP in cui vengono eseguiti con www-data , invece di $ USER come prima.

Avevo bisogno di reinstallare e attivare 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

Per assicurarmi che tutto fosse a posto per Virtualmin , ho utilizzato la procedura guidata Re-Check Configuration/virtual-server/check.cgi , in Vitualmin / System Settings .

Successivamente, Apache / PHP stava scaricando file php invece di eseguirli. Quindi avevo bisogno di modificare /etc/apache2/mods-available/php7.3.confper commentare la riga SetHandler application/x-httpd-phpcome di seguito:

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

Dopo aver riavviato Apache, ha risolto il mio problema, spero che questo aiuto.

Prenditi cura anche della cache del browser.

Il mio sistema:

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

Ho passato due giorni a rintracciarlo e ho scoperto che stavo mettendo i miei script PHP nella directory sbagliata.

Nella mia installazione standard di Ubuntu, stavo inserendo gli script /var/www. Avrebbero dovuto essere dentro /var/www/html.

Ho appena iniziato a lavorare su PHP, quindi non so se la mia soluzione è correlata al cambio di versione che hai subito.


1

questo ha risolto il problema per me (ho installato php7):

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

riavvio del servizio sudo apache2


1

Ho avuto questo problema. Si è scoperto che nginx e apache erano installati e si avviavano automaticamente all'avvio. Il problema era che nginx si stava collegando prima alla porta http, il che impediva l'avvio di apache.


1

È anche possibile che tu abbia nginx in esecuzione ma il tuo php è configurato per funzionare con apache. Per verificare, eseguire service nginx statuse service apache2 statusvedere quale è in esecuzione. Nel caso in cui nginx sia in esecuzione e apache no, basta eseguire sudo service nginx stop; sudo service apache2 starte il tuo server ora servirà i file php come previsto.


1

Ok ... so che ci sono già 1.000.000 di risposte a questa domanda, - ma ho impiegato almeno 6 ore effettive, a capire questa; e l'ho cercato su Google centinaia di volte e non ho trovato un solo post a riguardo. Quindi ho pensato che avrei aggiunto la soluzione al mio problema qui.

La conclusione

Se ho commentato queste due righe nei miei file .conf nel file /etc/apache2/[[SERVER-NAME].conf-file:

php_admin_value engine Off
IPCComTimeout 31

Non ho idea di cosa facciano o come ci siano arrivati, ma è in ognuno dei miei file .conf. E se rimuovo quelle righe e mi assicuro che ci sia un collegamento simbolico in /etc/apache2/sites-enabled/-folder, allora non scarica index.php - e tutti funzionano come dovrebbero.

L'intera storia

Ho VirtualMin installato su un VPS Ubuntu 16.04. Ho aggiornato alla versione 7.2 di PHP. Poco dopo, ho aggiornato la versione di Ubuntu e ho riscontrato un errore "Kernel Offset: Disabled". Quindi ho dovuto cancellare l'ultima versione di Ubuntu, e quando il mio sistema operativo si è riavviato: BOOM! Ho ricevuto l'errore di cui parla il suo post: per ogni sito sul mio VPS, ha semplicemente scaricato index.php invece di mostrarlo.

Ho provato tutti i tipi di cose:

  • PHP7.2 rimosso e PHP5.6 installato (ora so che la versione PHP non ha nulla a che fare con esso; è la configurazione di apache che necessita di lavoro).
  • Ho provato ad abilitare e disabilitare i moduli Apache, sull'installazione esistente, ma senza fortuna.
  • Quindi ho rimosso completamente Apache e l'ho installato di nuovo, dove-dopo il problema era ancora lì!
  • Ho provato a giocare con la configurazione del server virutale in VirtualMin (Webmin >> Server >> Apache Webserver).
  • Ho controllato la configurazione su un singolo server virtuale (Virtualmin >> Impostazioni di sistema >> Ricontrolla configurazione) ... Questo passaggio è stato piuttosto carino, poiché indicava quale modulo in Apache mancava; dove-dopo potrei abilitarlo con a2enmod [MODULE_NAME]. E ho trovato il nome del modulo cercando su Google. Ho dovuto attivare circa 6-8 moduli, prima di superare quel passaggio nella convalida e ci sono voluti un paio di minuti prima che la cache si esaurisse, quindi farlo è stato un passaggio noioso.
  • E infine, ho capito la conclusione sopra scritta - insieme ai collegamenti simbolici, - e poi l'ho fatta funzionare. Tuttavia, ho dovuto esaminarlo per ogni sito sul mio VPS.

0

Ho avuto un problema simile all'OP durante l'aggiornamento di php5 da una versione precedente, a 5.5.9, che è la versione installata con Mint 17.

Sto eseguendo una configurazione LAMP su una macchina sulla mia rete locale, che utilizzo per visualizzare in anteprima le modifiche ai siti Web prima di caricare tali modifiche sul server live effettivo. Quindi mantengo un perfetto mirror locale del sito reale.

Dopo l'aggiornamento, i file che vengono eseguiti e visualizzati perfettamente sul sito effettivo non verranno visualizzati o visualizzeranno solo html sulla macchina locale. PHP non è stato analizzato. Il comando phpinfo () ha funzionato, quindi sapevo che php funzionava altrimenti. Il registro non ha generato errori. La visualizzazione della sorgente della pagina mi ha mostrato il codice php effettivo.

Avevo costruito una pagina test.php che conteneva il seguente codice:

<?php phpinfo(); ?>

Questo ha funzionato. Poi ho scoperto quando sono passato <?phpal <?comando non funzionava più. Tutti i miei siti php usano <?invece il <?phpquale potrebbe non essere l'ideale, ma è la realtà. Ho risolto il problema andando in / etc / php5 / apache2, cercando "short_open_tag" e cambiando il valore da Off a On.


0

Se nessuna delle soluzioni precedenti funziona,

prova a commentare la riga

SetHandler ....

e riavvia apache usando

/etc/init.d/httpd restart

Dovrebbe funzionare!


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

Ho questo tipo di problema. Ecco come lo risolvo. Dopo aver installato Apache, ho installato PHP usando questo comando.

sudo apt-get install php libapache2-mod-php

funziona correttamente ma richiedo il file .php da Apache, dà senza eseguire lo script PHP .

Quindi controllo che PHP sia abilitato.

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

ma non ha mostrato alcun risultato. Controllo i pacchetti PHP installati.

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

Diversi tipi di versioni PHP installate sul mio computer. Quindi rimuovo alcuni pacchetti PHP dal mio elenco precedente, usando apt-get purge .

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

Reinstallo PHP

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

Verifica che il modulo PHP sia caricato

$ a2query -m php7.0

se non abilitato con:

$ sudo a2enmod php7.0

Riavvia il server Apache

$ sudo systemctl restart apache2

Infine, controllo il processo PHP su Apache

crea un file vuoto

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

Aggiungi questo contenuto a info.php e salva.

<?php
  phpinfo();
?>

Controlla sul browser:

http: //localhost/info.php

si mostra correttamente Penso che questo aiuterà chiunque.


0

Ho avuto questo problema e se in realtà non hai mai giocato con le impostazioni di configurazione del tuo server, il tuo problema è al 90% nel tuo file .htaccess

Puoi modificare il file .htaccess LOCALMENTE, oppure eliminarlo (LOCALMENTE)


0

Se hai virtualmin prova a commentare queste righe nella tua configurazione di apache in / etc / apache2 / sites-available

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

0

Quando ho aggiornato da PHP 7.2 a PHP 7.4, ho anche riscontrato lo stesso problema. Ha funzionato facendo quanto segue: -

  1. In [domain].conf file, ha commentato quanto segue:

    php_admin_value engine Off

E aggiunse:

AddType  application/x-httpd-php-source  .phps
AddType text/html .php
  1. Disabilita la mod 7.2 e abilita la 7.4 seguendo:

    a2dismod php7.2
    a2enmod php7.4

  2. Nel /etc/apache2/mods-enabled/php7.4.conffile, commenta quanto segue:

    Applicazione SetHandler / x-httpd-php
    php_admin_flag engine Off


0

Per le persone che hanno trovato questo post di Google quasi 6 anni nel futuro (e oltre!), Potresti incontrare questo problema con Apache 2 e PHP 7 mentre usi anche il UserDirmodulo.

Un'altra possibile causa di questo problema potrebbe essere che stai tentando di eseguire lo script in una "directory utente" dal UserDirmodulo. L'esecuzione di script PHP nelle directory degli utenti è disabilitata per impostazione predefinita. Ti imbatterai in questo problema se lo script si trova nella public_htmldirectory nella tua cartella home e stai tentando di accedervi dahttp://localhost/~your_username .

Per risolvere questo problema, apri /etc/apache2/mods-enabled/php7.2.conf. È necessario commentare o eliminare il blocco di tag in fondo che legge

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

-1

Se il tuo .htaccess ha qualcosa di simile

AddType application/x-httpd-ea-php56 .php .php5 .phtm .html .htm
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.