PHP kodu yürütülmüyor, bunun yerine kod sayfada görünüyor


320

(Dreamweaver kullanarak) bir projede bazı PHP kodu yürütmek çalışıyorum ama kod çalıştırılmıyor.

Kaynak kodunu kontrol ettiğimde, PHP kodu HTML etiketleri olarak görünür (Kaynak kodunda görebilirsiniz). Apache düzgün çalışıyor (XAMPP ile çalışıyorum), PHP sayfaları düzgün açılıyor ama PHP kodu yürütülmüyor.

Birisi olup bitenler hakkında bir öneri var mı?

Not: Dosya zaten şu şekilde adlandırılmıştır:filename.php

Düzenleme: Kod ..:

<?
include_once("/code/configs.php");
?>

Yazdır


44
<?Bunun yerine kısa etiketler mi kullanıyorsunuz <?php?
Dan Grossman

28
ASLA kısa etiketler kullanmayın. ( <?). Kullanımdan kaldırılıyorlar, pek çok yerde çalışmıyorlar, aksi halde tamamen gereksizler. Üç tuş vuruşunu kaydetmek, kodunuzun üzerinde çalışabileceği sunucuların yarısında başarısız olma olasılığına izin vermek için geçerli bir neden değildir.
mopsyd

10
@mopsyd Kısa etiketlerin kullanımdan kaldırıldığı nerede yazıyor? Unutmayın ki kısa etiketleri aynı değildir kısa eko etiketleri ve kısa eko etiketleri bakılmaksızın, PHP 5.4 beri varsayılan olarak desteklenmiştir short_open_tagayarı.
Kyle Anderson

5
Kısa etiketlerin kısa yankı etiketleri olmadığının farkındayım, bu yüzden yorumda bahsettiğim şeyi belirttim. Yazma sırasında, kısa etiketler php 6 sürümü için kullanımdan kaldırılmak üzere işaretlendi, ancak bu görünüşe göre o zamandan beri değişti. Sorun hala birçok sunucunun devre dışı bırakılmasıdır, bu da kodunuzu önemli ölçüde daha az taşınabilir hale getirir. Bu, <?=sunucu ayarlarına bakılmaksızın php 5.4+ sürümünde düzgün çalışması gereken kısa eko etiketleri ( ) için geçerli değildir .
mopsyd

3
aptal kısa etiketler hakkında konuşun. Uzun etiketler berbat ve çirkinler. Php programlama 10 yıldır hiç bir sorun yaşamadım. Neredeyse asla sorun değiller
Danial

Yanıtlar:


418

Yapılandırmanızla ilgili bir sorun var gibi görünüyor, kontrol edebileceğiniz birkaç şey var:

  1. PHP'nin kurulu ve doğru şekilde çalıştığından emin olun. Bu aptalca gelebilir, ama asla bilemezsin. Kontrol etmenin kolay bir yolu php -v, bir komut satırından çalıştırmak ve sürüm bilgisini veya herhangi bir hata döndürüp döndürmediğini görmektir.

  2. PHP modülünün Apache'nizin httpd.conf dosyasının içinde listelendiğinden ve uncommented olmadığından emin olun. Bu LoadModule php5_module "c:/php/php5apache2_2.dll", dosyadaki gibi bir şey olmalıdır . Arayın LoadModule phpve ;önünde yorum ( ) olmadığından emin olun .

  3. Apache'nin httpd.conf dosyasında PHP MIME türünün bulunduğundan emin olun. Bu böyle bir şey olmalı AddType application/x-httpd-php .php. Bu, Apache'ye .phpdosyaları PHP olarak çalıştırmasını söyler . AddType'ı arayın ve PHP için bir girdi olduğundan ve bu öğenin uncommented olduğundan emin olun .

  4. Dosyanızın üzerinde .phpuzantı olduğundan veya 3. noktadaki MIME tanımında belirtilen uzantıdan emin olun , aksi takdirde PHP olarak yürütülmez.

  5. PHP dosyasında ( ) kısa etiketler kullanmadığınızdan emin olun <?, bunlar varsayılan olarak tüm sunucularda etkinleştirilmez ve kullanımları önerilmez. Kullanım <?phpyerine (veya php.ini kısa etiketleri etkinleştirmek ile short_open_tag=Ononlara bağlı kodu varsa).

  6. http://localhost/file.phpYerel dosya erişimi üzerinden olmayan bir URL kullanarak dosyanıza web sunucunuz üzerinden eriştiğinizden emin olun.file://localhost/www/file.php

