Apache แสดงโค้ด PHP แทนการเรียกใช้งาน


109

ฉันเพิ่งพยายามติดตั้ง PHP และ Apache บนคอมพิวเตอร์ของฉัน หลังจากผ่านไปหลายชั่วโมงระบบจะติดตั้ง ฉันได้แก้ไขไฟล์ httpd.conf และ php.ini เหมือนที่ทุกคนพูด จากนั้นฉันก็สร้างสคริปต์ PHP ง่ายๆ:

<?php phpinfo(); ?>

แต่เมื่อฉันพยายามเรียกใช้มันhttp://127.0.0.1/phpinfo.phpแสดงเพียงแค่ซอร์สโค้ดแทนที่จะเรียกใช้งาน ฉันใช้ Apache 2, PHP 5 และ Windows Vista

เส้นที่แก้ไข:

PHP.INI:

short_open_tag = On

HTTPD.CONF

LoadModule php5_module "C:/php/php5apache2_2.dll"
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
PHPIniDir "C:/php"

ใน phpinfo.php คุณได้เพิ่มส่วนหัวที่ทำให้ไฟล์. php สามารถอ่านได้หรือไม่?

@Peteris ไม่มีสคริปต์ทั้งหมดของฉันอยู่ในคำถามของฉัน
อิมัลชั่น

ลองใช้สคริปต์ง่ายๆ: <?php echo "Hello world"; ?>แสดง Hello world หรือไม่ ถ้ามันแสดงรหัสแล้ว @RabNawaz บอกว่าเซิร์ฟเวอร์ของคุณไม่ได้กำหนดค่าอย่างถูกต้อง!

