Kode PHP tidak dieksekusi, alih-alih kode muncul di halaman

320

Saya mencoba mengeksekusi beberapa kode PHP pada suatu proyek (menggunakan Dreamweaver) tetapi kode tersebut tidak dijalankan.

Ketika saya memeriksa kode sumber, kode PHP muncul sebagai tag HTML (saya bisa melihatnya di kode sumber). Apache berjalan dengan benar (saya bekerja dengan XAMPP), halaman PHP sedang dibuka dengan benar tetapi kode PHP tidak dieksekusi.

Apakah ada yang punya saran tentang apa yang terjadi?

Catatan: File sudah dinamaifilename.php

Edit: Kode ..:

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

Cetak

Gui
sumber
44
Apakah Anda menggunakan tag pendek, <?bukan <?php?
Dan Grossman
28
Jangan pernah menggunakan tag pendek. ( <?). Mereka sudah usang, tidak benar-benar bekerja di banyak tempat, dan sebaliknya sama sekali tidak perlu. Menyimpan tiga penekanan tombol bukan alasan yang valid untuk memungkinkan potensi kode Anda gagal pada setengah dari server yang mungkin dijalankan.
mopsyd
10
@ mopsyd Di mana dikatakan bahwa tag pendek sudah usang? Harap perhatikan bahwa tag pendek tidak sama dengan tag gema pendek , dan tag gema pendek telah didukung secara default sejak PHP 5.4, terlepas dari short_open_tagpengaturannya.
Kyle Anderson
5
Saya menyadari bahwa tag pendek bukan tag gema pendek, itulah sebabnya saya menentukan yang saya bicarakan di komentar. Pada saat penulisan, tag pendek ditandai sebagai penghentian untuk rilis php 6, meskipun itu tampaknya telah berubah sejak itu. Masalahnya masih ada bahwa banyak server menonaktifkannya, yang membuat kode Anda jauh lebih mudah dibawa-bawa. Ini tidak berlaku untuk tag gema pendek ( <?=), yang seharusnya berjalan dengan baik di php 5.4+ terlepas dari pengaturan server.
mopsyd
3
bicara konyol tentang tag pendek. Tag panjang menyedot dan mereka jelek. Saya tidak pernah punya masalah dalam 10 tahun pemrograman php. Mereka hampir tidak pernah menjadi masalah
Danial

Jawaban:

418

Kedengarannya ada sesuatu yang salah dengan konfigurasi Anda, berikut adalah beberapa hal yang dapat Anda periksa:

  1. Pastikan PHP diinstal dan dijalankan dengan benar. Ini mungkin terdengar konyol, tetapi Anda tidak pernah tahu. Cara mudah untuk memeriksa adalah dengan menjalankan php -vdari baris perintah dan melihat apakah mengembalikan informasi versi atau kesalahan.

  2. Pastikan modul PHP terdaftar dan dihapus di dalam httpd.conf Apache Anda. Ini harus seperti LoadModule php5_module "c:/php/php5apache2_2.dll"di file. Cari LoadModule php, dan pastikan tidak ada komentar ( ;) di depannya.

  3. Pastikan bahwa file httpd.conf Apache memiliki tipe PHP MIME di dalamnya. Ini harusnya seperti AddType application/x-httpd-php .php. Ini memberitahu Apache untuk menjalankan .phpfile sebagai PHP. Cari AddType, dan kemudian pastikan ada entri untuk PHP, dan itu tidak dikomentari .

  4. Pastikan file Anda memiliki .phpekstensi di atasnya, atau ekstensi mana pun yang ditentukan dalam definisi MIME dalam poin # 3, jika tidak maka file tersebut tidak akan dieksekusi sebagai PHP.

  5. Pastikan Anda tidak menggunakan tag pendek dalam file PHP ( <?), ini tidak diaktifkan pada semua server secara default dan penggunaannya tidak disarankan. Gunakan <?phpsebaliknya (atau aktifkan tag pendek di php.ini Anda dengan short_open_tag=Onjika Anda memiliki kode yang bergantung pada mereka).

  6. Pastikan Anda mengakses file Anda melalui server web Anda menggunakan URL seperti http://localhost/file.phptidak melalui akses file lokalfile://localhost/www/file.php