Son olarak , diğer kurulum ipuçları için PHP kılavuzuna bakın .


14
Nedenini bilmiyorum, ancak PHP 5.3.15'in yükleyicisi satırı eklemiyor AddType application/x-httpd-php .php. Çok teşekkürler!!
MatuDuke

7
@shmeeps: Kısa etiketlerin kullanımdan kaldırıldığını nereden gördünüz? Biraz arama yaptım ve sadece onlara karşı öneriler bulabilirim, kullanımdan çıkarma hakkında hiçbir şey. Dağıtılacak uygulamalar için verilen, barındırma sunucusunun etkinleştirilmiş olmaması durumunda <? Php kullanmak daha iyidir, ancak sunucu üzerinde tam denetime sahip olduğunuz uygulamalar için onları kullanmamak için herhangi bir neden görmek.
ClarkeyBoy

3
nokta 6 benim için çalıştı .. yerel erişim apache sunucusu kullanmaz
KawaiKx

6
nokta 2 benim için güvenli bir şekilde çalıştı -apt-get purge apache2; apt-get install apache2 libapache-mod-php5
ulkas

1
@full_prog_full İçeriği olan bir .phpuzantı yüklemeyi deneyin <?php echo("Success"); ?>ve dosyaya bir web tarayıcısıyla erişmenin ilişkili PHP kodu olmadan "Başarılı" görüntülenmesine neden olup olmadığına bakın.
shmeeps

61

php7:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.0-fpm
sudo service apache2 restart

24
Bu kod snippet'i, sorunun nasıl ve neden çözüldüğüne dair bir açıklama da dahil olmak üzere soruyu çözebilir, ancak gönderinizin kalitesini artırmaya yardımcı olacaktır . Sadece şimdi soran kişi için değil, gelecekte okuyucular için soruyu cevapladığınızı unutmayın! Lütfen açıklama eklemek için cevabınızı düzenleyin ve hangi sınırlamaların ve varsayımların geçerli olduğunu belirtin.
Toby Speight

4
Bu cevap linux ile ilgili konular starter açıkça pencereleri kullanıyor.
Raymond Nijland

3
@RaymondNijland doğru ama bu standarttır ve bu soruyu buldum ve bir saatten fazla sorun giderme sonrasında beni kurtardı.
Kaz

Nasıl ve Neden: PHP7, make komut dosyasında varsayılan hızlı CGI hizmetini yapılandırmazsa olur. sudo a2enmod proxy_fcgi setenvifüç yeni mod oluşturur /mods-available/proxy.conf proxy_fcgi.load proxy.loadBenzer şekilde, sudo a2enconf php7.0-fpmbir yapılandırma dosyası oluşturur /conf-available/php7.0-fpm.confBu yapıldığında ve Apache2 PHP7 modülünü bir hızlı CGI servisi olarak çalıştırabilir.
Talvi Watia

33

Ubuntu Apache çalıştırıyorum ve benim sorun /etc/apache2/mods-available/php5.confdosya eksikti:

<FilesMatch ".+\.ph(p[345]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

Geri ekledim ve php php dosyalarını doğru şekilde ayrıştırıyordu.


31

php 7 kullanıcıları için not, httpd.conf dosyanıza ekleyin:

# PHP 7 specific configuration
<IfModule php7_module>
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
    <IfModule dir_module>
        DirectoryIndex index.html index.php
    </IfModule>
</IfModule>

4
Sadece diğer insanlara bu konuda yardımcı olmak için. httpd.confDosyanın içinde bulunduğu /etc/apache2/httpd.confUbuntu kullanıyorsanız, olurdu apache2.confihtiyaçları PHP7 için değiştirilecek aynı dizinde.
Ahmed Sagarwala

23

Bu soruna neden olan başka bir sorun buldum ve zaten çözdüm. Kodumu yanlışlıkla yanlışlıkla kaydettim UTF-16. PHP5 <?phpvarsayılan olarak 16 bit kodlamada etiketi tanıyamaz gibi görünüyor .


18

Bu cevabı gönderiyorum çünkü Virtualmin / Webmin yönetici arayüzüm PHP motorumu devre dışı bırakmanın iyi bir fikir olduğuna karar verdi .. çözümü bulmak için biraz zaman aldı, bu yüzden sizlerle paylaşacağımı düşündüm:

Ayrıca, web sitenizin yapılandırma dosyalarının bu belirli ana makine veya sanal ana bilgisayarla ilgili hiçbirinde PHP'yi kapatan herhangi bir php_admin_value bulunmadığından emin olun:

php_admin_value engine Off

