Apache pobiera pliki php zamiast je wyświetlać

93

Informacje o systemie operacyjnym i serwerze:

  • CentOS 6.4 (finał)
  • Apache 2.2.15
  • PHP 5.5.1

Wcześniej miałem zainstalowane php 5.3.x, ale zdecydowałem się na aktualizację. Najpierw odinstalowałem php 5.3.x, a następnie zainstalowałem php 5.5.1, ale po zakończeniu instalacji apache nie przeanalizował plików php, po prostu je pobrał. Sprawdziłem tutaj podobne pytania w stackoverflow, ale żadne z nich do tej pory mi nie pomogło.

Dla przypomnienia mam następujące wiersze w moich httpd.conf i php.conf, które powinny sprawić, że php będzie działał, ale nie:

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

Naprawdę doceniłbym każdą pomoc. Dziękuję Ci.

EDYTOWAĆ:

Mam te linie w pliku php.conf

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

EDYTOWAĆ:

Usuwając

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

apache nie pobiera już pliku. Teraz Apache pokazuje kod źródłowy, ale nie wszystko to tylko część. dodałem

AddType text/html .php

ale bez szczęścia.

Anthony Gainor
źródło
No, jak pan go zainstalować? Który SAPI? Zobacz także Jak sprawdzić, które moduły Apache są włączone / zainstalowane?
mario
2
Twój moduł php nie działa.
Sithu
1
sprawdź, httpd.confczy moduł php jest komentowany, czy nie
MaveRick
1
Redagowałem pytania. Moduły kończą się i najwyraźniej są ładowane
Anthony Gainor
Czy po instalacji zrestartowałeś Apache?
Ahmad

Odpowiedzi:

80

Prawidłowy AddType dla php to application / x-httpd-php

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

Upewnij się również, że moduł PHP jest załadowany

LoadModule php5_module        modules/mod_php55.so

Kiedy konfigurujesz apache, spróbuj wyświetlić stronę z innej przeglądarki - miałem dni, kiedy chrome uparcie buforuje wynik i ciągle pobiera kod źródłowy, podczas gdy w innej przeglądarce jest dobrze.

Mihkel
źródło
w moim przypadku nie ma ścieżki modułów
shamaseen
2
Czy możesz dodać informacje, gdzie umieścić te wiersze?
Sören
7
Dla osób, które szukają miejsca na te linie. /etc/httpd/conf/httpd.conf
Siraj Alam
W moim przypadku na Apache-2.4.6 + PHP-7.3.13> LoadModule moduły php7_module / libphp7.so
shaojun lyu
23

Trafiłem dziś na ten problem i żadne z opisanych rozwiązań nie zadziałało. Oto kolejna możliwa przyczyna:

Jeśli masz coś takiego

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

w .htaccesspliku folderu treści WWW może spowodować, że skrypty PHP przestaną działać. W moim przypadku serwer nie znał x-mapp-php6typu, ponieważ ten .htaccessplik był czymś, co zaimportowałem z innego hosta internetowego, kiedy przesyłałem zawartość witryny.

Samo usunięcie AddHandlerlinii z .htaccesspliku rozwiązało to za mnie.

markus
źródło
Idealny. W moim przypadku to AddHandler application/x-httpd-php54 .php54 .phptrzeba było usunąć.
Old McStopher
Miałem pewien problem, ale znalazłem plik .htaccess winowajcy w katalogu domowym (jeden katalog nad katalogiem internetowym „public_html”). Jeśli ktoś inny ma ten sam problem, poszukaj .htaccess również w katalogach nadrzędnych (kaskada ustawień).
Wireblue
Miałem taki plik .htaccess, który ściągnąłem z serwera hostingowego. To wymuszało wersję PHP, która nie została zainstalowana na moim lokalnym komputerze. Dlatego wirtualny host nie wykonywał poprawnie pliku PHP.
BrightIntelDusk
Jest to prawie na pewno problem, jeśli niektóre witryny działają, a inne nie. Joomla .htaccess zawierał AddHandler, ale WordPress nie.
Peter Wooster
To zadziałało dla mnie, po prostu usunąłem tę linię z mojego pliku public / .htaccess i załadowano indeks.
PA-GW
16