Dan terakhir periksa manual PHP untuk tips pengaturan lebih lanjut .

shmeeps
sumber
14
Tidak tahu mengapa, tetapi penginstal PHP 5.3.15 tidak menambahkan baris AddType application/x-httpd-php .php. Terima kasih banyak!!
MatuDuke
7
@shmeeps: Di mana Anda melihat bahwa tag pendek sudah usang? Saya telah melakukan beberapa pencarian dan hanya dapat menemukan rekomendasi yang menentang mereka, tidak ada tentang penghinaan. Diberikan untuk aplikasi yang akan didistribusikan, lebih baik menggunakan <? Php seandainya server hosting tidak mengaktifkannya, tetapi untuk aplikasi di mana Anda memiliki kontrol penuh atas server mereka akan berada di saya tidak lihat alasan apa pun untuk tidak menggunakannya.
ClarkeyBoy
3
titik no 6 bekerja untuk saya .. akses lokal tidak menggunakan server apache
KawaiKx
6
poin 2 bekerja untuk saya dengan cara yang aman -apt-get purge apache2; apt-get install apache2 libapache-mod-php5
ulkas
1
@full_prog_full Cobalah mengunggah file dengan .phpekstensi dengan konten <?php echo("Success"); ?>dan melihat apakah mengakses file melalui browser web menghasilkan "Sukses" yang ditampilkan tanpa kode PHP yang terkait.
shmeeps
61

php7:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.0-fpm
sudo service apache2 restart
sj59
sumber
24
Sementara potongan kode ini dapat menyelesaikan pertanyaan, termasuk penjelasan tentang bagaimana dan mengapa ini menyelesaikan masalah akan sangat membantu untuk meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, bukan hanya orang yang bertanya sekarang! Harap edit jawaban Anda untuk menambahkan penjelasan, dan berikan indikasi batasan dan asumsi apa yang berlaku.
Toby Speight
4
Jawaban ini terkait dengan linux, karena topikstarter jelas menggunakan windows.
Raymond Nijland
3
@RaymondNijland benar tetapi ini kanonik dan saya menemukan pertanyaan ini dan menyelamatkan saya setelah lebih dari satu jam pemecahan masalah.
Angsa
Bagaimana dan Mengapa: Ini terjadi ketika PHP7 tidak mengkonfigurasi layanan fast-CGI default di skrip make. sudo a2enmod proxy_fcgi setenvifmembuat tiga mod baru /mods-available/proxy.conf proxy_fcgi.load proxy.loadDemikian juga, sudo a2enconf php7.0-fpmmembuat file config /conf-available/php7.0-fpm.confSetelah ini selesai dan Apache2 kemudian dapat menjalankan modul PHP7 sebagai layanan CGI cepat.
Talvi Watia
33

Saya menjalankan Apache di Ubuntu dan masalah saya adalah bahwa /etc/apache2/mods-available/php5.conffile tersebut tidak ada:

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

Saya menambahkannya kembali dan php mem-parsing file php dengan benar.

Matt McDonald
sumber
31

perhatikan untuk pengguna php 7, tambahkan ini ke file httpd.conf Anda:

# 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>
EdC
sumber
4
Hanya untuk membantu orang lain dengan masalah ini. The httpd.conffile terletak di /etc/apache2/httpd.confJika Anda menggunakan Ubuntu, akan apache2.confdi direktori yang sama bahwa kebutuhan akan dimodifikasi untuk PHP7.
Ahmed Sagarwala
23

Saya menemukan masalah lain yang menyebabkan masalah ini dan sudah menyelesaikannya. Saya tidak sengaja menyimpan skrip saya dalam UTF-16penyandian. Tampaknya PHP5 tidak dapat mengenali <?phptag dalam penyandian 16 bit secara default.

Arrvi
sumber
18

Saya memposting jawaban ini karena antarmuka admin Virtualmin / Webmin saya memutuskan untuk menonaktifkan mesin PHP saya .. butuh beberapa saat untuk menemukan solusinya, jadi saya pikir saya akan membaginya dengan kalian:

Juga, pastikan untuk memeriksa bahwa tidak ada file konfigurasi situs web Anda yang terkait dengan host atau virtualhost khusus ini memiliki php_admin_value di dalamnya yang mematikan PHP, seperti ini:

