Apache mengunduh file php alih-alih menampilkannya

93

Informasi OS dan server:

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

Saya sebelumnya menginstal php 5.3.x tetapi memutuskan untuk meningkatkan. Saya pertama kali menghapus php 5.3.x dan kemudian menginstal php 5.5.1 tetapi setelah instalasi selesai apache tidak mengurai file php itu hanya mengunduhnya. Saya telah memeriksa pertanyaan serupa di sini di stackoverflow tetapi sejauh ini tidak ada yang membantu saya.

Sebagai catatan, saya memiliki baris berikut di httpd.conf dan php.conf saya yang seharusnya membuat php berfungsi tetapi tidak:

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

Saya sangat menghargai setiap bantuan. Terima kasih.

EDIT:

Saya memiliki baris ini di php.conf

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

EDIT:

Dengan menghapus

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

apache tidak lagi mengunduh file. Sekarang apache menampilkan kode sumber, tetapi tidak semuanya hanya sebagian. saya tambahkan

AddType text/html .php

tapi tidak beruntung.

Anthony Gainor
sumber
Nah, bagaimana Anda menginstalnya? SAPI yang mana? Lihat juga Bagaimana cara memeriksa modul apache mana yang diaktifkan / diinstal?
mario
2
Modul php Anda tidak berjalan.
Sithu
1
periksa httpd.confapakah modul php Anda dikomentari atau tidak
MaveRick
1
Saya mengedit pertanyaan. Modul memang keluar dan mereka sedang dimuat
Anthony Gainor
Apakah Anda merestart apache setelah instalasi?
Ahmad

Jawaban:

80

AddType yang benar untuk php adalah application / x-httpd-php

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

Pastikan juga modul php Anda telah dimuat

LoadModule php5_module        modules/mod_php55.so

Saat Anda mengonfigurasi apache, cobalah untuk melihat halaman dari browser lain - Saya mengalami hari-hari ketika chrome dengan keras kepala menyimpan hasilnya dan terus mengunduh kode sumber sementara di browser lain tidak apa-apa.

Mihkel
sumber
tidak ada jalur modul dalam kasus saya
shamaseen
2
Bisakah Anda menambahkan beberapa info di mana harus meletakkan baris-baris ini?
Sören
7
Untuk orang yang mencari di mana harus meletakkan garis-garis ini. /etc/httpd/conf/httpd.conf
Siraj Alam
Dalam kasus saya, di Apache-2.4.6 + PHP-7.3.13> LoadModule php7_module modules / libphp7.so
shaojun lyu
23

Saya menemukan masalah ini hari ini dan tidak ada solusi yang dijelaskan yang berhasil untuk saya. Jadi, inilah kemungkinan penyebab lainnya:

Jika Anda memiliki sesuatu seperti

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

dalam .htaccessfile folder konten web Anda, ini dapat menyebabkan skrip PHP Anda berhenti bekerja. Dalam kasus saya, server tidak mengetahui x-mapp-php6jenisnya, karena .htaccessfile itu adalah sesuatu yang saya impor dari host web yang berbeda ketika saya mentransfer konten situs web.

Hanya menghapus AddHandlerbaris dari .htaccessfile sudah menyelesaikannya untuk saya.

markus
sumber
Sempurna. Dalam kasus saya, itu AddHandler application/x-httpd-php54 .php54 .phpyang harus disingkirkan.
Old McStopher
Saya memiliki beberapa masalah tetapi menemukan file .htaccess pelakunya di direktori home (satu direktori di atas direktori web "public_html"). Jika ada orang lain yang memiliki masalah yang sama, cari juga .htaccess di direktori induk (pengaturan bertingkat).
Wireblue
Saya memiliki file .htaccess seperti ini yang saya ambil dari server web hosting. Itu memaksa versi PHP yang tidak diinstal di mesin lokal saya. Jadi virtual host tidak menjalankan file PHP dengan benar.
BrightIntelDusk
Ini hampir pasti menjadi masalah jika beberapa situs berfungsi dan yang lainnya tidak. Joomla .htaccess berisi AddHandler tetapi WordPress tidak.
Peter Wooster
Ini berhasil untuk saya, baru saja menghapus baris itu dari file publik / .htaccess dan indeks saya dimuat.
PA-GW
16