Po wielu zmaganiach w końcu rozwiązałem problem.

Jeśli pojawi się monit o pobranie .phppliku zamiast jego wykonania, oto idealne rozwiązanie: Zakładam, że masz już zainstalowane PHP5 i nadal pojawia się ten błąd.

$ sudo su
$ a2enmod php5

To jest to.

Ale jeśli nadal otrzymujesz błąd:

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

następnie wykonaj następujące czynności:

Okazuje się, że pliki nie powinny być przechowywane w mods-enabled, ale raczej powinny być przechowywane w mods-available. Następnie powinno zostać utworzone łącze symboliczne z włączoną obsługą modów, wskazujące na plik przechowywany w mods-available.

Najpierw usuń oryginał:

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

Następnie utwórz dowiązanie symboliczne:

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

Mam nadzieję, że twój problem został rozwiązany.

Ravi Shankar
źródło
2
Zauważ, że działa to tylko pod Linuksem (a konkretnie z Debianem Linux).
Gwyneth Llewelyn
6

Proszę spojrzeć na swoje dyrektywy addtype.

Wydaje mi się, że Apache informuje przeglądarkę, że wysyła dokument typu aplikacji / php dla skryptów z rozszerzeniami takimi jak .php5. W rzeczywistości Apache powinien powiedzieć przeglądarce, że skrypt wyświetla tekst / html.

Spróbuj tego:

AddType text/html .php

Odnośnie powyższej sugestii, że powinieneś powiedzieć przeglądarce, że drukujesz skrypt PHP: Wydało mi się to niezwykłym pomysłem. Przeszukałem go w Google i stwierdziłem, że w sieci jest dużo dyskusji na ten temat. Najwyraźniej są przypadki, w których możesz chcieć powiedzieć, że wysyłasz skrypt PHP (nawet jeśli Apache ma wykonać skrypt i emitować tekst / html), a są też przypadki, w których przeglądarka po prostu nie rozpoznaje tego konkretnego Mime Rodzaj.

Wyczyszczenie pamięci podręcznej przeglądarki jest zawsze dobrym pomysłem.

Na wypadek, gdyby było to pomocne, oto kopia mojego pliku /etc/httpd/conf.d/php.conf z serwera z systemem 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
Sam Azer
źródło
Jest to interesujące, ale w moim przypadku wyświetla tylko cały skrypt PHP, tym razem w formacie HTML (w przeciwieństwie do sformatowanego tylko za pomocą ASCII) - nieprzydatne! Problem polega na tym, że PHP w jakiś sposób nie działa poprawnie lub wysyłane są złe nagłówki ...
Gwyneth Llewelyn
Zwróć uwagę, że ostatnia dyrektywa AddType (która została zakomentowana w powyższym przykładzie) powoduje, że plik .phps jest ładnie wydrukowany w HTML. Czy to możliwe, że twoja konfiguracja Apache ładnie drukuje pliki .php?
Sam Azer
5

Może się tak dziać z powodu brakujących modułów wymaganych dla twojego php. Zakładając, że masz zainstalowane php7, wyszukaj dostępne moduły php7 za pomocą

sudo apt-cache search php7-*

Powyższe polecenie wyświetli listę wszystkich dostępnych modułów PHP7 do instalacji. Możesz rozpocząć instalację modułów takich jak:

sudo apt-get install libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json
Noushad
źródło
4

Jeśli Twój .htaccess ma coś takiego ... AddHandler application / x-httpd-php53 .php .php5 .php4 .php3 to skomentuj to i spróbuj ponownie odświeżyć, to zadziałało dla mnie ...

user252566
źródło
3

Mam ten sam problem. Apache nie ładuje plików php z określonej witryny internetowej, po prostu je pobrał. Przeczytałem ten post i odpowiedzi i zobaczyłem, że w ostatnim miejscu pliku .htaccess mam następującą linię:

AddHandler x-mapp-php5.5  .php

Skomentowałem to i wszystko działa dobrze.

Dziękuje za wszystko !!!