php_admin_value engine Off

Saat ragu, komentari ...

# php_admin_value engine Off

Dan restart server web Anda.

Henry van Megen
sumber
1
Di mana sebenarnya pengaturan konfigurasi ini?
cronoklee
2
@cronoklee Dalam pengaturan vHost dari httpd.conf. Untuk host yang ada, Anda perlu mengedit konfigurasi apache di webmin. Untuk host masa depan, buka virtualmin> template server> situs web apache. Bagaimanapun, ini tidak seaman fastcgi - default virtualmin. Jadi pendekatan yang benar seharusnya untuk memecahkan masalah mengapa fcgi tidak berfungsi, misalnya itu mungkin disebabkan oleh izin file.
Sheepy
Jika Anda menggunakan versi Apache yang tidak memiliki httpd.conf, lihat /etc/apache2/mods-enabled/php7.confatauphp5.conf
Sam Malayek
Jika ragu tentang lokasi pengaturan konfigurasi tertentu, Anda selalu dapat menggunakan grep untuk menemukan apa yang Anda cari (misalnya dalam kasus ini) mengetik:sudo grep php_admin_value /etc/* -R
Henry van Megen
17

Anda hanya membuka file php Anda ke browser. Anda harus membukanya menggunakan url localhost. jika Anda membuka file langsung dari direktori Anda, itu tidak akan mengeksekusi kode php dalam hal apa pun.

gunakan: http://locahost/index.phpatauhttp:127.0.0.1/index.php

Aktifkan kode pendek php. Dalam kasus Anda, Anda menggunakan<? kode pendek php untuk <?php. Secara default kode pendek php dinonaktifkan.

Juga gunakan: sudo apt-get install php5 libapache2-mod-php5 php5-mcryptjika Anda adalah pengguna ubuntu.

Hasan Baig
sumber
1
Mengapa mcrypt diperlukan saat saya hanya memasukkan file? Anda harus memperhatikan bahwa pertanyaan ini sudah tua dan masalah tag pendek disebutkan 16 kali, juga di komentar teratas pertanyaan saya.
Gui
1
Saya hanya membagikan solusi saya, saya juga menghadapi kesalahan yang sama dan setelah mengeksekusi perintah mcrypt masalah saya terpecahkan. Anda juga dapat mencoba.
Hasan Baig
secara default kode pendek php diaktifkan. short_open_tag = Aktif (Nilai Default = AKTIF) di php 5.6
zond
Ini adalah masalah saya, konfigurasi virtualmin / apache saya adalah untuk 127.0.0.2 tetapi saya meletakkan alamat ip eksternal saya di browser, saya baru saja memperbarui v / konfigurasi saya dan sekarang berfungsi
Hayden Thring
Saya baru saja melewatkan libapache2-mod-php7.3.
dxvargas
8

Saya tahu itu terdengar konyol ... tetapi jarang itu terjadi.

Periksa apakah Anda mencoba menjalankan php dari

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

dan bukan dari

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

ps> Anda dapat memperhatikan bahwa jika Anda menulis dari shell

php info.php 

itu menjawab dengan kode (artinya fungsi php) ..

pengguna3257072
sumber
PHP berfungsi dengan baik (dicentang menggunakan baris perintah). tetapi, ketika saya mengakses file menggunakan URL, itu menunjukkan kode PHP.
muaaz
8

Ini baru saja terjadi pada saya lagi, bersama dengan server mengunduh file html, daripada memproses. Saya belum pernah menggunakan apache server web untuk beberapa waktu di komputer dan sementara itu Ubuntu diperbarui seperti dua versi lagi dari LTS yang awalnya diinstal. Sekarang sudah

$ cat /etc/issue
Ubuntu 16.04 LTS

Jadi, php berfungsi setelahnya:

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

Server web sekarang mem-parsing php. Mungkin sekarang harus memperbarui beberapa web karena php7.0 sekarang berjalan di mana seperti sebelum menjalankan php5. Baiklah.

ndasusers
sumber
5

Saya telah menyelesaikan ini dengan menghapus XAMPP, dan menginstal WAMP. Terima kasih untuk bantuannya.

Gui
sumber
Saya xampp tetapi berfungsi dengan baik. apakah Anda menemukan mengapa itu menunjukkan kode php @Gui
Pie
5

Saya menghadapi masalah ini di php 7.1 yang datang dengan High Sierra (OS X 10.13.5), mengedit /etc/apache2/httpd.confdengan perubahan berikut membantu:

  1. Batalkan komentar pada baris ini

    LoadModule php7_module libexec/apache2/libphp7.so
  2. Tempel berikut di akhir

    <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>
AamirR
sumber
Seperti sama dapat Anda tolong menyarankan kesalahan Wamp 3 versi yang sama. Tidak ada jalur folder /etc/apache2/httpd.conf di wamp 3. @AamirR
Permata
Ini berhasil untuk saya !!! Milik saya adalah masalah yang lebih aneh. Beberapa file membuat PHP dan yang lainnya tidak dan hanya menampilkan kode.
sjw0525
4

pada Ubuntu 14.04 saya, apache 2.4, instal php 5.5.9, saya mencoba dengan sample.php di / var / www / html (default document root) dan berhasil ok. Jadi masalahnya adalah pada konfigurasi Server Virtual saya. Solusinya adalah untuk memasukkan, pada direktori Def berisi .php, baris ini:

    php_admin_flag engine on
Rogelio Triviño
sumber
dan di mana saya harus menambahkan baris ini dalam file Apache di httpd.conf dari server virtual saya? dan saya menggunakan Webmin
suresh pareek
4

Pastikan skrip berisi

<?php

sebelum kode yang harus dieksekusi. Seharusnya tidak ada ruang antara <?dan phpdalam hal ini.

Barmar
sumber
3

Saya memiliki masalah serupa tetapi dalam solusi kasus saya berbeda. file saya yang menyimpan kode php disebut "somename.html" mengubahnya menjadi "somename.php" bekerja dengan baik

Netrus
sumber
Ini juga menyelesaikannya untuk saya. Adakah yang tahu jika server akan mengeksekusi php dalam file .html atau apakah akhiran file selalu harus diubah menjadi .php ketika ada baris php yang harus dieksekusi?
full_prog_full
tergantung pada pengaturan server, untuk sebagian besar kasus kode php yang ada di anyfile.html akan dieksekusi. dan jika tidak, itu bisa diubah, meskipun idk caranya: P
Netrus
3

Untuk pengaturan baru LAMP yang menjalankan php 7 edit file /etc/httpd/conf/httpd.conf Catatan: pastikan untuk membuat cadangan untuk itu sebelum mengubah apa pun.

Rekatkan ini di bagian paling bawah file:

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

Kemudian, cari LoadModule dan rekatkan baris berikut:

LoadModule php7_module modules/libphp7.so

Baris ini hanya akan meminta httpd untuk memuat modul php 7

Kemudian mulai kembali httpd

Eric Libay
sumber
3

Periksa semua paket yang telah Anda instal untuk php menggunakan:

yum list installed | grep remi

Instal semua paket php yang relevan , terutama php-devel di mesin Anda.

Chaitanya Shivade
sumber
2

Ini ada di .htaccess saya

DirectoryIndex index.html index.htm

index.html berisi kode PHP. Secara default, PHP tidak akan memproses file dengan ekstensi seperti htm * sebagai kode PHP.

Anda dapat mengesampingkan ini, dengan menambahkan berikut ini ke .htaccess:

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

Saya pikir masalahnya menunjukkan kode alih-alih hasilnya adalah tidak menuju ke host lokal. periksa kembali alamat Anda. Anda akan pergi ke direktori file lokal atau ke host lokal.

dari screenshot yang Anda kirim itu akan komputer Anda tidak ke localhost.

"file: ///" seharusnya "localhost /"

Nav
sumber
1

Menginstal ulang mcryptmodul berfungsi untuk saya.

$sudo apt-get install php5-mcrypt
$sudo php5enmod mcrypt
bg
sumber
Jujur saja, mungkin karena saya belum mengkonfigurasi PHP dengan benar di sistem saya. Tetapi, karena pertanyaan yang saya ajukan mengenai masalah yang sama telah ditandai sebagai duplikat untuk pertanyaan ini, saya hanya bisa menjawabnya di sini. Saya heran mengapa suara turun.
bg
Jawaban ini berkaitan dengan linux, topicstarter jelas menggunakan windows
Raymond Nijland
1

Saya punya kasus yang secara tidak sengaja saya mulai membuka direktori file saya di root. Itu menambahkan file .htaccess dari folder file saya yang akan memblokir semua php

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

Intinya periksa file .htaccess pada root.

albertski
sumber
1

Jika Anda memiliki konfigurasi seperti ini:

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

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

Batalkan komentar pada baris berikutnya di httpd.conf Anda

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

Ini bekerja untuk saya

pengguna3890355
sumber
1

Tambahkan AddType application/x-httpd-php .phpke file httpd.conf Anda jika Anda menggunakan Apache 2.4

Ashahmali
sumber
1

Hanya menghabiskan waktu berjam-jam untuk mencoba menjalankan PHP 5 dengan Apache 2.4 di Windows 10 . Akhirnya bagi saya itu adalah salah ketik di httpd.conf LoadModule . Menarik perhatian untuk menulis dan jalur modul yang tepat melalui jawaban terakhir di utachelounge utas denny2018 ini . Terima kasih!

Setelah dua malam saya menemukan ... Direktori saya ditulis c:(huruf kecil)

Saya telah LoadModule php5_module "c:/php/php5apache2.dll"tetapi benar untuk apache 2.4 adalah:

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

Jadi saya juga melewatkan _4sebelumnya (untuk apache 2.4 ). Cuplikan lengkap yang berfungsi untuk saya:

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

Baru saja mencoba PHP 7 . Ada LoadModulebaris di httpd.conf untuk Apache 2.4 berbunyi

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

Saat ini manual php muncul c:/php/php5apache2.dll yang tentu saja perlu disesuaikan.

gelembung berbandul
sumber
1

dalam kasus saya (Apache / 2.4.34),

setelah menghapus komentar modul tertentu

"LoadModule php7_module libexec / apache2 / libphp7.so"

dari

"/etc/apache2/httpd.conf"

masalah saya telah hilang.

sh6210
sumber
1

Jika kita berada di halaman yang sama lakukan berikut

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

Untuk mengaktifkan PHP 7.2 FPM di Apache2 lakukan:

a2enmod proxy_fcgi setenvif

a2enconf php7.2-fpm

pembaruan 2: Apache mengunduh file .php alih-alih render

Setelah itu, saya menghadapi masalah di atas. Ada pertanyaan serupa seperti ini .

Saya tidak tahu mengapa, tetapi itu hanya terjadi pada file .php saya di /var/www/html/folder root. semuanya baik-baik saja untuk sub-direktori. (misalnya wordpress dan phpmyadmin berfungsi dengan baik)

Jadi, inilah solusi saya. Saya memutuskan untuk mengaktifkan modul php. jadi saya menjalankan perintah ini:

a2enmod php7.2

tapi saya mendapat kesalahan ini:

Mempertimbangkan ketergantungan mpm_prefork untuk php7.2: Mempertimbangkan konflik mpm_event untuk mpm_prefork: ERROR: Modul mpm_event diaktifkan - tidak dapat dilanjutkan karena konflik. Perlu dinonaktifkan terlebih dahulu! Mempertimbangkan konflik mpm_worker untuk mpm_prefork: ERROR: Tidak dapat mengaktifkan dependensi mpm_prefork untuk php7.2, batalkan

jadi saya memutuskan untuk menonaktifkan mpm dengan menjalankan perintah berikut:

sudo a2dismod mpm_prefork
sudo a2dismod mpm_worker
sudo a2dismod mpm_event

lalu mulai ulang apache:

systemctl restart apache2

kemudian aktifkan php7.2 (versi instal saya):

sudo a2enmod php7.2

dan sekarang semuanya bekerja dengan baik.

AmirRezaM75
sumber
1

Kemungkinan penyebab lain dari masalah ini adalah Anda mencoba menjalankan skrip di "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 rumah Anda dan Anda mencoba mengaksesnyahttp://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
-1

file yang Anda masukkan ke / var / www / html / harus memiliki .php forexample example.php jika itu contohnya tidak berfungsi tetapi jika Anda mengubahnya ke example.php berfungsi.

yasin lachini
sumber