Setelah berjuang keras akhirnya saya menyelesaikan masalah.

Jika Anda diminta untuk mengunduh .phpfile alih-alih mengeksekusinya, berikut adalah solusi yang tepat: Saya berasumsi bahwa Anda telah menginstal PHP5 dan masih mendapatkan kesalahan ini.

$ sudo su
$ a2enmod php5

Ini dia.

Tetapi Jika Anda masih mendapatkan kesalahan:

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

lalu lakukan hal berikut:

Ternyata file tidak boleh disimpan mods-enabled, tetapi harus disimpan di mods-available. Sebuah symlink kemudian harus dibuat dalam mods-enabled menunjuk ke file yang disimpan dalam mods-available.

Pertama hapus yang asli:

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

Kemudian buat tautan simbolis:

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

Saya harap masalah Anda teratasi.

Ravi Shankar
sumber
2
Perhatikan bahwa ini hanya berfungsi di Linux (dan khususnya Debian Linux).
Gwyneth Llewelyn
6

Silakan lihat arahan addtype Anda.

Sepertinya Apache memberi tahu browser bahwa ia mengirimkan jenis dokumen application / php untuk skrip dengan ekstensi seperti .php5. Sebenarnya Apache seharusnya memberi tahu browser bahwa skrip mengeluarkan teks / html.

Silakan coba ini:

AddType text/html .php

Mengenai saran di atas bahwa Anda harus memberi tahu browser bahwa Anda mengeluarkan skrip PHP: Sepertinya itu ide yang tidak biasa bagi saya. Saya mencari di Google dan menemukan bahwa ada cukup banyak diskusi tentang itu di web. Rupanya ada kasus di mana Anda mungkin ingin mengatakan bahwa Anda mengirim skrip PHP (meskipun Apache seharusnya menjalankan skrip dan mengeluarkan teks / html,) dan ada juga kasus di mana browser tidak mengenali Mime tertentu itu. Tipe.

Menghapus cache browser Anda selalu merupakan ide yang bagus.

Jika bermanfaat, inilah salinan file /etc/httpd/conf.d/php.conf saya dari server yang menjalankan 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
sumber
Ini menarik, tetapi dalam kasus saya, ini hanya mengeluarkan seluruh skrip PHP, kali ini diformat sebagai HTML (sebagai lawan diformat dengan ASCII saja) - tidak berguna! Masalahnya di sini adalah bahwa PHP tidak dijalankan dengan benar, atau header yang salah dikirim ...
Gwyneth Llewelyn
Perhatikan direktif AddType terakhir (yang dikomentari dalam contoh di atas,) menyebabkan file .phps dicetak cantik dalam HTML. Apakah mungkin konfigurasi Apache Anda cukup mencetak file .php?
Sam Azer
5

Ini mungkin terjadi karena modul yang hilang diperlukan untuk php Anda. Dengan asumsi Anda telah menginstal php7, cari modul php7 yang tersedia menggunakan

sudo apt-cache search php7-*

Perintah di atas akan mencantumkan semua modul PHP7 yang tersedia untuk instalasi. Anda dapat memulai pemasangan modul seperti,

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

Jika .htaccess Anda memiliki sesuatu seperti ini ... AddHandler application / x-httpd-php53 .php .php5 .php4 .php3 kemudian beri komentar dan coba segarkan lagi ini berhasil untuk saya ...

pengguna252566
sumber
3

Saya memiliki masalah yang sama. Apache tidak memuat file php dari situs web tertentu, cukup unduh saja. Saya membaca posting ini dan jawabannya dan saya telah melihat saya mendapatkan baris ini di tempat terakhir dari file .htaccess:

AddHandler x-mapp-php5.5  .php

Saya telah mengomentarinya dan semuanya berfungsi dengan baik.

Terimakasih untuk semua !!!

Ladislao Garcia
sumber
2