เพียงแค่แสดงรหัสอีกครั้ง :(
imulsion

1
คุณกำลังเข้าถึงไฟล์ php ของคุณจากที่ใด โปรดทราบว่าในการเรียกใช้ไฟล์ php โดยเซิร์ฟเวอร์ของคุณคุณต้องใส่ไฟล์ของคุณในไดเรกทอรีรากของเว็บที่เหมาะสม และเข้าถึงได้ในเว็บเบราเซอร์ของคุณเป็นhttp://localhost/หรือhttp://127.0.0.1/
อิบราฮิมอัซฮัร Armar

คำตอบ:


91

คุณต้องเปิดใช้งาน php! ตรวจสอบโฟลเดอร์mods-enabledในไดเร็กทอรี Apache (ค่าเริ่มต้น :) /etc/apache2/เพื่อดูว่าคุณพบไฟล์ชื่อphp. ผมจำไม่ได้ขยาย .soแต่ฉันคิดว่ามันเป็น

ตรวจสอบใน/var/log/apache2/error.logเพื่อดูว่าคุณมีข้อผิดพลาดอื่น ๆ หรือไม่


8
คุณเคยเรียกใช้: a2enmod php5
Daniel Figueroa

6
ไม่มีโฟลเดอร์ mods_enabled ในไดเรกทอรี apache ของฉัน
imulsion

@imulsion ในกรณีของฉันมันเปิดใช้งาน mods ภายใต้ / etc / apache2 /
Silveri

6
ในกรณีของฉันสำหรับ php7 ฉันต้องทำa2enmod php7.0และมันช่วยแก้ปัญหาของฉันได้ ใช้เวลาทั้งวันกว่าจะมาถึงโพสต์นี้!
Rorschach

3
ไม่มีไฟล์ที่ถูกเรียกphpในmods-enabledตอนนี้คืออะไร? คำตอบนี้ไม่ได้อธิบายสิ่งต่างๆ
Black

63

ว้าวมีทางออกมากมายที่นี่! นี่คือสิ่งที่ฉันทำบนUbuntu 16.04 :

sudo apt-get install php libapache2-mod-php
sudo a2enmod mpm_prefork && sudo a2enmod php7.0
sudo service apache2 restart

ทำงานให้ฉันด้วยการเพิ่ม--reinstallapt-get การติดตั้งโมดูล php / apache อาจสกปรก
Glastis

สิ่งนี้ใช้ได้ผลสำหรับฉันบนเซิร์ฟเวอร์ Ubuntu 16.04 ของ Digital Ocean ขอบคุณ
Sushant Bhargav

นี้จะช่วยให้ฉันข้อผิดพลาดต่อไปนี้: Considering conflict php5 for php7.0, Considering conflict mpm_worker for mpm_preforkฯลฯ ... และเริ่มต้นใหม่ apache2 ล้มเหลว
mrid

หากคุณConsidering conflict php5 for php7.2ไปที่/etc/apache2/mods-availableและลบphp5.*
Simon Epskamp

39

สำหรับ PHP 7 (อาจใช้กับเวอร์ชันก่อนหน้าด้วย) แต่ฉันต้องทำสิ่งนี้:

เพิ่มสิ่งนี้ที่ด้านล่างของ /etc/apache2/apache2.conf

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

เรียกใช้สิ่งนี้จากเทอร์มินัล:

sudo a2dismod mpm_event && sudo a2enmod mpm_prefork && sudo a2enmod php7

จากนั้นอย่าลืมรีสตาร์ท Apache เพื่อให้รู้ว่าคุณเปลี่ยนสิ่งต่างๆ:

sudo service apache2 restart

นี่คือบทสรุปจาก: https://www.atlantic.net/community/howto/try-php7-lamp-ubuntu-14-04/


3
ฉันต้องทำสิ่งนี้สำหรับ PHP 5.6 บน OSX El Capitan (ใช้ stock apache แต่ homebrew php56)
rfay

1
ใช้งานได้กับ Windows ด้วย (หมายความว่าคุณไม่ต้องเรียกใช้คำสั่งเทอร์มินัลบน Windows) ขอบคุณที่ช่วยฉันค้นหาไม่รู้จบ
che-azeh

เมื่อติดตั้งจากแหล่งที่มาจำเป็นต้องมีการจับคู่ไฟล์นี้ (config และ make etc. เปิดใช้งานโมดูลใน httpd.conf สำหรับฉัน แต่ไม่ได้เพิ่มอันนี้)
user7296055

มีความคิดเห็นเป็นพันล้านความคิดเห็นในไฟล์ httpd.conf ตัวอย่าง ใครสามารถอธิบายได้ว่าทำไมไม่มี php? ไม่ใช่สิ่งที่ไม่ค่อยได้ใช้
Danial

@Danial httpd.apache.org/support.htmlมีวิธีการจำนวนหนึ่งที่คุณสามารถค้นหาเอกสารรายงานข้อบกพร่องและถามคำถาม (เช่นทำไมไม่มีตัวอย่างที่ดีในการใช้ PHP ใน httpd.conf?)
RyanNerd

24

เปิดไฟล์

/etc/apache2/httpd.conf

และการเปลี่ยนแปลง

#LoadModule php5_module libexec/apache2/libphp5.so

เป็น

LoadModule php5_module libexec/apache2/libphp5.so

ดังนั้นเพียงแค่ยกเลิกการโหลดโมดูล PHP httpd.conf


ในกรณีของฉันบรรทัดเริ่มต้นด้วย php7_module - แต่อย่างอื่นมันใช้ได้กับฉัน!
b0rgBart3


6

คำตอบอื่นที่ได้ผลสำหรับฉัน คือการติดตั้ง[sudo] apt-get install libapache2-mod-php5.X


1
ของฉันก็คล้ายกัน ฉันทำการ "sudo apt-cache search ^ libapache2 | grep php" ซึ่งพบแพ็คเกจที่เกี่ยวข้องจากนั้นติดตั้ง "sudo apt-get install libapache2-mod-php" libapache2-mod-php7.0 ถูกติดตั้งแล้ว
VectorVortec

4

Apache แสดงรหัส php แทนการดำเนินการแก้ไขปัญหา

1. เปิด php5.6 conf หรือ php7.x conf

# คำสั่งต่อไปนี้:

$ sudo vi /etc/apache2/mods-enabled/php5.6.conf

2. แสดงความคิดเห็นต่อไปนี้

ป้อนคำอธิบายภาพที่นี่

3. รีสตาร์ทเซิร์ฟเวอร์

$ sudo service apache2 รีสตาร์ท

4 สนุก :)


