Il codice PHP non viene eseguito, invece il codice viene visualizzato nella pagina


320

Sto cercando di eseguire un codice PHP su un progetto (usando Dreamweaver) ma il codice non viene eseguito.

Quando controllo il codice sorgente, il codice PHP appare come tag HTML (posso vederlo nel codice sorgente). Apache funziona correttamente (sto lavorando con XAMPP), le pagine PHP vengono aperte correttamente ma il codice PHP non viene eseguito.

Qualcuno ha un suggerimento su ciò che sta accadendo?

Nota: il file è già denominato comefilename.php

Modifica: il codice ..:

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

La stampa


44
Stai utilizzando tag brevi <?anziché <?php?
Dan Grossman,

28
Non usare MAI tag brevi. ( <?). Sono deprecati, non funzionano davvero in molti posti e sono completamente inutili. Il salvataggio di tre sequenze di tasti non è un motivo valido per consentire il potenziale errore del codice su probabilmente la metà dei server su cui potrebbe essere eseguito.
mopsyd,

10
@mopsyd Dove si dice che i tag brevi sono obsoleti? Si noti che i tag brevi non sono gli stessi dei tag echo brevi e i tag echo corti sono supportati per impostazione predefinita da PHP 5.4, indipendentemente short_open_tagdall'impostazione.
Kyle Anderson,

5
Sono consapevole che i tag brevi non sono tag di eco brevi, motivo per cui ho specificato di cui stavo parlando nel commento. Al momento della stesura di questo documento, i tag brevi sono stati contrassegnati per essere deprecati per la versione di php 6, sebbene apparentemente sia cambiata da allora. Il problema esiste ancora che molti server li hanno disabilitati, il che rende il codice significativamente meno portabile. Questo non si applica ai tag echo brevi ( <?=), che dovrebbero funzionare bene su php 5.4+ indipendentemente dalle impostazioni del server.
mopsyd,

3
parlare sciocco di tag brevi. I tag lunghi fanno schifo e sono brutti. Non ho mai avuto problemi in 10 anni di programmazione PHP. Non sono quasi mai il problema
Danial,

Risposte:


418

Sembra che ci sia qualcosa di sbagliato nella tua configurazione, qui ci sono alcune cose che puoi controllare:

  1. Assicurati che PHP sia installato e che funzioni correttamente. Può sembrare sciocco, ma non lo sai mai. Un modo semplice per verificare è eseguire php -vda una riga di comando e vedere se restituisce informazioni sulla versione o eventuali errori.

  2. Assicurati che il modulo PHP sia elencato e decommentato all'interno del httpd.conf di Apache. Questo dovrebbe essere qualcosa di simile LoadModule php5_module "c:/php/php5apache2_2.dll"al file. Cerca LoadModule phpe assicurati che non ci siano commenti ( ;) davanti.

  3. Assicurati che il file httpd.conf di Apache contenga il tipo MIME di PHP. Questo dovrebbe essere qualcosa del genere AddType application/x-httpd-php .php. Questo dice ad Apache di eseguire i .phpfile come PHP. Cerca AddType, quindi assicurati che sia presente una voce per PHP e che sia senza commento .

  4. Assicurati che il tuo file abbia l' .phpestensione, o qualunque estensione specificata nella definizione MIME al punto # 3, altrimenti non verrà eseguita come PHP.

  5. Assicurati di non utilizzare tag brevi nel file PHP ( <?), questi non sono abilitati su tutti i server per impostazione predefinita e il loro uso è sconsigliato. Usa <?phpinvece (o abilita i tag brevi nel tuo php.ini con short_open_tag=Onse hai codice che si basa su di essi).

  6. Assicurati di accedere al tuo file sul tuo server web usando un URL come http://localhost/file.phpnon tramite l'accesso al file localefile://localhost/www/file.php

Infine, controlla il manuale di PHP per ulteriori suggerimenti sulla configurazione .


14
Non so perché, ma l'installer di PHP 5.3.15 non aggiunge la riga AddType application/x-httpd-php .php. Molte grazie!!
MatuDuke,

7
@shmeeps: dove hai visto che i tag brevi sono obsoleti? Ho fatto qualche ricerca e posso trovare solo consigli contro di loro, niente di deprecazione. Concesso per le applicazioni che devono essere distribuite, è meglio usare <? Php nel caso in cui il server di hosting non li abbia abilitati, ma per le app in cui hai il pieno controllo sul server su cui si troveranno, non lo so vedi qualsiasi motivo per non usarli.
ClarkeyBoy,

3
il punto n. 6 ha funzionato per me .. l'accesso locale non utilizza il server apache
KawaiKx