Saya sebelumnya memiliki masalah serupa, setelah meningkatkan dari 5,3 menjadi 5,4. Tetapi pengaturan saya terlihat sedikit berbeda karena saya menjalankan Debian dan menggunakan fcgid ke server halaman PHP, dan bukan modul PHP5 apache / cgi. Jadi setelah saya meningkatkan, itu juga menginstal php5_cgi, yang bertabrakan dengan pengaturan fcgid saya, dan tidak akan mengeksekusi file PHP lagi.

Saya harus menonaktifkan Apache Module dan memulai ulang Apache

a2dismod php5_cgi
/etc/init.d/apache2 restart

Setelah modul php5_cgi dihentikan, fcgid dapat menampilkan halaman PHP lagi.

derchris
sumber
Aww ya, bajingan cgi yang rumit ini ^^ Memecahkan masalah saya setelah memperbarui php dari 5,3 menjadi 5,4 juga dari dotdeb.
Emii Khaos
2

Saya memiliki gejala yang serupa, namun solusi lain: di /etc/apache2/mods-enabled/php5.conf ada saran berguna di komentar, yang saya ikuti:

# 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.dll
sumber
2

Jika seseorang menggunakan php7 di lingkungan Linux

Pastikan Anda mengaktifkan php7

sudo a2enmod php7

Mulai ulang layanan mysql dan Apache

sudo systemctl restart mysql
sudo systemctl restart apache2
MedoAlmasry
sumber
2

Setelah memperbarui PHP menjadi 7.3, skrip PHP dijalankan dengan www-data bukan $ USER seperti sebelumnya.

Saya perlu menginstal ulang dan mengaktifkan 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

Untuk memastikan semuanya baik-baik saja untuk Virtualmin , saya menggunakan wizard Re-Check Configuration/virtual-server/check.cgi , di bawah Vitualmin / System Settings .

Setelah itu, Apache / PHP mengunduh file php alih-alih menjalankannya. Jadi saya perlu mengedit /etc/apache2/mods-available/php7.3.confuntuk mengomentari baris SetHandler application/x-httpd-phpseperti di bawah ini:

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

Setelah memulai ulang Apache, ini menyelesaikan masalah saya, semoga bantuan ini.

Jaga cache browser juga.

Sistem saya:

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
aneh0
sumber
1

Saya menghabiskan dua hari untuk melacak ini dan menemukan bahwa saya meletakkan skrip PHP saya di direktori yang salah.

Pada instalasi standar Ubuntu saya, saya memasukkan skrip /var/www. Mereka seharusnya masuk /var/www/html.

Saya baru saja memulai pekerjaan PHP, jadi saya tidak tahu apakah solusi saya terkait dengan perubahan versi yang Anda alami.

Craig Smilovitz
sumber
1

ini memecahkan masalah untuk saya (saya telah menginstal php7):

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

sudo service apache2 restart

Marouen Mhiri
sumber
1

Saya punya masalah ini. Ternyata saya telah menginstal nginx dan apache dan secara otomatis memulai saat boot. Masalahnya adalah nginx mengikat port http terlebih dahulu yang mencegah apache untuk dimulai.

dshepherd
sumber
1

Mungkin juga Anda menjalankan nginx tetapi php Anda diatur untuk dijalankan dengan apache. Untuk memverifikasi, jalankan service nginx statusdan service apache2 statusuntuk melihat mana yang sedang berjalan. Jika nginx sedang berjalan dan apache tidak, jalankan saja sudo service nginx stop; sudo service apache2 startdan server Anda sekarang akan melayani file php seperti yang diharapkan.

hexicle
sumber
1

Oke ... Saya tahu bahwa ada 1.000.000 jawaban untuk pertanyaan ini, - tetapi saya telah menghabiskan setidaknya 6 jam efektif, mencari tahu yang ini; dan saya telah mencarinya di Google ratusan kali dan tidak menemukan satu pun pos tentangnya. Jadi saya pikir saya akan menambahkan solusi untuk masalah saya di sini.

Kesimpulannya

