PHP kodu yürütülmüyor, bunun yerine sayfada kod gösteriliyor
Bir projede (Dreamweaver kullanarak) bazı PHP kodunu çalıştırmaya çalışıyorum ancak kod çalıştırılmıyor.
Kaynak kodunu kontrol ettiğimde, PHP kodu HTML etiketleri olarak görünüyor (bunu kaynak kodda görebiliyorum). Apache düzgün çalışıyor (XAMPP ile çalışıyorum), PHP sayfaları düzgün açılıyor, ancak PHP kodu çalıştırılmıyor.
Birisinin neler olduğuna dair bir önerisi var mı?
Not: Dosya zaten şu şekilde adlandırılmıştır:filename.php
Düzenleme: Kod ..:
<?
include_once("/code/configs.php");
?>
Yanıtlar
Yapılandırmanızla ilgili bir sorun var gibi görünüyor, işte kontrol edebileceğiniz birkaç şey:
PHP'nin doğru kurulduğundan ve çalıştığından emin olun. Bu aptalca gelebilir, ama asla bilemezsiniz. Kontrol etmenin kolay bir yolu
php -v
, bir komut satırından çalıştırmak ve sürüm bilgisi veya herhangi bir hata döndürüp döndürmediğini görmektir.PHP modülünün Apache'nizin httpd.conf dosyasında listelendiğinden ve yorumlanmadığından emin olun. Bu
LoadModule php5_module "c:/php/php5apache2_2.dll"
, dosyadaki gibi olmalıdır . AraLoadModule php
ve emin hiçbir yorum (bulunduğundan emin olun;
onun önünde).Apache'nin httpd.conf dosyasında PHP MIME türünün bulunduğundan emin olun. Bu gibi bir şey olmalı
AddType application/x-httpd-php .php
. Bu, Apache'ye.php
dosyaları PHP olarak çalıştırmasını söyler . Emin orada PHP için bir giriştir, yapmak sonra AddType ara ve ve uncommented olduğunu .Dosyanızın üzerinde
.php
uzantının bulunduğundan veya 3. maddede MIME tanımında belirtilen uzantıya sahip olduğundan emin olun , aksi takdirde PHP olarak çalıştırılmayacaktır.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<?php
yerine (veya php.ini kısa etiketleri etkinleştirmek ileshort_open_tag=On
onlara bağlı kodu varsa).Dosyanıza,
http://localhost/file.php
yerel dosya erişimi gibi bir URL kullanarak web sunucunuz üzerinden eriştiğinizden emin olun.file://localhost/www/file.php
Ve son olarak , diğer kurulum ipuçları için PHP kılavuzunu kontrol edin .
php7:
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.0-fpm
sudo service apache2 restart
Apache'yi Ubuntu'da çalıştırıyorum ve benim sorunum /etc/apache2/mods-available/php5.conf
dosyanın eksik olmasıydı:
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
Tekrar ekledim ve php, php dosyalarını doğru bir şekilde ayrıştırıyordu.
php 7 kullanıcıları için not, bunu 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>
Bu soruna neden olan başka bir sorun buldum ve zaten çözdüm. Komut dosyamı yanlışlıkla UTF-16
kodlamaya kaydettim . Öyle görünüyor ki PHP5 <?php
varsayılan olarak 16 bit kodlamada etiketi tanıyamıyor .
Bu yanıtı 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ü bulmam biraz zaman aldı, bu yüzden sizlerle paylaşmayı düşündüm:
Ayrıca, bu belirli ana bilgisayar veya sanal ana bilgisayar ile ilgili web sitesi yapılandırma dosyalarınızın hiçbirinin içinde PHP'yi kapatan php_admin_value içermediğinden emin olun, örneğin:
php_admin_value engine Off
Şüphe duyduğunuzda yorum yapın ...
# php_admin_value engine Off
Ve web sunucunuzu yeniden başlatın.
Sadece php dosyanızı tarayıcıya açıyorsunuz. Localhost url kullanarak açmalısınız. Bir dosyayı doğrudan dizininizden açarsanız, hiçbir durumda php kodunu çalıştırmayacaktır.
kullanım: http://locahost/index.php
veyahttp:127.0.0.1/index.php
Php kısa kodunu etkinleştirin. Sizin durumunuzda, <?
hangi php için kısa kod kullanıyorsunuz <?php
. Varsayılan olarak php kısa kodları devre dışı bırakılır.
Ayrıca şunu kullanın: sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt
ubuntu kullanıcısıysanız.
Kulağa aptalca geleceğini biliyorum ... ama nadiren oluyor.
Php'yi çalıştırmaya çalışıp çalışmadığınızı kontrol edin
**http://localhost/info.php**
ve şuradan değil
file:///var/www/info.php
ps> kabuktan yazarsanız fark edebilirsiniz.
php info.php
kodla cevap verir (php fonksiyonları anlamına gelir) ..
Bu, sunucunun işlemden ziyade html dosyalarını indirmesiyle birlikte yine başıma geldi. Bilgisayarda bir süre web sunucusu apache kullanmadım ve bu arada Ubuntu, orijinal olarak yüklenmiş LTS'den iki sürüm daha gibi güncellendi. Şimdi öyle
$ cat /etc/issue
Ubuntu 16.04 LTS
Bu yüzden php şöyle çalıştı:
$ sudo apt-get install lamp-server^
$ sudo a2enmod php7.0 $ sudo service apache2 restart
Web sunucusu şimdi php'yi ayrıştırıyordu. Belki şimdi php7.0 php5'i çalıştırmadan önceki haliyle çalıştığı için bazı web'leri güncellemeliyiz. Oh iyi.
Bunu XAMPP'yi kaldırarak ve WAMP'ı yükleyerek çözdüm. Yardım için teşekkürler.
Bu sorunla High Sierra (OS X 10.13.5) ile birlikte gelen php 7.1'de karşılaştım, /etc/apache2/httpd.conf
aşağıdaki değişikliklerle düzenleme yardımcı oldu:
Bu satırın açıklamasını kaldır
LoadModule php7_module libexec/apache2/libphp7.so
Sonuna aşağıdakileri 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> </IfModule>
ubuntu 14.04, apache 2.4, php 5.5.9 kurulumumda / var / www / html (varsayılan belge kökü) üzerinde bir sample.php ile denedim ve sorunsuz çalıştı. Yani sorun Sanal Sunucular yapılandırmamdaydı. Çözüm, .php içeren Dizin tanımına şu satırı eklemekti:
php_admin_flag engine on
Komut dosyasının içerdiğinden emin olun
<?php
çalıştırılması gereken koddan önce. Bunun arasında <?
ve php
arasında boşluk olmamalıdır .
Benzer bir problemim vardı ama benim durumumda çözüm farklıydı. bekletilen php kodu denilen bu benim dosya "somename.html" olarak değiştirdim "somename.php" çalıştı cezası
Php 7 çalıştıran LAMP'ın yeni kurulumu için /etc/httpd/conf/httpd.conf dosyasını düzenleyin Not: herhangi bir şeyi 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 öğesini arayın ve aşağıdaki satırı yapıştırın:
LoadModule php7_module modules/libphp7.so
Bu satır sadece httpd'den php 7 modülünü yüklemesini isteyecektir
Ardından httpd'yi yeniden başlatın
Aşağıdaki komutları kullanarak php için kurduğunuz tüm paketleri kontrol edin :
yum list installed | grep remi
Tüm ilgili php paketlerini, özellikle php-devel'i makinenize kurun.
Bu .htaccess'imdeydi
DirectoryIndex index.html index.htm
index.html, PHP kodunu içeriyordu. Varsayılan olarak, PHP, PHP kodu olarak htm * gibi uzantılara sahip dosyaları işlemez.
.Htaccess'e aşağıdakileri ekleyerek bunu geçersiz kılabilirsiniz:
<FilesMatch ".+\.html$">
SetHandler application/x-httpd-php
</FilesMatch>
AddType application/x-httpd-php .php
Apache 2.4 kullanıyorsanız httpd.conf dosyanıza ekleyin
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ıdaki sorunla karşılaştım. Gibi benzer sorular vardır bu .
Nedenini bilmiyorum ama sadece /var/www/html/
kök klasördeki .php dosyalarım için oldu . alt dizinler için her şey yolundaydı. (örneğin wordpress ve phpmyadmin iyi çalıştı)
İşte benim çözümüm. Php modülünü etkinleştirmeye karar verdim. bu yüzden şu 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ı düşünülüyor: HATA: mpm_event modülü etkinleştirildi - çakışmalar nedeniyle devam edemiyor. Önce devre dışı bırakılması gerekiyor! Mpm_prefork için mpm_worker çakışması düşünülüyor: HATA: php7.2 için mpm_prefork bağımlılığı etkinleştirilemedi, iptal ediliyor
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 etkinleştirin (yüklü sürümüm):
sudo a2enmod php7.2
ve şu anda her şey yolunda gidiyor.
Bu sorunun bir başka olası nedeni, komut dosyasını UserDir
modü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_html
ana 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
. Alt kısımda yazan etiket bloğuna yorum yapmalı veya silmelisiniz
<IfModule mod_userdir.c>
<Directory /home/*/public_html>
php_admin_flag engine Off
</Directory>
</IfModule>
Bence sonuç yerine kodu göstermesindeki sorun yerel ana bilgisayara gitmemesi. hangi adrese gireceğinizi yeniden kontrol edin. Yerel bir dosya dizinine mi yoksa yerel ana bilgisayara mı gidiyorsunuz?
gönderdiğiniz ekran görüntüsünden localhost'a değil, bilgisayarınıza gidecek.
"file: ///" "localhost /" olmalıdır
mcrypt
Modülü yeniden kurmak benim için çalıştı.
$sudo apt-get install php5-mcrypt $sudo php5enmod mcrypt
Dosyalarımın dizinini yanlışlıkla kök dizininde kaldırmaya başladığım bir durumla karşılaştım. Tüm php'yi engelleyecek dosyalar klasörümden .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ökteki .htaccess dosyasını kontrol edin.
Böyle bir konfigürasyona sahipseniz:
<VirtualHost *:80>
ServerName example.com
DocumentRoot "/var/www/example.com"
<FilesMatch "\.php$">
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
</VirtualHost>
Httpd.conf dosyanızın sonraki satırlarının açıklamasını kaldırın
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
Windows 10'da PHP 5'i Apache 2.4 ile çalıştırmak için saatler harcadım . Sonunda benim için httpd.conf'ta bir yazım hatasıydı 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 ... Rehberim yazıldı
c:
(küçük harf)
Apache 2.4 için vardı LoadModule php5_module "c:/php/php5apache2.dll"
ama doğru olan :
LoadModule php5_module "C:/php/php5apache2_4.dll"
Bu yüzden öncekini de kaçırdım _4
( apache 2.4 için ). Benim için çalışan tam pasaj:
# PHP
LoadModule php5_module "C:/php/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
Az önce 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 el kitabı, c:/php/php5apache2.dll
hangisinin ayarlanması gerektiğini göstermektedir.
benim durumumda (Apache / 2.4.34),
belirli modülün yorumunu kaldırdıktan sonra
"LoadModule php7_module libexec / apache2 / libphp7.so"
itibaren
"/etc/apache2/httpd.conf"
sorunum gitmişti.
Apache sunucusunu yeniden başlatmayı deneyin. Bu yaptığım hataydı - php'yi kurduktan sonra sunucuyu yeniden başlatmayı unutmak!
service httpd restart
Benim durumumda php modülü yüklenmedi. Bunu dene:
- Yüklü olan modüller kontrol edin:
apache2ctl -M
. Gibi modül arayınphp7_module (shared)
- Listede php modülü yoksa, php sürümünüze karşılık gelen modülü yüklemeyi deneyin. Benim durumumda php paketi
libapache2-mod-php7.3
. Ben de yaptım:a2enmod php7.3
ve sorun çözüldü.