Apache pokazuje kod PHP zamiast go wykonywać

107

Ostatnio próbowałem zainstalować PHP i Apache na moim komputerze. Po wielu godzinach są instalowane. Zmodyfikowałem pliki httpd.conf i php.ini, jak wszyscy mówią. Następnie stworzyłem prosty skrypt PHP:

<?php phpinfo(); ?>

Ale kiedy próbuję go uruchomić, http://127.0.0.1/phpinfo.phppo prostu pokazuje kod źródłowy zamiast go wykonywać. Używam Apache 2, PHP 5 i Windows Vista.

EDYTOWANE LINIE:

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"
imulsja
źródło
w phpinfo.php czy dodałeś jakieś nagłówki, które sprawiają, że plik .php jest czytelny?
@Peteris no mój cały skrypt jest w moim pytaniu
imulsion
wypróbuj prosty skrypt: <?php echo "Hello world"; ?>czy wyświetla Hello world? jeśli wyświetla kod, to jak @RabNawaz powiedział, że twój serwer nie jest poprawnie skonfigurowany!
Po prostu wyświetla kod ponownie :(
imulsion
1
skąd uzyskujesz dostęp do swojego pliku php? pamiętaj, że aby uruchomić plik php na serwerze, musisz umieścić swoje pliki w odpowiednim katalogu głównym sieci. i uzyskaj do niego dostęp w przeglądarce internetowej jako http://localhost/lubhttp://127.0.0.1/
Ibrahim Azhar Armar

Odpowiedzi:

90

Musisz włączyć php! Sprawdź folder mods-enabledw katalogu Apache (domyślnie:), /etc/apache2/aby zobaczyć, czy znajdziesz plik o nazwie php. Nie pamiętam rozszerzenia, ale myślę, że tak .so.

Sprawdź również, /var/log/apache2/error.logczy nie masz innych błędów.

Daniel Figueroa
źródło
8
czy uruchomiłeś: a2enmod php5
Daniel Figueroa
6
nie ma folderu mods_enabled w moim katalogu Apache
imulsion
@imulsion w moim przypadku była włączona modów w / etc / apache2 /
Silveri
6
W moim przypadku php7 musiałem zrobić a2enmod php7.0i to rozwiązało mój problem. Dotarcie do tego posta zajęło mi cały dzień!
Rorschach
3
Nie ma pliku o nazwie phpw mods-enabledto, co teraz? Ta odpowiedź nie wyjaśnia rzeczy
Black
61

Wow, wiele rozwiązań tutaj! Oto, co zrobiłem na Ubuntu 16.04 :

sudo apt-get install php libapache2-mod-php
sudo a2enmod mpm_prefork && sudo a2enmod php7.0
sudo service apache2 restart
helmy
źródło
Pracowało dla mnie, dodając --reinstalldo apt-get. Może instalacja modułu php / apache była brudna.
Glastis
To zadziałało dla mnie na serwerze Ubuntu 16.04 firmy Digital Ocean Dzięki
Sushant Bhargav
to daje mi następujące błędy: Considering conflict php5 for php7.0, Considering conflict mpm_worker for mpm_prefork, itp ... i apache2 restart nie
mrid
Jeśli dojdziesz, Considering conflict php5 for php7.2przejdź do /etc/apache2/mods-availablei usuńphp5.*
Simon Epskamp
39

Dla PHP 7 (może dotyczyć również poprzednich wersji), ale musiałem to zrobić:

Dodaj to na dole /etc/apache2/apache2.conf

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

Uruchom to z terminala:

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

Następnie nie zapomnij ponownie uruchomić Apache, aby wiedział, że zmieniłeś rzeczy:

sudo service apache2 restart

To jest podsumowanie z: https://www.atlantic.net/community/howto/try-php7-lamp-ubuntu-14-04/

RyanNerd
źródło
3
Musiałem to zrobić dla PHP 5.6 na OSX El Capitan. (Używając standardowego apache, ale homebrew php56)
rfay
1
Działa również w systemie Windows (co oznacza, że ​​nie musisz uruchamiać poleceń terminala w systemie Windows). Dziękuję za zapisywanie mi niekończących się wyszukiwań.
che-azeh
podczas instalacji ze źródła to dopasowanie plików było wymagane. (config i make itp.
włączają
W przykładowym pliku httpd.conf jest miliard komentarzy; Czy ktoś może wyjaśnić, dlaczego nie ma jednego dla php? Nie jest to rzadko używana rzecz.
Danial,
@Danial httpd.apache.org/support.html ma wiele metod, za pomocą których można znaleźć dokumenty, zgłosić błędy i zadawać pytania (na przykład dlaczego nie ma rozsądnego przykładu użycia PHP w httpd.conf?)
RyanNerd
24

otwórz plik

/etc/apache2/httpd.conf

i zmienić

#LoadModule php5_module libexec/apache2/libphp5.so

w

LoadModule php5_module libexec/apache2/libphp5.so

Więc po prostu uncoment załaduj moduł PHP httpd.conf

inigo333
źródło
W moim przypadku linia zaczynała się od php7_module - ale poza tym to zadziałało!
b0rgBart3
6

Inna odpowiedź, która mi pomogła. Czy to do zainstalowania[sudo] apt-get install libapache2-mod-php5.X

Simon Mohoalali
źródło
1
Mój był podobny. Zrobiłem "sudo apt-cache search ^ libapache2 | grep php", który znajduje odpowiednie pakiety, a następnie zainstalowałem "sudo apt-get install libapache2-mod-php". libapache2-mod-php7.0 był już zainstalowany.
VectorVortec,
3

W porządku, jeśli wypróbowałeś to, co powiedziano ci powyżej lub wcześniej (co jest możliwym powodem) i nadal wyświetla kod zamiast go wykonywać, to jest jedna rzecz, którą robisz źle, a która nie została rozwiązana. Adres URL używany do uzyskiwania dostępu do kodu php; niektórzy ludzie próbują wykonać swój kod php, po prostu przeciągając plik .php do przeglądarki internetowej. jest to zła praktyka i może prowadzić do tego rodzaju problemów. jeśli zapisałeś plik jako „test.php” w folderze C: // wamp / www, musisz uzyskać dostęp do tego pliku w ten sposób: localhost: //test.php. ten rodzaj błędu pojawi się, gdy uzyskasz do niego dostęp w ten sposób: localhost: //wamp/www/test.php

Mam nadzieję, że komuś pomogłem. o / ~ Daniel

DAniel
źródło
3

Publikowanie tego, co zadziałało dla mnie na wypadek, gdyby ktoś poszedł dalej, choć jest to niezwykły przypadek.

Ustawiłem program obsługi, aby zmusić mojego hosta internetowego do używania wyższej wersji PHP niż domyślna. Było 5.1, ale chciałem 5.6, więc miałem to:

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

w moim pliku .htaccess.

Kiedy próbuję uruchomić moją witrynę lokalnie, posiadanie tego powoduje, że kod PHP jest wysyłany do przeglądarki. Usunięcie go rozwiązało problem.

evanmcd
źródło
3

Apache wyświetla kod php zamiast wykonywać Naprawiono problem

1. Otwarta konf. Php5.6 lub konf. Php7.x

# następujące polecenie:

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

2. Skomentował następujące wiersze

wprowadź opis obrazu tutaj

3. Zrestartowałem serwer

Uruchom ponownie usługę $ sudo apache2

4 Ciesz się :)

Matthew Farrell
źródło
2

Możesz usunąć swój plik .htaceess i pozwolić systemowi utworzyć nowy (pusty lub podstawowy). Może się zdarzyć, że niektóre dodane wiersze są niepoprawnymi instrukcjami lub coś innego powoduje problem. Następnie możesz dodać wiersz po wierszu ze starego pliku .htaccess , aby zobaczyć, co spowodowało problem.

To zadziałało dla mnie. W moim przypadku problemem były linie mówiące maszynie, aby nie wyświetlała rozszerzeń php ( RewriteCond i RewriteRule ). Mój stary plik .htaccess działał dobrze na współdzielonym serwerze, ale ten problem pojawił się po przełączeniu na VPS.

bokistack
źródło
Również jeśli napotkasz głupotę CORS: uruchom sudo a2enmod headersi sudo a2enmod rewrite(nie zapomnij zrestartować Apache).
RyanNerd
2

Dziękuję innym w tym wątku za ich sugestie. Wykonując wymienione kroki stwierdziłem, że serwer Apache nie był w stanie rozpocząć zgłaszania błędu składni w loadpliku w formacie /etc/apache2/mods-enabled. Okazuje się, że włączono zarówno php7.0, jak i php7.1.

a2dismod php7.0
systemctl restart apache2

a php jest ponownie renderowany poprawnie.

djnz0feh
źródło
1

jeśli moduł userdir jest włączony, a twoja witryna znajduje się w katalogu userdir (~ / public_html), musisz sprawdzić /etc/apache2/mods-enabled/php5.conf. Następująca część sprawia, że ​​działa (na utopii Ubuntu 14.10):

# 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
źródło
1

Jeśli jesteś użytkownikiem Ubuntu, po zainstalowaniu Apache należy uruchomić następujące polecenie w nowej instalacji

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

W moim przypadku działa dobrze.

Hasan Baig
źródło
1

Co mi pomogło:

W aktywnym httpd.conf znajdź

<IfModule mime_module>
...
</IfModule>

Brakowało następujących

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

Po ponownym uruchomieniu Apache pliki .php są poprawnie analizowane.

Paweł
źródło
1

żadne z powyższych nie dotyczyło ani nie działało dla mnie ... PHP7, Apache Httpd 2.2 na CentOS 6

Faktem jest, zainstalowałem (wszystkie z yum) php PRZED Apache ... trzeba zrobić odwrotnie: zawsze zainstalować Apache, potem PHP, a następnie to działa ... Rzeczywiście, jesteś prawdopodobnie brakuje libphp7.soi libphp7-zts.sona/etc/httpd/modules/

I tak udało mi się odzyskać bez odinstalowywania PHP. Dodałem magiczną linię /etc/httpd/conf/httpd.conf: AddType application/x-httpd-php .php A potem uruchomiłem:yum install php php-mysql

berhauz
źródło
1

W przypadku PHP7 i Apache2.4 to wszystko, co musisz zrobić:

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

Idź na sam dół i wstaw następujące (same):

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

Apache wykona teraz wszystko za pomocą PHP. Jeśli wszystko, co masz, to pliki html i php, to będzie działać dobrze. Jeśli masz inne rodzaje plików, musisz dostosować plik do swojej sytuacji. Przetestowałem to z phpMyAdminem i wygląda na to, że nie ma problemu ... na razie.

Żadna z tych innych rzeczy, o których wszyscy tutaj mówią, nie była mi potrzebna. Kiedy umieściłem "AddType Application ....." we właściwym miejscu, Apache po prostu powiedział mi, że ten moduł został już załadowany i pominął go.

Więcej informacji można znaleźć tutaj: https://httpd.apache.org/docs/2.4/mod/core.html#filesmatch

Moja instalacja została wykonana w następujący sposób:

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

Powinieneś także przeczytać, jeśli nie masz: https://httpd.apache.org/docs/current/howto/htaccess.html#when

Adam Winter
źródło
0

Przydarzyło mi się to również podczas uruchamiania $ _POST w MAMP. Wszystkie moje pliki .ini i httpd zostały poprawnie skonfigurowane. Jeśli zajmujesz się obsługą formularzy i masz dokument html i wysyłasz informacje do php formhandler z uruchomionym $ POST, upewnij się, że uruchamiasz plik html z localhost przez swój serwer, a nie tylko lokalnie.

To był skrót, który zrobiłem, aby uruchomić dokumenty html, po prostu klikając plik html w moim katalogu i uruchamiając w mojej przeglądarce internetowej, gdy w rzeczywistości, aby sprawdzić, czy php jest przetwarzany w twoim formularzu, musisz uruchomić swój html na swoich serwerach. Bardzo prosty protokół, który przeoczyłem.

Przykład:

Źle: file:///Applications/MAMP/htdocs/form/form.html

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

Teraz php powinno zostać przetworzone po kliknięciu przycisku przesyłania

maidenastraea
źródło
0

Miałem ten sam problem, spowodowany domyślną konfiguracją modułu Debiana / Ubuntu suphp. Zawierał suPHP_Engine offcały katalog / usr / share, co spowodowało, że źródła php były wyświetlane w przeglądarce. Dezaktywacja za pomocą a2dismod suphpbyła rozwiązaniem tymczasowym.

Torsten Knodt
źródło
0

Miałem ten sam problem. Kiedy uruchamiam plik php, przeglądarka internetowa pokazała mi kod php zamiast go wykonać. Próbowałem wiele razy: odinstaluj / ponownie zainstaluj wampserver64, obejrzyj ustawienia / moduły PHP / Apache, itp. Po 2 dniach: zdałem sobie sprawę, że kiedy próbowałem uruchomić plik php w notatniku ++, naciskając domyślną kombinację "ctrl + alt + shift + R "dla chromu. Próbował uruchomić mój plik php, taki jak: „plik /// C: / wamp64 / www / bla / bla ..” na pasku adresu mojego Chrome. To był mój problem. Dokonałem zmian zgodnie ze stroną Configuring Notepad ++ to run php on localhost? . Mój problem został rozwiązany. Ale po 2 dniach ...

mechanik
źródło
0

Uruchom Xampp (apache) jako administrator. W Google Chrome wpisz:

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

tzn. jeśli utworzony folder to „LearnPhp”, plik to „Chapter1.php”, a następnie wpisz

localhost/LearnPhp/chapter1.php

Utworzyłem ten folder w folderze xampp w folderze htdocs, który jest tworzony podczas pobierania xampp.

Aquasar
źródło
0

Rozwiązanie Debiana 9:

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

Dodaj do pliku następne wiersze:

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

Następnie uruchomić:

a2enconf php && service apache2 restart
mrDinkelman
źródło
To zadziałało dla mnie, ale nie na początku. Uruchamiam zawartość sieci Web w katalogach użytkowników, która jest domyślnie wyłączona. Aby to umożliwić, zobacz ostatnią sekcję w/etc/apache2/mods-available/php7.2.conf
Tony Adams,
0

Czasami, jeśli masz konflikty wersji php, zdarza się, aby przezwyciężyć to, wykonaj poniższe czynności

Krok 1: zainstalowano listę Yum | grep „php”

jeśli masz wiele wersji php, takich jak php 5.6 i php 7.0, to się zdarzy

Krok 2: mniam usuń ** swoją wersję php **

Krok 3: Następnie uruchom ponownie apapche /etc/init.d/httpd restartlubservice apache2 restart

sachin_ur
źródło
0

To rozwiązanie pracował dla mnie. Wyczyściłem Apache2 i przeinstalowałem. Stało się to po oczyszczeniu i zainstalowaniu. Jeśli jest to pierwsza instalacja, nie napotkasz tego problemu.

Kemal Atik
źródło
0

Wypróbowałem kilka powyższych rozwiązań, jednak poprawką w naszym scenariuszu była instalacja modułu fpm.

Zainstalowaliśmy httpd przed php, co mogło mieć coś wspólnego z problemem, ale aby rozwiązać, zainstalowaliśmy:

Instalacja modułu yum php: 7.2.0

To zainstalowało moduł php-fpm-7.2.11-4.module + el8.1.0 + 5443 + bc1aeb77.x86_64.rpm, który następnie włączyliśmy przez:

systemctl włącz - teraz php-fpm

Od tego momentu zostawiliśmy /etc/httpd/conf.d/php.conf jako domyślny i zrestartowaliśmy httpd

usługa httpd restart

Wtedy wszystko działało.

Mam nadzieję, że to pomoże, zajęło więcej czasu, niż powinno.

Bren1818
źródło
0

Dodaj następującą konfigurację do /etc/apache2/apache2.conf

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

I zrestartuj apacheviasudo service apache2 restart

Imran Zahoor
źródło