3

เอาล่ะถ้าคุณได้ลองสิ่งที่คุณได้บอกไว้ข้างต้นหรือก่อนหน้านี้ (ซึ่งเป็นสาเหตุที่เป็นไปได้) และมันยังคงแสดงรหัสแทนที่จะดำเนินการมันมีสิ่งหนึ่งที่คุณทำผิดที่ยังไม่ได้รับการแก้ไข URL ที่คุณใช้ในการเข้าถึงรหัส php ของคุณ บางคนพยายามรันโค้ด php ด้วยการลากไฟล์. php ลงในเว็บเบราว์เซอร์ เป็นการปฏิบัติที่ไม่ถูกต้องและอาจนำไปสู่ปัญหาประเภทนี้ หากคุณบันทึกไฟล์เป็น "test.php" ในโฟลเดอร์ C: // wamp / www คุณต้องเข้าถึงไฟล์ด้วยวิธีนี้: localhost: //test.php ความผิดพลาดประเภทนี้จะเกิดขึ้นเมื่อคุณเข้าถึงด้วยวิธีนี้: localhost: //wamp/www/test.php

หวังว่าฉันจะช่วยใครสักคนที่นั่น o / ~ แดเนียล


3

การโพสต์สิ่งที่ได้ผลสำหรับฉันเผื่อว่าจะช่วยใครสักคนบนท้องถนนแม้ว่ามันจะเป็นกรณีที่ผิดปกติก็ตาม

ฉันได้ตั้งค่าตัวจัดการเพื่อบังคับให้โฮสต์เว็บของฉันใช้ php เวอร์ชันที่สูงกว่าค่าเริ่มต้น มี 5.1 แต่ฉันต้องการ 5.6 ดังนั้นฉันจึงมีสิ่งนี้:

<FilesMatch \.php$>
    SetHandler php56-cgi
</FilesMatch>

ในไฟล์. htaccess ของฉัน

เมื่อพยายามเรียกใช้ไซต์ของฉันในเครื่องการที่มีอยู่ในนั้นทำให้โค้ด php ถูกส่งออกไปยังเบราว์เซอร์ การลบออกช่วยแก้ปัญหาได้


2

คุณสามารถลบไฟล์. haceessของคุณและปล่อยให้ระบบสร้างไฟล์ใหม่ (ว่างหรือพื้นฐาน) อาจเป็นไปได้ว่าบางบรรทัดที่คุณเพิ่มเป็นข้อความที่ไม่ถูกต้องหรือมีบางอย่างที่อยู่ภายในทำให้เกิดปัญหา จากนั้นคุณสามารถเพิ่มทีละบรรทัดจากไฟล์. htaccessเก่าเพื่อดูสาเหตุของปัญหา

ที่ได้ผลสำหรับฉัน บรรทัดที่บอกให้เครื่องไม่แสดงนามสกุล php เป็นปัญหาในกรณีของฉัน ( RewriteCondและRewriteRule ) ไฟล์. htaccessเก่าของฉันใช้งานได้ดีบนเซิร์ฟเวอร์ที่ใช้ร่วมกัน แต่ปัญหานี้เกิดขึ้นเมื่อฉันเปลี่ยนไปใช้ VPS


นอกจากนี้หากคุณพบความโง่เขลาของ CORS: ให้รันsudo a2enmod headersและsudo a2enmod rewrite(อย่าลืมรีสตาร์ท Apache)
RyanNerd

2

