Apache, php dosyalarını görüntülemek yerine indiriyor


93

İşletim sistemi ve sunucu bilgileri:

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

Daha önce php 5.3.x'i kurmuştum ama yükseltmeye karar verdim. Önce php 5.3.x'i kaldırdım ve sonra php 5.5.1'i yükledim ama kurulum tamamlandıktan sonra apache php dosyalarını ayrıştırmadı, indirdi. Burada stackoverflow'da benzer soruları kontrol ettim ama şimdiye kadar hiçbiri bana yardımcı olmadı.

Kayıt için httpd.conf ve php.conf dosyamda php'nin çalışmasını sağlayacak ama yapmayan aşağıdaki satırlar var:

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

Herhangi bir yardım için gerçekten minnettar olurum. Teşekkür ederim.

DÜZENLE:

Php.conf dosyasında bu satırlar var

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

DÜZENLE:

Kaldırarak

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

apache artık dosyayı indirmiyor. Şimdi apache kaynak kodunu gösteriyor, ama hepsi sadece kısmen değil. ekledim

AddType text/html .php

ama şans yok.



2
Php modülünüz çalışmıyor.
Sithu

1
httpd.confphp modülünüzün yorumlanıp yorumlanmadığını kontrol edin
MaveRick

1
Soruları düzenledim. Modüller çıkıyor ve görünüşe göre yükleniyorlar
Anthony Gainor

Kurulumdan sonra apache'yi yeniden başlattınız mı?
Ahmad

Yanıtlar:


80

Php için doğru AddType, application / x-httpd-php'dir.

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

Ayrıca php modülünüzün yüklü olduğundan emin olun

LoadModule php5_module        modules/mod_php55.so

Apache'yi yapılandırırken, sayfayı başka bir tarayıcıdan görüntülemeyi deneyin - Chrome'un sonucu inatla önbelleğe aldığı günler oldu ve başka bir tarayıcıda sorun yokken kaynak kodunu indirmeye devam ediyor.


benim durumumda modül yolu yok
shamaseen

2
Bu satırları nereye koyacağınız konusunda biraz bilgi ekleyebilir misiniz?
Sören

7
Bu satırları nereye koyacaklarını arayanlar için. /etc/httpd/conf/httpd.conf
Siraj Alam

Benim durumumda, Apache-2.4.6 + PHP-7.3.13> LoadModule php7_module modules / libphp7.so
shaojun lyu

23

Bugün bu sorunla karşılaştım ve açıklanan çözümlerin hiçbiri benim için işe yaramadı. Öyleyse işte başka bir olası neden:

Gibi bir şeyin varsa

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

.htaccessweb içeriği klasörünüzün bir dosyasında, PHP betiklerinizin çalışmayı durdurmasına neden olabilir. Benim durumumda sunucu x-mapp-php6türü bilmiyordu , çünkü o .htaccessdosya web sitesi içeriğini aktardığımda farklı bir web barındırıcısından içe aktardığım bir şeydi.

Sadece AddHandlersatırı .htaccessdosyadan kaldırmak benim için çözdü.


Mükemmel. Benim durumumda, AddHandler application/x-httpd-php54 .php54 .phpkaldırılması gerekiyordu.
Old McStopher

Bazı sorunlar yaşadım, ancak suçlu .htaccess dosyasını ana dizinde ("public_html" web dizininin üstündeki bir dizin) buldum. Başkasında da aynı sorun varsa, üst dizinlerde de .htaccess'i arayın (ayarlar basamaklı).
Wireblue

Bir web barındırma sunucusundan aldığım bunun gibi bir .htaccess dosyası vardı. Yerel makinemde kurulu olmayan bir PHP sürümünü zorluyordu. Dolayısıyla, sanal konak PHP dosyasını düzgün bir şekilde çalıştırmıyordu.
BrightIntelDusk

Bazı siteler çalışır ve diğerleri çalışmazsa, bu neredeyse kesinlikle bir sorundur. Joomla .htaccess bir AddHandler içeriyordu ancak WordPress içermiyordu.
Peter Wooster

Bu benim için çalıştı, sadece o satırı genel / .htaccess dosyamdan çıkardı ve dizin yüklendi.
PA-GW