6
il punto 2 ha funzionato per me in modo sicuro -apt-get purge apache2; apt-get install apache2 libapache-mod-php5
ulkas,

1
@full_prog_full Prova a caricare un file con .phpun'estensione con i contenuti <?php echo("Success"); ?>e verifica se l'accesso al file tramite un browser Web comporta la visualizzazione di "Success" senza il codice PHP associato.
Shmeeps

61

php7:

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

24
Sebbene questo frammento di codice possa risolvere la domanda, includendo una spiegazione di come e perché questo risolve il problema aiuterebbe davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro, non solo per la persona che chiede ora! Si prega di modificare la risposta di aggiungere una spiegazione, e dare un'indicazione di ciò si applicano le limitazioni e le assunzioni.
Toby Speight,

4
Questa risposta è correlata a Linux, il topicstarter sta chiaramente usando Windows.
Raymond Nijland,

3
@RaymondNijland vero, ma questo è canonico e ho trovato questa domanda e mi ha salvato dopo oltre un'ora di risoluzione dei problemi.
Oca,

Come e perché: questo accade quando PHP7 non configura il servizio Fast CGI predefinito nello script make. sudo a2enmod proxy_fcgi setenvifcrea tre nuove mod /mods-available/proxy.conf proxy_fcgi.load proxy.loadAllo stesso modo, sudo a2enconf php7.0-fpmcrea un file di configurazione /conf-available/php7.0-fpm.confUna volta fatto questo e Apache2 può quindi eseguire il modulo PHP7 come servizio CGI veloce.
Talvi Watia,

33

Sto eseguendo Apache su Ubuntu e il mio problema era che /etc/apache2/mods-available/php5.confmancava questo file:

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

L'ho aggiunto di nuovo e php stava analizzando correttamente i file php.


31

nota per utenti php 7, aggiungilo al tuo file 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
Solo per aiutare altre persone con questo problema. Il httpd.conffile si trova in /etc/apache2/httpd.confSe si utilizza Ubuntu, sarebbe apache2.confnella stessa directory che deve essere modificata per PHP7.
Ahmed Sagarwala,

23

Ho trovato un altro problema che causa questo problema e l'ho già risolto. Ho accidentalmente salvato la mia sceneggiatura nella UTF-16codifica. Sembra che PHP5 non riesca a riconoscere i <?phptag nella codifica a 16 bit per impostazione predefinita.


18

Sto pubblicando questa risposta perché la mia interfaccia di amministrazione Virtualmin / Webmin ha deciso che era una buona idea disabilitare il mio motore PHP .. mi ci è voluto un po 'per trovare la soluzione, quindi ho pensato di condividerla con voi ragazzi:

Inoltre, assicurati di controllare che nessuno dei file di configurazione del tuo sito web relativi a questo host o virtualhost specifico contenga php_admin_value che disattivi PHP, in questo modo:

php_admin_value engine Off

In caso di dubbi, commentalo ...

# php_admin_value engine Off

E riavvia il tuo server web.


1
Dove sono esattamente queste impostazioni di configurazione?
cronoklee,

2
@cronoklee Nelle impostazioni vHost di httpd.conf. Per gli host esistenti, è necessario modificare la configurazione di apache in webmin. Per gli host futuri, vai su virtualmin> modello server> sito Web apache. Ad ogni modo, questo non è sicuro come fastcgi - il default di virtualmin. Quindi l'approccio corretto dovrebbe essere quello di risolvere il motivo per cui fcgi non funziona, ad esempio potrebbe essere causato dalle autorizzazioni dei file.
Sheepy,

Se stai usando una versione di Apache che non ha httpd.conf, cerca /etc/apache2/mods-enabled/php7.confophp5.conf
Sam Malayek,