ขอบคุณคนอื่น ๆ ในกระทู้นี้สำหรับคำแนะนำ ทำตามขั้นตอนที่กล่าวถึงฉันพบว่าเซิร์ฟเวอร์ apache ไม่สามารถเริ่มรายงานข้อผิดพลาดทางไวยากรณ์ในloadไฟล์ในรูปแบบ/etc/apache2/mods-enabled. ปรากฎว่าทั้ง php7.0 และ php7.1 ถูกเปิดใช้งาน

a2dismod php7.0
systemctl restart apache2

และ php แสดงผลอย่างถูกต้องอีกครั้ง


2

สำหรับ PHP7 และ Apache2.4 สิ่งนี้คือสิ่งที่คุณต้องทำ:

sudo vim /etc/httpd/conf/httpd.conf

ไปที่ด้านล่างสุดและแทรกสิ่งต่อไปนี้ (ทั้งหมดด้วยตัวเอง):

<FilesMatch "\.*">
SetHandler application/x-httpd-php
</FilesMatch>

จากนั้นรีสตาร์ท Apache เพื่อโหลดการกำหนดค่าใหม่:

sudo service httpd restart

Apache จะดำเนินการตามคำขอ HTTP / S ทั้งหมดด้วย PHP หากสิ่งที่คุณมีคือไฟล์ html, css และ php สิ่งนี้จะใช้ได้ดีสำหรับคุณ หากคุณมีภาษาอื่นที่ใช้งานอยู่คุณจะต้องปรับแต่งไฟล์ให้ตรงกับสถานการณ์ของคุณ ฉันได้ทดสอบกับ phpMyAdmin แล้วและใช้งานได้ดี

สิ่งอื่น ๆ ที่ทุกคนพูดถึงที่นี่ไม่จำเป็นสำหรับฉัน เมื่อฉันวางสิ่ง "AddType Application ..... " ในจุดที่ถูกต้อง Apache ก็บอกฉันว่าโมดูลนั้นโหลดแล้วและข้ามไป

สามารถดูข้อมูลเพิ่มเติมได้ที่นี่: https://httpd.apache.org/docs/2.4/mod/core.html#filesmatch

การติดตั้งของฉันทำได้ดังนี้:

sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd

คุณควรอ่านสิ่งนี้ด้วยหากคุณยังไม่ได้: https://httpd.apache.org/docs/current/howto/htaccess.html#when


1

หากเปิดใช้งานโมดูล userdir และไซต์ของคุณอยู่ใน userdir (~ / public_html) คุณต้องตรวจสอบ /etc/apache2/mods-enabled/php5.conf ส่วนต่อไปนี้ทำให้ใช้งานได้ (บน Ubuntu 14.10 utopic):

# Running PHP scripts in user directories is disabled by default
# 
# 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.

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

1

หากคุณเป็นผู้ใช้ ubuntu หลังจากติดตั้ง apache ต้องรันคำสั่งต่อไปนี้ในการติดตั้งใหม่

sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt

ในกรณีของฉันใช้งานได้ดี


1

อะไรที่เหมาะกับฉัน:

ใน httpd.conf ที่ใช้งานอยู่ให้ค้นหา

<IfModule mime_module>
...
</IfModule>

รายการต่อไปนี้หายไป

AddType application/x-httpd-php .php
AddHandler application/x-httpd-php .php

หลังจากรีสตาร์ท apache ไฟล์. php จะถูกแยกวิเคราะห์อย่างถูกต้อง


1

ไม่มีข้อใดใช้หรือได้ผลสำหรับฉัน ... PHP7, Apache Httpd 2.2 บน CentOS 6

ความจริงก็คือฉันติดตั้ง (ทั้งหมดด้วยยำ) php ก่อน Apache ... คุณต้องทำสิ่งที่ตรงกันข้าม: ติดตั้ง Apache ก่อนเสมอจากนั้นจึงใช้งาน PHP แล้วจึงใช้งานได้ ... อันที่จริงคุณน่าจะหายไปlibphp7.soและlibphp7-zts.soอยู่ใน/etc/httpd/modules/