Şüphe duyduğunuzda, yorum yapın ...

# php_admin_value engine Off

Ve web sunucunuzu yeniden başlatın.


1
Bu yapılandırma ayarları tam olarak nerede?
cronoklee

2
@cronoklee httpd.conf'un vHost ayarlarında. Mevcut ana bilgisayarlar için webmin'de apache config'i düzenlemeniz gerekir. Gelecekteki ana bilgisayarlar için virtualmin> sunucu şablonu> apache web sitesine gidin. Her neyse, bu fastcgi kadar güvenli değil - virtualmin'in varsayılanı. Bu nedenle doğru yaklaşım fcgi'nin neden çalışmadığını gidermek olmalıdır, örneğin dosya izinlerinden kaynaklanıyor olabilir.
Sheepy

Apache'nin httpd.conf içermeyen bir sürümünü kullanıyorsanız, bakın /etc/apache2/mods-enabled/php7.confveyaphp5.conf
Sam Malayek

Belirli bir yapılandırma ayarının konumu konusunda şüpheniz olduğunda, (örneğin bu durumda) yazarak aradığınızı bulmak için her zaman grep'i kullanabilirsiniz:sudo grep php_admin_value /etc/* -R
Henry van Megen

17

Sadece php dosyanızı tarayıcıya açıyorsunuz. Localhost url'sini kullanarak açmalısınız. bir dosyayı doğrudan dizininizden açarsanız hiçbir durumda php kodunu çalıştırmaz.

kullanım: http://locahost/index.phpveyahttp:127.0.0.1/index.php

Php kısa kodunu etkinleştir. Sizin durumunuzda, <?hangi php kısa kod için kullanıyorsunuz <?php. Varsayılan olarak php kısa kodları devre dışıdır.

Ayrıca şunu kullanın: sudo apt-get install php5 libapache2-mod-php5 php5-mcryptubuntu kullanıcısıysanız.


1
Sadece bir dosya eklediğimde neden mcrypt gerekli? Bu sorunun eski olduğunu ve kısa etiketler sorununun 16 kez, ayrıca sorumun üst yorumunda belirtildiğini fark etmelisiniz.
Gui

1
Çözümümü paylaşıyorum, aynı hatayla da karşılaşıyordum ve mcrypt'in bu komutunu uyguladıktan sonra sorunum çözüldü. deneyebilirsiniz.
Hasan Baig

varsayılan olarak php kısa kodları etkindir. short_open_tag = Açık (Varsayılan Değer = AÇIK) php 5.6
zond

Bu benim sorunumdu, benim sanalmin / apache konfigürasyonum 127.0.0.2 içindi ama harici ip adresimi tarayıcıya koyuyordum, sadece v / a yapılandırmamı güncelledim ve şimdi çalışıyor
Hayden Thring

Ben sadece libapache2-mod-php7.3 eksik.
dxvargas

8

Aptalca gelmesi gerektiğini biliyorum ... ama nadiren olur.

Den php yürütmeye çalışıp çalışmadığınızı kontrol edin

**http://localhost/info.php**

ve değil

file:///var/www/info.php

ps> Eğer kabuktan yazarsanız fark edebilirsiniz

php info.php 

kod ile cevap (php fonksiyonları anlamına gelir) ..


PHP iyi çalışıyor (komut satırı kullanılarak kontrol edildi). ancak dosyaya URL kullanarak eriştiğimde PHP kodu gösterir.
muaaz

8

Bu sadece bana, sunucu işlemek yerine html dosyalarını indirmek ile birlikte tekrar oldu. Bilgisayarda bir süre web sunucusu apache kullanmamıştım ve bu arada Ubuntu orijinal LTS'den iki sürüm daha güncellendi. Şimdi

$ cat /etc/issue
Ubuntu 16.04 LTS

Php sonra böyle çalıştı:

$ sudo apt-get install lamp-server^
$ sudo a2enmod php7.0
$ sudo service apache2 restart 

Web sunucusu artık php'yi ayrıştırıyordu. Belki şimdi php7.0 şimdi php5 çalıştırmadan önce olduğu gibi çalışan beri bazı web güncellemek lazım. Oh iyi.


5

Bunu XAMPP'yi kaldırıp WAMP'ı yükleyerek çözdüm. Yardım için teşekkürler.


Ben xampp ama iyi çalışıyor. @Gui
Pie

5