Jika saya mengomentari dua baris ini di file /etc/apache2/[[SERVER-NAME].conf.conf saya di -file:

php_admin_value engine Off
IPCComTimeout 31

Saya tidak tahu apa yang mereka lakukan atau bagaimana mereka sampai di sana, - tetapi itu ada di setiap .conffile- saya . Dan jika saya menghapus baris-baris itu dan memastikan bahwa ada symlink di /etc/apache2/sites-enabled/-folder, maka itu tidak mengunduh index.php - dan semuanya bekerja sebagaimana mestinya.

Seluruh cerita

Saya telah menginstal VirtualMin pada Ubuntu 16.04 VPS. Saya meningkatkan ke versi PHP 7.2. Tak lama setelah itu, saya memperbarui versi Ubuntu dan menemukan kesalahan 'Kernel Offset: Disabled'. Jadi saya harus menghapus versi Ubuntu terbaru, - dan ketika OS saya boot lagi: BOOM! Saya mendapat kesalahan yang dibicarakan oleh postingnya: Untuk setiap situs di VPS saya, itu hanya mengunduh index.php alih-alih menampilkannya.

Saya mencoba semua jenis hal:

  • Menghapus PHP7.2 dan menginstal PHP5.6 (Saya tahu sekarang, bahwa versi PHP tidak ada hubungannya dengan itu; itu adalah konfigurasi-apache yang perlu diperbaiki).
  • Mencoba mengaktifkan dan menonaktifkan modul apache, pada instalasi yang ada, tetapi tidak berhasil.
  • Kemudian saya menghapus apache sepenuhnya dan menginstalnya lagi, di mana-setelah masalahnya masih ada!
  • Mencoba bermain-main dengan pengaturan Server Virutal di VirtualMin (Webmin >> Server >> Apache Webserver).
  • Memeriksa konfigurasi pada satu server Virtual (Virtualmin >> Pengaturan Sistem >> Periksa Ulang Konfigurasi) ... Langkah ini cukup bagus, karena ia memberi tahu modul mana di Apache yang hilang; di mana-setelah saya bisa mengaktifkannya dengan a2enmod [MODULE_NAME]. Dan saya menemukan nama modul dengan mencari di Google. Saya harus mengaktifkan sekitar 6-8 modul, sebelum saya melewati langkah validasi itu - dan perlu beberapa menit sebelum cache habis, - jadi melakukan ini adalah langkah yang membosankan.
  • Dan terakhir, saya menemukan kesimpulan tertulis di atas - bersama dengan symlink, - dan kemudian saya membuatnya berfungsi. Saya harus melewatinya untuk setiap situs di VPS saya.
Zeth
sumber
1

Saya mengalami masalah ini dan jika Anda sebenarnya tidak pernah bermain-main dengan pengaturan konfigurasi server Anda, maka masalah Anda adalah 90% di file .htaccess Anda

Anda juga memodifikasi file .htaccess LOKAL, atau menghapusnya (LOKAL)

Dia
sumber
0

Saya memiliki masalah yang mirip dengan OP ketika memutakhirkan php5 dari versi yang lebih lama, ke 5.5.9, yang merupakan versi yang diinstal dengan Mint 17.

Saya menjalankan penyiapan LAMP pada mesin di jaringan lokal saya, yang saya gunakan untuk melihat pratinjau perubahan ke situs web sebelum saya mengunggah perubahan itu ke server langsung yang sebenarnya. Jadi saya mempertahankan cermin lokal yang sempurna dari situs sebenarnya.

Setelah peningkatan, file yang berjalan dan ditampilkan dengan sempurna di situs sebenarnya tidak akan ditampilkan, atau hanya akan menampilkan html di mesin lokal. PHP tidak diurai. Perintah phpinfo () berfungsi, jadi saya tahu php berfungsi. Log tidak menghasilkan kesalahan. Melihat sumber halaman menunjukkan kepada saya kode php yang sebenarnya.

Saya telah membuat halaman test.php yang berisi kode berikut:

<?php phpinfo(); ?>

Ini berhasil. Kemudian saya menemukan ketika saya mengubah <?phpke <?perintah tidak lagi bekerja. Semua situs php saya menggunakan <?alih-alih <?phpyang mungkin tidak ideal, tetapi itulah kenyataannya. Saya memperbaiki masalah dengan membuka / etc / php5 / apache2, mencari "short_open_tag" dan mengubah nilainya dari Mati menjadi Aktif.

Tergelincir
sumber
0

Jika tidak ada yang berhasil,

coba komentari baris tersebut

SetHandler ....

dan mulai ulang apache menggunakan

/etc/init.d/httpd restart

Seharusnya berhasil!

Cosmo Arun
sumber
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
sumber
0

Saya punya masalah seperti ini. Beginilah cara saya mengatasinya. Setelah menginstal Apache maka saya menginstal PHP menggunakan perintah ini.

sudo apt-get install php libapache2-mod-php

itu dijalankan dengan benar tetapi saya meminta file .php dari Apache, itu memberi tanpa menjalankan skrip PHP .

Lalu saya periksa PHP diaktifkan.

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

tetapi tidak menunjukkan hasil apa pun. Saya memeriksa paket PHP yang diinstal.

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

Berbagai jenis versi PHP diinstal ke komputer saya. Kemudian saya menghapus beberapa paket PHP dari daftar saya sebelumnya, menggunakan apt-get purge .

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

Saya menginstal ulang PHP

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

Pastikan modul PHP dimuat

$ a2query -m php7.0

jika tidak diaktifkan dengan:

$ sudo a2enmod php7.0

Mulai ulang server Apache

$ sudo systemctl restart apache2

Terakhir, saya memeriksa proses PHP di Apache

buat file kosong

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

Tambahkan konten ini ke info.php & simpan.

<?php
  phpinfo();
?>

Periksa di browser:

http: //localhost/info.php

itu ditampilkan dengan benar. Saya pikir ini akan membantu siapa pun

Janaka Pushpakumara
sumber
0

Jika Anda memiliki virtualmin, coba beri komentar baris ini di konfigurasi apache Anda di / etc / apache2 / sites-available

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

Ketika saya memutakhirkan dari PHP 7.2 ke PHP 7.4, saya juga mendapat masalah yang sama. Bekerja dengan melakukan berikut: -

  1. Dalam [domain].conf file, berkomentar sebagai berikut:

    php_admin_value engine Mati

Dan Ditambahkan:

AddType  application/x-httpd-php-source  .phps
AddType text/html .php
  1. Nonaktifkan mod 7.2 dan aktifkan 7.4 dengan mengikuti:

    a2dismod php7.2
    a2enmod php7.4

  2. Dalam /etc/apache2/mods-enabled/php7.4.conffile, beri komentar sebagai berikut:

    Aplikasi SetHandler / x-httpd-php
    mesin php_admin_flag Mati

clint
sumber
0

Bagi orang-orang yang telah menemukan posting ini dari Google hampir 6 tahun yang akan datang (dan seterusnya!), Anda mungkin mengalami masalah ini dengan Apache 2 dan PHP 7 saat juga menggunakan UserDirmodulnya.

Penyebab lain yang mungkin dari masalah ini adalah Anda mencoba menjalankan skrip dalam "direktori pengguna" dari UserDirmodul. Menjalankan skrip PHP di direktori pengguna dinonaktifkan secara default. Anda akan mengalami masalah ini jika skrip ada di public_htmldirektori di folder utama dan Anda mencoba mengaksesnya dari http://localhost/~your_username.

Untuk memperbaikinya, buka /etc/apache2/mods-enabled/php7.2.conf. Anda harus mengomentari atau menghapus blok tag di bagian bawah yang bertuliskan

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

Saya memiliki masalah yang sama setelah menggunakan zypper rm php*untuk menghapus PHP dan menginstalnya lagi denganzypper in php7 php7-gd php7-gettext php7-mbstring php7-mysql php7-pear

Saya menyelesaikannya dengan mengaktifkan modul apache2 dan memulai ulang webserver:

a2enmod php7 && service apache2 restart
Hitam
sumber
-1

Jika .htaccess Anda memiliki hal seperti ini

AddType application/x-httpd-ea-php56 .php .php5 .phtm .html .htm
subash pandey
sumber