ฉันสามารถกู้คืนได้โดยไม่ต้องถอนการติดตั้ง PHP ฉันเพิ่มสายเวทย์ใน/etc/httpd/conf/httpd.conf: AddType application/x-httpd-php .php แล้วเรียกใช้:yum install php php-mysql


0

สิ่งนี้เกิดขึ้นกับฉันเช่นกันเมื่อเรียกใช้ $ _POST ใน MAMP ไฟล์. ini และ httpd ทั้งหมดของฉันได้รับการตั้งค่าอย่างถูกต้อง หากคุณกำลังดำเนินการจัดการแบบฟอร์มและคุณมีเอกสาร html และโพสต์ข้อมูลไปยัง php formhandler ที่เรียกใช้ $ POST ตรวจสอบให้แน่ใจว่าคุณกำลังเรียกใช้ไฟล์ html จาก localhost ผ่านเซิร์ฟเวอร์ของคุณไม่ใช่แค่ในเครื่อง

นี่เป็นทางลัดที่ฉันใช้ในการเรียกใช้เอกสาร html โดยเพียงแค่คลิกที่ไฟล์ html ในไดเร็กทอรีของฉันและเปิดในเว็บเบราว์เซอร์ของฉันเมื่อในความเป็นจริงเพื่อตรวจสอบว่า php กำลังถูกประมวลผลในรูปแบบของคุณหรือไม่คุณต้องเรียกใช้ html ของคุณผ่านเซิร์ฟเวอร์ของคุณ โปรโตคอลง่ายๆที่ฉันมองข้ามไป

ตัวอย่าง:

ไม่ถูกต้อง: file:///Applications/MAMP/htdocs/form/form.html

ขวา: http://localhost:your port number/form/form.html

ตอนนี้ php ควรได้รับการประมวลผลเมื่อคุณคลิกปุ่มส่ง


0

ผมมีปัญหาเดียวกันที่เกิดจากการกำหนดค่าเริ่มต้น Debian / Ubuntu suphpของโมดูล มีอยู่suPHP_Engine offสำหรับทั้ง / usr / share ซึ่งส่งผลให้แหล่งที่มาของ php แสดงในเบราว์เซอร์ การปิดใช้งานa2dismod suphpเป็นวิธีแก้ปัญหาชั่วคราว


0

ผมมีปัญหาเหมือนกัน. เมื่อฉันเรียกใช้ไฟล์ php เว็บเบราว์เซอร์แสดงรหัส php แทนการเรียกใช้งาน ฉันได้ลองหลายครั้ง: ถอนการติดตั้ง / ติดตั้ง wampserver64 ใหม่, ทำงานกับการตั้งค่า / โมดูล PHP / Apache ฯลฯ หลังจากผ่านไป 2 วัน: ฉันรู้ว่าเมื่อฉันพยายามเรียกใช้ไฟล์ php ภายใน notepad ++ โดยการกดชุดค่าเริ่มต้น "ctrl + alt + shift + R "สำหรับ chrome มันพยายามเรียกใช้ไฟล์ php ของฉันเช่น: "file /// C: / wamp64 / www / bla / bla .. " ในแถบที่อยู่ Chrome ของฉัน นั่นคือปัญหาของฉัน ฉันทำการเปลี่ยนแปลงตามหน้าที่กำหนดค่า Notepad ++ เพื่อเรียกใช้ php บน localhost? . ปัญหาของฉันได้รับการแก้ไขแล้ว แต่หลังจากนั้น 2 วัน ..


0

เรียกใช้ Xampp (apache) ในฐานะผู้ดูแลระบบ ใน Google Chrome ประเภท:

localhost/<insert folder name here>/<insert file name>