High Sierra (OS X 10.13.5) ile birlikte gelen php 7.1'de bu sorunla karşılaştım, /etc/apache2/httpd.confaşağıdaki değişikliklerle düzenleme yardımcı oldu:

  1. Bu satırı kaldır

    LoadModule php7_module libexec/apache2/libphp7.so
  2. Sonunda yapıştırmayı yapıştır

    <IfModule php7_module>
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php-source .phps
    
        <IfModule dir_module>
            DirectoryIndex index.html index.php
        </IfModule>
    </IfModule>

Aynı gibi pls Wamp 3 sürümü aynı hatayı önerebilir. Wamp 3'te /etc/apache2/httpd.conf klasör yolu yok. @AamirR
Gem

Bu benim için çalıştı !!! Benimki daha garip bir konuydu. Bazı dosyalar PHP'yi oluştururken bazıları kod vermedi ve sadece görüntüledi.
sjw0525

4

ubuntu 14.04, apache 2.4, php 5.5.9 kurulumunda, / var / www / html (varsayılan belge kökü) üzerinde bir sample.php ile denedim ve tamam çalıştı. Yani sorun Sanal Sunucular yapılandırmamdaydı. Çözüm, .php dosyasını içeren Dizin def'sine şu satırı eklemekti:

    php_admin_flag engine on

ve bu satırı sanal sunucumun httpd.conf dosyasındaki Apache dosyasına nereye eklemeliyim? ve Webmin kullanıyorum
suresh pareek

4

Komut dosyasının içerdiğinden emin olun

<?php

kod çalıştırılmadan önce. Bunda <?ve phparasında boşluk olmamalıdır .


3

benzer bir sorun vardı ama benim durumumda çözüm farklıydı. php kodu tutan dosyama "somename.html" adı verildi "somename.php" olarak çalıştı iyi çalıştı


Bu da benim için çözdü. Herkes sever .pml bir .html dosyasında php yürütecek olup olmadığını biliyor veya yürütülecek php bir çizgi olduğunda biten dosya her zaman .php olarak değiştirilmesi gerekiyor mu?
full_prog_full

sunucu ayarlarına bağlıdır, çoğu durumda anyfile.html dosyasında bulunan php kodu yürütülür. ve eğer değilse, idk nasıl olsa da değiştirilebilir: P
Netrus

3

Php 7 çalıştıran yeni LAMP kurulumu için /etc/httpd/conf/httpd.conf dosyasını düzenleyin Not: bir şey değiştirmeden önce yedeklediğinizden emin olun.

Bunu dosyanın en altına yapıştırın:

<IfModule php7_module>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

Ardından, LoadModule'u arayın ve aşağıdaki satırı yapıştırın:

LoadModule php7_module modules/libphp7.so

Bu satır httpd'den php 7 modülünü yüklemesini isteyecek

Sonra httpd'yi yeniden başlatın


3

Şunu kullanarak php için yüklediğiniz tüm paketleri kontrol edin :

yum list installed | grep remi

Tüm ilgili php paketlerini, özellikle php-devel'i makinenize yükleyin .


2

Bu benim .htaccess'imdi

DirectoryIndex index.html index.htm

index.html PHP kodu içeriyordu. Varsayılan olarak, PHP htm * gibi uzantılara sahip dosyaları PHP kodu olarak işlemez.

.Htaccess öğesine aşağıdakileri ekleyerek bunu geçersiz kılabilirsiniz:

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

1

Sonuç yerine kod gösteren sorun, yerel ana gidiyor değil düşünüyorum. hangi adresi girdiğinizi yeniden kontrol edin. u yerel bir dosya dizinine veya yerel ana bilgisayara gidiyor.

Gönderilen ekran görüntüsü, bilgisayardan yerel ana bilgisayara değil.

"dosya: ///" "localhost /" olmalıdır


1

mcryptModülü yeniden kurmak benim için çalıştı.

$sudo apt-get install php5-mcrypt
$sudo php5enmod mcrypt

Dürüst olmak gerekirse, belki de PHP'yi sistemimde düzgün bir şekilde yapılandırmamış olduğum için yaptım.Ancak, aynı sorunla ilgili sorduğum soru bu sorunun bir kopyası olarak işaretlendiğinden, sadece burada cevap verebilirim. Acaba neden oy yok.
bg

Bu cevap linux ile ilgili konular starter açıkça windows kullanıyor
Raymond Nijland

1

Yanlışlıkla dosyaları dizinimi kökünden untaring başladı bir durum vardı. Tüm php engelleyecek benim dosyaları klasöründen .htaccess dosyasını ekledi

# If we know how to do it safely, disable the PHP engine entirely.
<IfModule mod_php5.c>
  php_flag engine off
</IfModule>

