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"

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.


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

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/


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


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


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


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.


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ę :)


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.


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.


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>

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.


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.


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


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


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


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.


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


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.


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

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


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.


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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.