เช่นถ้าโฟลเดอร์ที่คุณสร้างคือ "LearnPhp" ไฟล์คือ "chapter1.php" จากนั้นพิมพ์

localhost/LearnPhp/chapter1.php

ฉันสร้างโฟลเดอร์นี้ในโฟลเดอร์ xampp ในโฟลเดอร์ htdocs ซึ่งสร้างขึ้นเมื่อคุณดาวน์โหลด xampp


0

โซลูชัน Debian 9:

touch /etc/apache2/conf-available/php.conf 

เพิ่มในไฟล์บรรทัดถัดไป:

<IfModule mod_php5.c>
    <IfModule mod_mime.c>
        AddType application/x-httpd-php .php
    </IfModule>
    <FilesMatch ".+\.php$">
        SetHandler application/x-httpd-php
    </FilesMatch>
</IfModule>
<IfModule mod_php.c>
    <IfModule mod_mime.c>
        AddType application/x-httpd-php .php
    </IfModule>
    <FilesMatch ".+\.php$">
        SetHandler application/x-httpd-php
    </FilesMatch>
</IfModule>

จากนั้นเรียกใช้:

a2enconf php && service apache2 restart

สิ่งนี้ใช้ได้ผลสำหรับฉัน แต่ไม่ใช่ในตอนแรก ฉันใช้งานเนื้อหาเว็บในไดเรกทอรีผู้ใช้ซึ่งถูกปิดใช้งานโดยค่าเริ่มต้น หากต้องการเปิดใช้งานโปรดดูหัวข้อสุดท้ายใน/etc/apache2/mods-available/php7.2.conf
Tony Adams

0

บางครั้งหากคุณมีความขัดแย้งของเวอร์ชัน php จะเกิดขึ้นหากต้องการเอาชนะโปรดทำตามขั้นตอนด้านล่าง

ขั้นตอนที่ 1: ติดตั้งรายการ Yum | grep 'php'

หากคุณมี php หลายเวอร์ชันเช่น php 5.6 และ php 7.0 ความสับสนนี้จะเกิดขึ้น

ขั้นตอนที่ 2: ยำลบ ** เวอร์ชัน php ของคุณ **

ขั้นตอนที่ 3: จากนั้นรีสตาร์ท apapche /etc/init.d/httpd restartหรือservice apache2 restart


0

วิธีนี้ใช้ได้ผลสำหรับฉัน ฉันล้าง apache2 และติดตั้งใหม่ มันเกิดขึ้นหลังจากล้างและติดตั้ง หากเป็นการติดตั้งครั้งแรกคุณจะไม่ประสบปัญหานี้


0

ฉันลองวิธีแก้ปัญหาหลายวิธีข้างต้น แต่การแก้ไขในสถานการณ์ของเราคือการติดตั้งโมดูล fpm

เราได้ติดตั้ง httpd ก่อน php ซึ่งอาจมีบางอย่างเกี่ยวข้องกับปัญหา แต่เพื่อแก้ไขเราได้ติดตั้งสิ่งต่อไปนี้:

โมดูลยำติดตั้ง php: 7.2

สิ่งนี้ติดตั้งโมดูล php-fpm-7.2.11-4.module + el8.1.0 + 5443 + bc1aeb77.x86_64.rpm ซึ่งเราเปิดใช้งานโดย:

systemctl เปิดใช้งาน - ตอนนี้ php-fpm

จากจุดนั้นเราปล่อยให้ /etc/httpd/conf.d/php.conf เป็นค่าเริ่มต้นและรีสตาร์ท httpd

บริการ httpd เริ่มต้นใหม่

จากนั้นทุกอย่างก็ทำงาน

หวังว่านี่จะช่วยได้ใช้เวลานานกว่าที่ควรจะคิดออก


0

เพิ่มการกำหนดค่าต่อไปนี้ใน /etc/apache2/apache2.conf

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

และรีสตาร์ทapacheผ่านsudo service apache2 restart


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.