Alt satırda kök üzerindeki .htaccess dosyasını kontrol edin.


1

Bunun gibi bir yapılandırmanız varsa:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot "/var/www/example.com"

    <FilesMatch "\.php$">
        SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
</VirtualHost>

Httpd.conf dosyasındaki sonraki satırları kaldır

LoadModule proxy_module lib/httpd/modules/mod_proxy.so
LoadModule proxy_fcgi_module lib/httpd/modules/mod_proxy_fcgi.so

Benim için çalışıyor


1

AddType application/x-httpd-php .phpApache 2.4 kullanıyorsanız httpd.conf dosyanıza ekleyin


1

Sadece PHP 10'u Windows 10'da Apache 2.4 ile çalıştırmak için saatlerce harcadım . Sonunda benim için httpd.conf bir yazım hatası oldu LoadModule. Aracılığıyla yazma ve tam modül yoluna dikkat çekti son cevap bu apachelounge dizisindeki denny2018 . Teşekkür ederim!

İki geceden sonra keşfettim ... Dizinin yazıldı c:(küçük harf)

Ben vardı LoadModule php5_module "c:/php/php5apache2.dll"ama apache 2.4 için doğru :

LoadModule php5_module "C:/php/php5apache2_4.dll"

Bu yüzden de daha _4önce kaçırdım ( apache 2.4 için ). Benim için çalışan tam snippet:

# PHP
LoadModule php5_module "C:/php/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

PHP 7'yi denedim . Orada LoadModuleçizgi httpd.conf Apache 2.4 için okur

LoadModule php7_module "C:/php/php7apache2_4.dll"

Şu anda php manuel c:/php/php5apache2.dll hangi ayarlanması gerektiğini gösterir.


1

benim durumumda (Apache / 2.4.34),

belirli modülü açtıktan sonra

"LoadModule php7_module libexec / apache2 / libphp7.so"

itibaren

"/Etc/apache2/httpd.conf"

benim sorunum gitti.


1

Aynı sayfada olmamız durumunda aşağıdakileri yapın

sudo apt-get install php -y sudo apt-get install php-{bcmath,bz2,intl,gd,mbstring,mysql,zip,fpm} -y

Apache2'de PHP 7.2 FPM'yi etkinleştirmek için şunları yapın:

a2enmod proxy_fcgi setenvif

a2enconf php7.2-fpm

güncelleme 2: Apache oluşturma yerine .php dosyasını indirir

Ondan sonra yukarıda sayıldım. Gibi benzer sorular vardır bu .

Neden bilmiyorum ama bu sadece /var/www/html/kök klasöründeki .php dosyalarım için oldu . alt dizinler için her şey yolunda idi. (örneğin wordpress ve phpmyadmin iyi çalıştı)

İşte benim çözümüm. Php modülünü etkinleştirmeye karar verdim. bu yüzden bu komutu çalıştırdım:

a2enmod php7.2

ama bu hataları aldım:

Php7.2 için mpm_prefork bağımlılığı göz önüne alındığında: mpm_prefork için mpm_event çakışması dikkate alındığında: HATA: mpm_event modülü etkin - çakışmalar nedeniyle devam edemez. Önce devre dışı bırakılması gerekiyor! Mpm_prefork için mpm_worker çakışması göz önüne alındığında: HATA: php7.2 için mpm_prefork bağımlılığı etkinleştirilemedi, iptal edildi

bu yüzden aşağıdaki komutları çalıştırarak mpm'yi devre dışı bırakmaya karar verdim:

sudo a2dismod mpm_prefork
sudo a2dismod mpm_worker
sudo a2dismod mpm_event

sonra apache'yi yeniden başlatın:

systemctl restart apache2

sonra php7.2'yi (yüklü sürümüm) etkinleştirin:

sudo a2enmod php7.2

ve şu anda her şey yolunda gidiyor.


0

Bu sorunun bir başka olası nedeni, komut dosyasını UserDirmodülden bir "kullanıcı dizininde" çalıştırmaya çalışmanız olabilir . PHP dizinlerini kullanıcı dizinlerinde çalıştırmak varsayılan olarak devre dışıdır. Komut dosyası public_htmlana klasörünüzdeki dizinde bulunuyorsa ve bu klasöre 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. Alttaki etiket bloğunu yorumlamalı veya silmelisiniz

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

-1

/ var / www / html / dizinine koyduğunuz dosya çalışmazsa .php forexample example.php dosyasına sahip olmalıdır, ancak çalışmaz. example.php olarak değiştirirseniz çalışır.

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.