Ladislao Garcia
źródło
2

Wcześniej miałem podobny problem po aktualizacji z 5.3 do 5.4. Ale moja konfiguracja wygląda trochę inaczej, ponieważ używam Debiana i używam fcgid do serwera stron PHP, a nie modułu PHP5 apache / cgi. Więc po aktualizacji zainstalowałem również php5_cgi, który kolidował z moją konfiguracją fcgid i nie uruchamiał już plików PHP.

Musiałem wyłączyć moduł Apache i ponownie uruchomić Apache

a2dismod php5_cgi
/etc/init.d/apache2 restart

Gdy moduł php5_cgi zniknął z drogi, fcgid mógł ponownie obsługiwać strony PHP.

derchris
źródło
Aww tak, ten podstępny drań cgi ^^ rozwiązał mój problem po aktualizacji php z 5.3 do 5.4 również z dotdeb.
Emii Khaos
2

Miałem podobne symptomy, ale inne rozwiązanie: w /etc/apache2/mods-enabled/php5.conf w komentarzu znalazła się pomocna rada, którą zastosowałem:

# 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.
qbolec
źródło
2

W przypadku, gdy ktoś używa php7 w środowisku Linux

Upewnij się, że włączyłeś php7

sudo a2enmod php7

Uruchom ponownie usługę mysql i Apache

sudo systemctl restart mysql
sudo systemctl restart apache2
MedoAlmasry
źródło
2

Po aktualizacji PHP do wersji 7.3, skrypty PHP były uruchamiane z danymi www zamiast $ USER, jak poprzednio.

Musiałem przeinstalować i aktywować 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

Aby upewnić się, że wszystko jest w porządku dla Virtualmin , użyłem kreatora ponownego sprawdzenia konfiguracji/virtual-server/check.cgi w Vitualmin / Ustawienia systemu .

Następnie Apache / PHP pobierał pliki php zamiast je uruchamiać. Musiałem więc edytować, /etc/apache2/mods-available/php7.3.confaby skomentować wiersz, SetHandler application/x-httpd-phpjak poniżej:

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

Po ponownym uruchomieniu Apache rozwiązało mój problem, mam nadzieję, że to pomoże.

Zadbaj też o pamięć podręczną przeglądarki.

Mój system:

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

Spędziłem dwa dni na śledzeniu tego i dowiedziałem się, że umieszczam moje skrypty PHP w niewłaściwym katalogu.

Podczas mojej standardowej instalacji Ubuntu umieszczałem skrypty /var/www. Powinni być w środku/var/www/html .

Właśnie zacząłem pracę nad PHP, więc nie wiem, czy moje rozwiązanie odnosi się do zmiany wersji, przez którą przeszedłeś.

Craig Smilovitz
źródło
1

to rozwiązało problem dla mnie (mam zainstalowany php7):

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

restart usługi sudo apache2

Marouen Mhiri
źródło
1

Miałem ten problem. Okazało się, że mam zainstalowany nginx i apache i automatycznie uruchamiam się przy starcie. Problem polegał na tym, że nginx najpierw wiązał się z portem http, co uniemożliwiało uruchomienie Apache.

dshepherd
źródło
1

Możliwe jest również, że masz uruchomiony Nginx, ale Twój php jest skonfigurowany do pracy z Apache. Aby zweryfikować, uruchomić service nginx statusi service apache2 statuszobaczyć, który jest uruchomiony. W przypadku, gdy działa nginx, a apache nie, po prostu uruchom, sudo service nginx stop; sudo service apache2 starta twój serwer będzie teraz obsługiwał pliki php zgodnie z oczekiwaniami.

heksykul
źródło
1

Ok… wiem, że jest już 1.000.000 odpowiedzi na to pytanie, - ale spędziłem co najmniej 6 efektywnych godzin, aby to rozgryźć; i przeszukałem go w Google setki razy i nie znalazłem ani jednego wpisu na ten temat. Pomyślałem, że dodam tutaj rozwiązanie mojego problemu.

Konkluzja