16

Çok uğraştıktan sonra nihayet sorunu çözdüm.

Bir .phpdosyayı yürütmek yerine indirmeniz istenirse , işte mükemmel çözüm: PHP5'i zaten yüklediğinizi ve hala bu hatayı aldığınızı varsayıyorum.

$ sudo su
$ a2enmod php5

Budur.

Ancak yine de hatayı alıyorsanız:

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

sonra aşağıdakileri yapın:

Dosyaların depolanmaması mods-enabledgerektiği, bunun yerine depolanması gerektiği ortaya çıktı mods-available. Daha sonra, mevcut modlarda depolanan dosyaya işaret eden modlar etkinleştirilmiş bir sembolik bağlantı oluşturulmalıdır.

Önce orijinali çıkarın:

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

Ardından sembolik bağlantıyı oluşturun:

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

Umarım sorunun çözülmüştür.


2
Bunun yalnızca Linux (ve özellikle Debian Linux) altında çalıştığını unutmayın.
Gwyneth Llewelyn

6

Lütfen eklenti direktiflerinize bir göz atın.

Bana öyle geliyor ki Apache, tarayıcıya .php5 gibi uzantılara sahip betikler için bir belge türü uygulama / php gönderdiğini söylüyor. Aslında Apache'nin tarayıcıya betiğin text / html çıktısını verdiğini söylemesi beklenir.

Lütfen şunu deneyin:

AddType text/html .php