In caso di dubbi sulla posizione di una determinata impostazione di configurazione, è sempre possibile utilizzare grep per trovare ciò che si sta cercando (ad esempio in questo caso) digitando:sudo grep php_admin_value /etc/* -R
Henry van Megen,

17

Stai solo aprendo il tuo file php nel browser. Devi aprirlo usando l'URL di localhost. se apri un file direttamente dalla tua directory non eseguirà comunque il codice php.

usare: http://locahost/index.phpohttp:127.0.0.1/index.php

Abilita il codice funzione php. Nel tuo caso, stai usando <?quale è il codice funzione php per <?php. Per impostazione predefinita, i codici funzione php sono disabilitati.

Usa anche: sudo apt-get install php5 libapache2-mod-php5 php5-mcryptse sei un utente Ubuntu.


1
Perché è richiesto mcrypt quando sto solo includendo un file? Dovresti notare che questa domanda è vecchia e il problema dei tag brevi è stato menzionato 16 volte, anche nel commento in alto della mia domanda.
Gui,

1
Condivido solo la mia soluzione, ho riscontrato anche lo stesso errore e dopo aver eseguito questo comando di mcrypt il mio problema è stato risolto. puoi anche provare.
Hasan Baig il

per impostazione predefinita i codici funzione php sono abilitati. short_open_tag = On (Valore predefinito = ON) in php 5.6
zond

Questo era il mio problema, la mia configurazione di virtualmin / apache era per 127.0.0.2 ma stavo inserendo il mio indirizzo IP esterno nel browser, ho appena aggiornato la mia configurazione v / a e ora funziona
Hayden Thring,

Mi mancava solo il libapache2-mod-php7.3.
dxvargas,

8

So che dovrebbe sembrare sciocco ... ma raramente succede.

Controlla se stai provando a eseguire php da

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

e non da

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

ps> puoi notare che se scrivi dalla shell

php info.php 

risponde con il codice (significa funzioni php) ..


PHP funziona bene (controllato tramite riga di comando). ma quando accedo al file usando l'URL, mostra il codice PHP.
muaaz,

8

Questo è successo di nuovo a me, insieme al server che scarica i file html, piuttosto che all'elaborazione. Non avevo usato l'apache webserver per un po 'di tempo sul computer e nel frattempo Ubuntu si è aggiornato come altre due versioni dall'LTS originariamente installato. Ora è

$ cat /etc/issue
Ubuntu 16.04 LTS

Quindi il php ha funzionato in questo modo:

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

Il server web ora stava analizzando il php. Forse ora devo aggiornare alcune reti da quando php7.0 è ora in esecuzione dove era prima di eseguire php5. Oh bene.


5

Ho risolto questo disinstallando XAMPP e installando WAMP. Grazie per l'aiuto.


Sono xampp ma funziona benissimo. hai scoperto perché mostrava il codice php @Gui
Pie

5

Ho riscontrato questo problema su php 7.1 che viene fornito con High Sierra (OS X 10.13.5), la modifica /etc/apache2/httpd.confcon le seguenti modifiche ha aiutato:

  1. Annulla commento questa riga

    LoadModule php7_module libexec/apache2/libphp7.so
  2. Incolla seguendo alla fine

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

Allo stesso modo puoi suggerire lo stesso errore della versione Wamp 3. Non esiste alcun percorso di cartella /etc/apache2/httpd.conf in wamp 3. @AamirR
Gem

Questo ha funzionato per me !!! Il mio era un problema più strano. Alcuni file hanno reso il PHP e altri no e hanno semplicemente visualizzato il codice.
sjw0525,

4

sul mio ubuntu 14.04, apache 2.4, installazione php 5.5.9, ho provato con un esempio.php su / var / www / html (root del documento predefinito) e ha funzionato bene. Quindi il problema era nella mia configurazione dei server virtuali. La soluzione era quella di includere, nella directory Def contenente il .php, questa riga:

    php_admin_flag engine on

e dove devo aggiungere questa riga nel file Apache in httpd.conf del mio server virtuale? e sto usando Webmin
suresh pareek il

4

Assicurarsi che lo script contenga

<?php

prima del codice che dovrebbe essere eseguito. Non ci dovrebbe essere spazio tra <?e phpin questo.


3

ho avuto un problema simile ma nel mio caso la soluzione era diversa. il mio file che conteneva il codice php era chiamato "somename.html" e lo cambiò in "somename.php" funzionava bene


Questo ha risolto anche per me. Qualcuno sa se il server eseguirà php in un file .html o il file finale deve sempre essere cambiato in .php quando c'è una linea di php da eseguire?
full_prog_full

dipende dalle impostazioni del server, nella maggior parte dei casi verrà eseguito il codice php esistente in anyfile.html. e in caso contrario, può essere modificato, anche se idk come: P
Netrus

3

Per una nuova configurazione di LAMP che esegue php 7, modifica il file /etc/httpd/conf/httpd.conf Nota: assicurati di fare un backup prima di cambiare qualsiasi cosa.

Incollalo in fondo al file:

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

Quindi, cerca LoadModule e incolla la seguente riga:

LoadModule php7_module modules/libphp7.so

Questa riga chiederà semplicemente a httpd di caricare il modulo php 7

Quindi riavviare httpd


3

Controlla tutti i pacchetti che hai installato per php usando:

yum list installed | grep remi

Installa tutti i pacchetti php rilevanti , in particolare php-devel sul tuo computer.


2

Questo è stato nel mio .htaccess

DirectoryIndex index.html index.htm

index.html conteneva il codice PHP. Per impostazione predefinita, PHP non elabora i file con estensioni come htm * come codice PHP.

È possibile ignorare ciò aggiungendo quanto segue a .htaccess:

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

1

Penso che il problema che mostra il codice invece del risultato sia che non sta andando all'host locale. ricontrolla quale indirizzo stai andando. stai andando in una directory di file locale o nell'host locale.

dallo screenshot che hai inviato andrà al tuo computer non al localhost.

"file: ///" dovrebbe essere "localhost /"


1

La reinstallazione del mcryptmodulo ha funzionato per me.

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

Onestamente, forse perché non avevo configurato correttamente il PHP sul mio sistema, ma poiché la domanda che ho posto riguardo allo stesso problema è stata contrassegnata come duplicata di questa domanda, ho potuto solo rispondere qui. Mi chiedo perché il voto negativo.
bg

Questa risposta è correlata a Linux e l'argomento starter usa chiaramente windows
Raymond Nijland,

1

Ho avuto un caso in cui ho accidentalmente iniziato a decomprimere la mia directory di file in root. Ha aggiunto il file .htaccess dalla mia cartella di file che bloccherebbe tutto il php

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

In conclusione, controlla il file .htaccess su root.


1

Se hai una configurazione come questa:

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

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

Rimuovi il commento dalle righe successive nel tuo httpd.conf

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

Per me funziona


1

Aggiungi AddType application/x-httpd-php .phpal tuo file httpd.conf se stai usando Apache 2.4


1

Ho appena trascorso ore a cercare di far funzionare PHP 5 con Apache 2.4 su Windows 10 . Finalmente per me è stato un refuso in httpd.conf LoadModule . Ha attirato l'attenzione sulla scrittura e sul percorso esatto del modulo attraverso l' ultima risposta in questo thread apachelounge di denny2018 . Grazie!

Dopo due notti ho scoperto ... La mia directory è stata scritta c:(lettere minuscole)

Ho avuto LoadModule php5_module "c:/php/php5apache2.dll"ma corretto per Apache 2.4 è:

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

Quindi mi mancava anche il _4precedente (per apache 2.4 ). Lo snippet completo che ha funzionato per me:

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

Ho appena provato PHP 7 . C'è la LoadModuleriga in httpd.conf per Apache 2.4

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

Attualmente il manuale di php mostra c:/php/php5apache2.dll quale ovviamente deve essere modificato.


1

nel mio caso (Apache / 2.4.34),

dopo aver decommentato il modulo specifico

"LoadModule php7_module libexec / apache2 / libphp7.so"

a partire dal

"/Etc/apache2/httpd.conf"

il mio problema era sparito.


1

Nel caso in cui ci troviamo nella stessa pagina, fai quanto segue

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

Per abilitare PHP 7.2 FPM in Apache2 fare:

a2enmod proxy_fcgi setenvif

a2enconf php7.2-fpm

aggiornamento 2: Apache scarica il file .php invece del rendering

Successivamente, ho affrontato il problema sopra. Ci sono domande simili come questa .

Non so perché, ma è successo solo per i miei file .php nella /var/www/html/cartella principale. tutto era ok per le sottodirectory. (ad esempio wordpress e phpmyadmin hanno funzionato bene)

Quindi ecco la mia soluzione. Ho deciso di abilitare il modulo php. così ho eseguito questo comando:

a2enmod php7.2

ma ho riscontrato questi errori:

Considerando la dipendenza mpm_prefork per php7.2: considerando il conflitto mpm_event per mpm_prefork: ERRORE: il modulo mpm_event è abilitato - impossibile procedere a causa di conflitti. Prima deve essere disabilitato! Considerando conflitto mpm_worker per mpm_prefork: ERRORE: impossibile abilitare la dipendenza mpm_prefork per php7.2, interruzione

così ho deciso di disabilitare mpm eseguendo i seguenti comandi:

sudo a2dismod mpm_prefork
sudo a2dismod mpm_worker
sudo a2dismod mpm_event

quindi riavvia apache:

systemctl restart apache2

quindi abilitare php7.2 (la mia versione installata):

sudo a2enmod php7.2

e adesso tutto funziona bene.


1

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

Per risolvere questo problema, apri /etc/apache2/mods-enabled/php7.2.conf. Devi commentare o eliminare il blocco tag nella parte inferiore che legge

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

-1

il file che hai inserito in / var / www / html / dovrebbe avere .php forexample esempio.php se è esempio non funziona ma se lo cambi in esempio.php funziona.

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.