Gdybym skomentował te dwie linie w moich plikach /etc/apache2/[[SERVER-NAME].conf.conf w -file:

php_admin_value engine Off
IPCComTimeout 31

Nie mam pojęcia, co robią ani jak się tam dostali, - ale jest to w każdym z moich .conf-plików. A jeśli mogę usunąć te linie i upewnić się, że istnieje dowiązanie w/etc/apache2/sites-enabled/ usunę upewnię się, że -folderze , to nie pobierze on pliku index.php - i wszystko działa tak, jak powinno.

Cała historia

Mam zainstalowany VirtualMin na Ubuntu 16.04 VPS. Zaktualizowałem PHP do wersji 7.2. Wkrótce potem zaktualizowałem wersję Ubuntu i wybrałem błąd „Kernel Offset: Disabled”. Musiałem więc usunąć najnowszą wersję Ubuntu, - a kiedy mój system operacyjny ponownie się uruchomił: BOOM! Otrzymałem błąd, o którym mówi jego post: dla każdej witryny na moim VPS po prostu pobierał plik index.php zamiast go wyświetlać.

Próbowałem różnych rzeczy:

  • Usunięto PHP7.2 i zainstalowałem PHP5.6 (teraz wiem, że wersja PHP nie ma z tym nic wspólnego; to konfiguracja apache wymaga pracy).
  • Próbowałem włączać i wyłączać moduły Apache w istniejącej instalacji, ale bez powodzenia.
  • Następnie całkowicie usunąłem apache i zainstalowałem go ponownie, gdzie - po problemie nadal był !
  • Próbowałem obejść się z konfiguracją Virutal Server w VirtualMin (Webmin >> Serwery >> Apache Webserver).
  • Sprawdziłem konfigurację na pojedynczym serwerze wirtualnym (Virtualmin >> Ustawienia systemu >> Ponownie sprawdź konfigurację) ... Ten krok był całkiem niezły, ponieważ informował, którego modułu w Apache brakuje; po czym mógłbym to włączyć za pomocą a2enmod [MODULE_NAME]. I znalazłem nazwę modułu, szukając w Google. Musiałem aktywować około 6-8 modułów, zanim przeszedłem przez ten krok w weryfikacji - i minęło kilka minut, zanim skończyła się pamięć podręczna, - więc zrobienie tego było żmudnym krokiem.
  • I na koniec doszedłem do powyższego wniosku - wraz z linkami symbolicznymi - i udało mi się go uruchomić. Musiałem jednak przejść przez to dla każdej witryny na moim VPS.
Zeth
źródło
1

Miałem ten problem i jeśli faktycznie nigdy nie bawiłeś się ustawieniami konfiguracji serwera, to twój problem jest w 90% w pliku .htaccess

Możesz albo modyfikować plik .htaccess LOKALNIE, albo go usunąć (LOKALNIE)

Dia
źródło
0

Miałem podobny problem do OP podczas aktualizacji php5 ze starszej wersji do 5.5.9, czyli wersji zainstalowanej z Mint 17.

Uruchamiam konfigurację LAMP na komputerze w mojej sieci lokalnej, której używam do podglądu zmian w witrynach internetowych przed przesłaniem tych zmian na rzeczywisty serwer aktywny. Dlatego utrzymuję doskonałe lokalne lustro rzeczywistej witryny.

Po uaktualnieniu pliki, które działają i wyświetlają się doskonale w rzeczywistej witrynie, nie byłyby wyświetlane lub wyświetlałyby się tylko html na komputerze lokalnym. PHP nie zostało przeanalizowane. Polecenie phpinfo () działało, więc wiedziałem, że php działa inaczej. Dziennik nie wygenerował żadnych błędów. Wyświetlenie źródła strony pokazało mi rzeczywisty kod php.

Skonstruowałem stronę test.php, która zawierała następujący kod:

<?php phpinfo(); ?>

To zadziałało. Wtedy odkryłem, kiedy zmienił <?phpsię <?w komendzie nie pracował. Wszystkie moje strony php używają <?zamiast tego <?phpmoże nie być idealne, ale taka jest rzeczywistość. Rozwiązałem problem, przechodząc do / etc / php5 / apache2, wyszukując „short_open_tag” i zmieniając wartość z Off na On.

Poślizg
źródło
0

Jeśli żadne z powyższych nie działa,

spróbuj wykomentować linię

SetHandler ....

i uruchom ponownie Apache za pomocą

/etc/init.d/httpd restart

Powinno działać!

Cosmo Arun
źródło
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
Roberto Carlos Reyes Fernandez
źródło
0

Mam taki problem. Oto jak to rozwiązuję. Po zainstalowaniu Apache zainstalowałem PHP za pomocą tego polecenia.

sudo apt-get install php libapache2-mod-php

działa poprawnie, ale żądam pliku .php z Apache, daje bez uruchamiania PHP skryptu .

Następnie sprawdzam, czy PHP jest włączone.

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

ale nie pokazało żadnych wyników. Sprawdzam zainstalowane pakiety PHP.

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

Zainstalowano różne wersje PHP na moim komputerze. Następnie usuwam niektóre pakiety PHP z mojej poprzedniej listy, używając apt-get purge .

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

Ponownie instaluję PHP

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

Sprawdź, czy moduł PHP jest załadowany

$ a2query -m php7.0

jeśli nie włączono:

$ sudo a2enmod php7.0

Zrestartuj serwer Apache

$ sudo systemctl restart apache2

Na koniec sprawdzam, czy proces PHP jest włączony Apache

utwórz pusty plik

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

Dodaj tę zawartość do info.php i zapisz.

<?php
  phpinfo();
?>

Sprawdź w przeglądarce:

http: //localhost/info.php

pokazuje się poprawnie, myślę, że to pomoże każdemu.

Janaka Pushpakumara
źródło
0

Jeśli masz virtualmin, spróbuj wykomentować te linie w konfiguracji Apache w / etc / apache2 / sites-available

  #RemoveHandler .php
  #RemoveHandler .php7.0
  #php_admin_value engine Off
TomoMiha
źródło
0

Kiedy zaktualizowałem PHP 7.2 do PHP 7.4, mam również ten sam problem. Pracował wykonując następujące czynności: -

  1. W [domain].conf file , skomentował:

    php_admin_value engine wyłączony

I dodał:

AddType  application/x-httpd-php-source  .phps
AddType text/html .php
  1. Wyłącz mod 7.2 i włącz 7.4, wykonując następujące czynności:

    a2dismod php7.2
    a2enmod php7.4

  2. W /etc/apache2/mods-enabled/php7.4.conf pliku skomentuj:

    Aplikacja SetHandler / x-httpd-php
    php_admin_flag engine wyłączony

Clint
źródło
0

Dla osób, które znalazły ten post od Google prawie 6 lat w przyszłości (i nie tylko!), Możesz napotkać ten problem z Apache 2 i PHP 7, jednocześnie korzystając z UserDir modułu.

Inną możliwą przyczyną tego problemu może być próba uruchomienia skryptu w „katalogu użytkownika” z UserDirmodułu. Uruchamianie skryptów PHP w katalogach użytkownika jest domyślnie wyłączone. Napotkasz ten problem, jeśli skrypt znajduje się w public_htmlkatalogu w twoim folderze domowym i próbujesz uzyskać do niego dostęp http://localhost/~your_username.

Aby to naprawić, otwórz /etc/apache2/mods-enabled/php7.2.conf. Musisz skomentować lub usunąć blok znaczników na dole, który czyta

<IfModule mod_userdir.c>
    <Directory /home/*/public_html>
        php_admin_flag engine Off
    </Directory>
</IfModule>
mevers303
źródło
0

Miałem ten sam problem po zypper rm php*odinstalowaniu PHP i ponownej instalacji zzypper in php7 php7-gd php7-gettext php7-mbstring php7-mysql php7-pear

Rozwiązałem to włączając moduł Apache2 i restartując serwer WWW:

a2enmod php7 && service apache2 restart
czarny
źródło
-1

Jeśli Twój .htaccess ma coś takiego

AddType application/x-httpd-ea-php56 .php .php5 .phtm .html .htm
subash pandey
źródło