Yukarıdaki öneriye gelince, tarayıcıya bir PHP betiği çıktısı aldığınızı söylemelisiniz: Bana alışılmadık bir fikir gibi geldi. Google'da araştırdım ve bununla ilgili web'de epey tartışma olduğunu buldum. Görünüşe göre bir PHP betiği gönderdiğinizi söylemek isteyebileceğiniz durumlar vardır (Apache'nin betiği çalıştırması ve text / html yayınlaması gerekmesine rağmen) ve ayrıca tarayıcının bu belirli Mime'ı tanımadığı durumlar da vardır. Tür.

Tarayıcınızın önbelleğini temizlemek her zaman iyi bir fikirdir.

Yardımcı olması durumunda, CentOS 5.9 çalıştıran bir sunucudan /etc/httpd/conf.d/php.conf dosyamın bir kopyasını burada bulabilirsiniz:

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

Bu ilginç, ancak benim durumumda, bu sefer HTML olarak biçimlendirilmiş (yalnızca ASCII ile biçimlendirilmenin aksine) tüm PHP betiğini çıktı olarak veriyor - kullanışlı değil! Buradaki sorun, PHP'nin bir şekilde doğru şekilde çalıştırılmaması veya yanlış başlıkların gönderilmesidir ...
Gwyneth Llewelyn

Son AddType yönergesinin (yukarıdaki örnekte açıklanmıştır) bir .phps dosyasının HTML'de güzel yazdırılmasına neden olduğuna dikkat edin. Apache yapılandırmanızın güzel yazdırılan .php dosyaları olması mümkün mü?
Sam Azer

5

Bu, php'niz için gereken eksik modüller nedeniyle olabilir. Php7'nin kurulu olduğunu varsayarak, mevcut php7 modüllerini kullanarak arayın

sudo apt-cache search php7-*

Yukarıdaki komut, kurulum için mevcut tüm PHP7 modüllerini listeleyecektir. Aşağıdaki gibi modüllerin kurulumuna başlayabilirsiniz:

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

4

.Htaccess'iniz böyle bir şeye sahipse ... AddHandler application / x-httpd-php53 .php .php5 .php4 .php3 sonra yorum yapın ve benim için çalışmış olanı yenilemeyi tekrar deneyin ...


3

Bende de aynı sorun var. Apache, belirli bir web sitesinden php dosyalarını yüklemiyor, yeni indirdi. Bu yazıyı ve cevapları okudum ve bu satırı .htaccess dosyasının son yerine koyduğumu gördüm:

AddHandler x-mapp-php5.5  .php

Yorumladım ve her şey yolunda gidiyor.

Herkese teşekkürler !!!


2

Daha önce 5.3'ten 5.4'e yükselttikten sonra benzer bir sorun yaşadım. Ancak, PHP5 apache / cgi modülünü değil, Debian'ı çalıştırdığım ve PHP sayfalarını sunucuya fcgid kullandığım için kurulumum biraz farklı görünüyor. Bu yüzden, yükselttikten sonra, fcgid kurulumumla çakışan ve artık PHP dosyalarını çalıştırmayan php5_cgi'yi de yükledi.

Apache Modülünü devre dışı bırakmak ve Apache'yi yeniden başlatmak zorunda kaldım

a2dismod php5_cgi
/etc/init.d/apache2 restart

Php5_cgi modülü ortadan kalktığında, fcgid PHP sayfalarına tekrar hizmet verebildi.


Aww evet, bu aldatıcı cgi piç ^^ php'yi dotdeb'den 5.3'ten 5.4'e güncelledikten sonra sorunumu çözdüm.
Emii Khaos

2

Benzer semptomlarım vardı, yine başka bir çözüm: /etc/apache2/mods-enabled/php5.conf içinde yorumda takip ettiğim yararlı bir tavsiye vardı:

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

2

Birinin Linux ortamında php7 kullanması durumunda

Php7'yi etkinleştirdiğinizden emin olun

sudo a2enmod php7

Mysql hizmetini ve Apache'yi yeniden başlatın

sudo systemctl restart mysql
sudo systemctl restart apache2

2

PHP'yi 7.3'e güncelledikten sonra, önceki gibi $ USER yerine www-data ile çalışan PHP betikleri .

PHP-FPM'yi yeniden yüklemem ve etkinleştirmem gerekiyor:

sudo apt-get install php-fpm
sudo a2enmod proxy_fcgi setenvif
sudo service apache2 restart
sudo a2enconf php7.3-fpm
sudo service apache2 restart

Virtualmin için her şeyin yolunda gittiğinden emin olmak için Vitualmin / Sistem Ayarları altında Yapılandırmayı Yeniden Kontrol Et sihirbazını kullandım./virtual-server/check.cgi .

Bundan sonra Apache / PHP php dosyalarını çalıştırmak yerine indiriyordu. Bu yüzden /etc/apache2/mods-available/php7.3.confsatırı SetHandler application/x-httpd-phpaşağıdaki gibi yorumlamak için düzenlemem gerekiyordu :

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

Apache'yi yeniden başlattıktan sonra sorunumu çözdü, bu yardımı umuyorum.

Tarayıcı önbelleğine de dikkat edin.

Sistemim:

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

1

Bunu izleyerek iki gün geçirdim ve PHP betiklerimi yanlış dizine koyduğumu öğrendim.

Standart Ubuntu kurulumumda betikleri koyuyordum /var/www. İçeride olmalılardı /var/www/html.

PHP çalışmasına yeni başladım, bu yüzden çözümümün sizin yaptığınız sürüm değişikliğiyle ilgili olup olmadığını bilmiyorum.


1

bu benim için sorunu çözdü (php7 yükledim):

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

sudo hizmeti apache2 yeniden başlatma


1

Bu sorunu yaşadım. Hem nginx hem de apache'nin kurulu olduğu ve önyüklemede otomatik olarak başladığım ortaya çıktı. Sorun, nginx'in ilk olarak http portuna bağlanması ve bu da apache'nin başlamasını engellemesiydi.


1

Ayrıca nginx'iniz çalışıyor olabilir, ancak php'niz apache ile çalışacak şekilde ayarlanmıştır. Doğrulamak için çalıştırın service nginx statusve service apache2 statushangisinin çalıştığını görmek için. Nginx'in çalıştığı ve apache'nin çalışmadığı durumda, sadece çalıştırın sudo service nginx stop; sudo service apache2 startve sunucunuz artık beklendiği gibi php dosyalarını sunacaktır.


1

Tamam ... Bu sorulara şimdiden 1.000.000 cevap olduğunu biliyorum, - ama bunu çözmek için en az 6 saat etkili bir şekilde geçirdim; ve bunu yüzlerce kez googledim ve bu konuda tek bir gönderi bulamadım. Böylece sorunuma çözümü burada ekleyeceğimi düşündüm.

Sonuç

Bu iki satırı -dosyamdaki .conf dosyalarımda yorumladıysam /etc/apache2/[[SERVER-NAME].conf:

php_admin_value engine Off
IPCComTimeout 31

Ne yaptıkları ya da oraya nasıl geldikleri hakkında hiçbir fikrim yok, ama dosyalarımın her birinde var .conf. Ve bu satırları kaldırırsam ve -folder içinde bir sembolik bağ olduğundan emin/etc/apache2/sites-enabled/ olursam, o zaman index.php'yi indirmez - ve olması gerektiği gibi çalışır.

Tüm hikaye

Ubuntu 16.04 VPS'de VirtualMin kurulu. PHP sürüm 7.2'ye yükselttim. Bundan kısa bir süre sonra Ubuntu sürümünü güncelledim ve bir 'Kernel Offset: Disabled' hatasıyla karşılaştım. Bu yüzden en son Ubuntu sürümünü silmem gerekiyordu - ve işletim sistemim tekrar açıldığında: BOOM! Gönderisinin bahsettiği hatayı aldım: VPS'imdeki her site için, göstermek yerine index.php'yi indirdi.

Her türlü şeyi denedim:

  • PHP7.2 kaldırıldı ve PHP5.6 yüklendi (PHP sürümünün bununla hiçbir ilgisi olmadığını şimdi biliyorum; çalışması gereken apache yapılandırmasıdır).
  • Mevcut kurulumda apache modüllerini etkinleştirmeyi ve devre dışı bırakmayı denedim, ancak şanssız.
  • Sonra apache'yi tamamen kaldırdım ve tekrar yükledim, sonra problem hala oradaydı!
  • VirtualMin'de (Webmin >> Servers >> Apache Webserver) Virutal Server kurulumuyla uğraşmaya çalıştım.
  • Tek bir Sanal sunucudaki yapılandırmayı kontrol ettim (Virtualmin >> Sistem Ayarları >> Yapılandırmayı Yeniden Kontrol Et) ... Bu adım, Apache'de hangi modülün eksik olduğunu söylediği için oldukça güzeldi; sonra nerede etkinleştirebilirima2enmod [MODULE_NAME] . Ve modül adını Google'da buldum. Doğrulamadaki o adımı geçmeden önce yaklaşık 6-8 modülü aktif hale getirmek zorunda kaldım - ve önbelleğin bitmesi birkaç dakika sürdü - bu yüzden bunu yapmak yorucu bir adımdı.
  • Ve son olarak, yukarıda yazılı sonucu - sembolik bağlantılarla birlikte - buldum ve sonra işe yaramasını sağladım. Yine de VPS'imdeki her site için bunu gözden geçirmek zorunda kaldım.

1

Bu sorunu yaşadım ve sunucu yapılandırma ayarlarınızla gerçekten hiç oynamadıysanız, sorununuz .htaccess dosyanızda % 90'dır.

.Htaccess dosyasını YEREL OLARAK değiştirirsiniz veya silersiniz (YEREL olarak)


0

Eski bir sürümden php5'i Mint 17 ile kurulan sürüm olan 5.5.9'a yükseltirken OP ile benzer bir sorun yaşadım.

Yerel ağımdaki bir makinede bir LAMP kurulumu çalıştırıyorum ve bunu, bu değişiklikleri gerçek canlı sunucuya yüklemeden önce web sitelerinde yapılan değişiklikleri önizlemek için kullanıyorum. Bu yüzden gerçek sitenin mükemmel bir yerel aynasını tutuyorum.

Yükseltmeden sonra, gerçek sitede mükemmel çalışan ve görüntülenen dosyalar görüntülenmez veya yerel makinede yalnızca html görüntüler. PHP ayrıştırılmadı. Phpinfo () komutu çalıştı, bu yüzden php'nin başka türlü çalıştığını biliyordum. Günlük herhangi bir hata oluşturmadı. Sayfa kaynağını görüntülemek bana gerçek php kodunu gösterdi.

Aşağıdaki kodu içeren bir test.php sayfası oluşturdum:

<?php phpinfo(); ?>

Bu işe yaradı. Değiştim Sonra ben keşfettim <?phpiçin <?artık çalıştı komuta. Tüm php sitelerim <?bunun yerine <?phpideal olmayabilir, ancak gerçek bu. / Etc / php5 / apache2'ye gidip "short_open_tag" arayarak ve değeri Off'tan On'a değiştirerek sorunu çözdüm.


0

Yukarıdakilerden hiçbiri işe yaramazsa,

çizgiyi yorumlamayı dene

SetHandler ....

ve apache'yi kullanarak yeniden başlatın

/etc/init.d/httpd restart

İşe yaramalı!


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

0

Bu tür bir problemim var. Ben böyle çözüyorum. Apache'yi kurduktan sonra bu komutu kullanarak PHP'yi kurdum .

sudo apt-get install php libapache2-mod-php

doğru çalışıyor ama Apache'den .php dosyası talep ediyorum , PHP betiğini çalıştırmadan veriyor .

Sonra PHP'nin etkin olduğunu kontrol ediyorum.

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

ancak herhangi bir sonuç göstermedi. Kurulu PHP paketlerini kontrol ediyorum.

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

Bilgisayarıma farklı türde PHP sürümleri yüklenmiş. Daha sonra apt-get purge kullanarak önceki listemden bazı PHP paketlerini kaldırıyorum .

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

PHP'yi yeniden yüklüyorum

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

PHP modülünün yüklendiğini doğrulayın

$ a2query -m php7.0

ile etkinleştirilmemişse:

$ sudo a2enmod php7.0

Apache sunucusunu yeniden başlatın

$ sudo systemctl restart apache2

Son olarak Apache'de PHP sürecini kontrol ediyorum

boş bir dosya oluştur

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

Bu içeriği info.php'ye ekleyin ve kaydedin.

<?php
  phpinfo();
?>

Tarayıcıda kontrol edin:

http: //localhost/info.php

doğru gösterir.Bunun herkese yardımcı olacağını düşünüyorum.


0

Virtualmin'iniz varsa, / etc / apache2 / sites-available içindeki apache yapılandırmanızdaki bu satırları yorumlamayı deneyin.

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

0

Bu gönderiyi Google'dan yaklaşık 6 yıl sonra (ve sonrasında) bulan kişiler için, UserDirmodülü kullanırken Apache 2 ve PHP 7 ile bu sorunla karşılaşabilirsiniz .

Bu sorunun bir başka olası nedeni, komut dosyasını UserDirmodülden bir "kullanıcı dizininde" çalıştırmaya çalışıyor olmanız olabilir . Kullanıcı dizinlerinde PHP betiklerinin çalıştırılması varsayılan olarak devre dışıdır. Komut dosyası, public_htmlana klasörünüzdeki dizindeyse ve ona erişmeye çalışıyorsanız, bu sorunla karşılaşırsınız http://localhost/~your_username.

Bunu düzeltmek için açın /etc/apache2/mods-enabled/php7.2.conf. Aşağıdaki etiket bloğuna yorum yapmalı veya silmelisiniz.

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

0

zypper rm php*PHP'yi kaldırıp tekrar yükledikten sonra aynı sorunu yaşadımzypper in php7 php7-gd php7-gettext php7-mbstring php7-mysql php7-pear

Apache2 modülünü etkinleştirip web sunucusunu yeniden başlatarak çözdüm:

a2enmod php7 && service apache2 restart

0

PHP 7.2'den PHP 7.4'e yükselttiğimde aynı sorunu yaşadım. Aşağıdakileri yaparak çalıştı: -

  1. In [domain].conf file, şu yorumu yaptı:

    php_admin_value engine Off
    

    Ve Eklendi:

    AddType  application/x-httpd-php-source  .phps
    AddType text/html .php
    
  2. Mod 7.2'yi devre dışı bırakın ve aşağıdakileri yaparak 7.4'ü etkinleştirin:

    a2dismod php7.2
    a2enmod php7.4
    
  3. In /etc/apache2/mods-enabled/php7.4.confdosyasında aşağıdakiler yorumum:

    SetHandler application/x-httpd-php
    php_admin_flag engine Off
    

-1

.Htaccess'inizde böyle bir şey varsa

AddType application/x-httpd-ea-php56 .php .php5 .phtm .html .htm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.