ฉันจะเพิ่มโค้ด / ไฟล์ PHP ไปยังไฟล์ HTML (.html) ได้อย่างไร


98

ฉันไม่สามารถใช้ PHP ในหน้า HTML ของฉัน ตัวอย่างเช่นindex.html. ฉันได้ลองใช้ทั้งสองอย่าง:

<? contents ?> 

และ

<?php contents ?> 

ทั้งสองอย่างนี้ไม่ได้ผล เซิร์ฟเวอร์ของฉันให้บริการ PHP และเมื่อฉันใช้.phpส่วนขยายนี้จะทำงานได้อย่างถูกต้อง นี่เป็นปัญหาหรือฉันต้องเปลี่ยนการตั้งค่าในphp.ini?


3
คุณจะต้องเปลี่ยนเซิร์ฟเวอร์ของคุณ (ฉันถือว่า apache) ให้บริการไฟล์ html เป็น php แต่ทำไมคุณถึงต้องการให้ส่วนขยายเป็น html แทน php?
ยาระเบิด


@ExplosionPills ฉันทำโดยใช้ IIS v7! และเป็นไปได้!
ยกเลิก

@Death ฉันไม่ได้ตั้งใจที่จะบ่งบอกว่ามันสามารถเพียงทำได้ด้วย Apache ผมก็สันนิษฐานว่าเขากำลังใช้ Apache
ยาระเบิด

1
ช่างเป็นความคิดที่น่ากลัว ใช้การเปลี่ยนเส้นทางเพื่อบันทึก SEO ของคุณ ใช้. html สำหรับ HTML และ. php สำหรับ PHP
Alien Technology

คำตอบ:


143

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

AddType application/x-httpd-php .htm .html

สิ่งนี้จะบอกให้ Apache ประมวลผลไฟล์ที่มีนามสกุลไฟล์. htm หรือ. html เป็นไฟล์ PHP


15
ในขณะนี้ถูกต้องฉันคิดว่าคำถามที่สำคัญกว่าคือทำไมถึงทำเช่นนี้? นอกจากนี้เขาควรอัปเดตการกำหนดค่าเซิร์ฟเวอร์มากกว่าใช้.htaccessหากเป็นตัวเลือก
ยาระเบิด

11
ฉันได้ทำสิ่งนี้หลายครั้งเพื่อซ่อนความจริงที่ว่าฉันใช้ PHP (นอกเหนือจากสิ่งอื่น ๆ )
nickb

3
@nickb - ความปลอดภัยผ่านความสับสน?
Nathan Long

2
@NathanLong w3.org/TR/coolurisโดยเฉพาะ "เก็บบิตและชิ้นส่วนที่ใช้งานเฉพาะเช่น. php และ .asp ออกจาก URI ของคุณคุณอาจต้องการเปลี่ยนเทคโนโลยีในภายหลัง" ในหัวข้อ 4.5
Eric Finn

4
@EricFinn - เป็นแนวทางที่ดี แต่การมี.htmlไฟล์ประมวลผลเซิร์ฟเวอร์เป็น PHP นั้นไม่จำเป็นหรือเป็นประโยชน์ในการติดตาม example.com/fooคุณต้องการให้ผู้เยี่ยมชม คุณสามารถใช้ URL นั้นเพื่อแสดงเนื้อหา PHP โดยไม่คำนึงถึงชื่อไฟล์บนเซิร์ฟเวอร์ของคุณ หากผู้ใช้foo.htmlบุ๊กมาร์กไว้แล้วคุณยังสามารถให้บริการได้foo.phpโดยไม่ต้องเปลี่ยนชื่อไฟล์
Nathan Long

20

ฉันคิดว่าการเขียน PHP ลงในไฟล์. html นั้นสร้างความสับสนและต่อต้านธรรมชาติ ทำไมคุณจะทำเช่นนั้น??

อย่างไรก็ตามหากสิ่งที่คุณต้องการคือเรียกใช้ไฟล์ PHP และแสดงเป็น. html ในแถบที่อยู่วิธีแก้ปัญหาที่ง่ายที่สุดคือการใช้. php ตามปกติและเขียนกฎใน. htaccess ของคุณดังนี้:

RewriteRule ^([^.]+)\.html$ $1.php [L]

จะเกิดอะไรขึ้นถ้าฉันใช้ PHP + HTML ฉันควรใช้รูปแบบใด ฉันค่อนข้างสับสน หน้าของฉันมีโค้ดสั้น ๆ ตาม PHP และมีโค้ดมากมายใน HTML สิ่งที่ฉันจะทำคือสร้างไฟล์ HTML นิสัยไม่ดีหรือเปล่า
Hoon

3
รูปแบบควรเป็น. php เนื่องจากไฟล์. html มีไว้เพื่อให้มีโค้ด HTML เท่านั้น
David Morales

15

ในการใช้ php ในไฟล์. html คุณต้องเชื่อมโยงกับตัวประมวลผล PHP ของคุณในไฟล์กำหนดค่าของเซิร์ฟเวอร์ HTTP ใน Apache มีลักษณะดังนี้:

AddHandler application/x-httpd-php .html

คุณสนใจที่จะแสดงความคิดเห็นเกี่ยวกับความแตกต่างระหว่างAddHandlerและAddType? ขอบคุณ.
PatrickT

1
@PatrickT วิธีที่ง่ายที่สุดในการเปรียบเทียบคือ AddHandler คือการแมป "อินพุต" ซึ่งจะแมปนามสกุลไฟล์ขาเข้ากับตัวจัดการ AddType แก้ไขส่วนหัวประเภท MIME ของเอาต์พุต ดูหมายเหตุที่นี่: httpd.apache.org/docs/2.4/mod/mod_mime.html#addtype
Chris Trahey

13

คุณสามารถแก้ไข. htaccess ได้เหมือนที่คนอื่นพูด แต่วิธีแก้ปัญหาที่เร็วที่สุดคือเปลี่ยนชื่อนามสกุลไฟล์เป็น. php


คุณสามารถลอง. phtml
Floggedhorse ได้ใน

9

เพิ่มบรรทัดนี้

AddHandler application/x-httpd-php .html

เพื่อhttpd.confยื่นสิ่งที่คุณต้องการทำ แต่จำไว้ว่าถ้าคุณทำเช่นนี้เว็บเซิร์ฟเวอร์ของคุณจะช้ามากเพราะจะแยกวิเคราะห์แม้แต่รหัสคงที่ซึ่งจะไม่มีรหัส php ดังนั้นวิธีที่ดีกว่าคือการสร้างนามสกุลไฟล์.phtmlแทนที่จะเป็นเพียง.html.


5
อย่าลืมเขียนคำตอบทั้งหมดของคุณเป็นตัวหนา
David Morales

7

สำหรับการมี .htmlแยกวิเคราะห์ไฟล์คุณต้องตั้งค่าตัวจัดการที่เหมาะสมในการกำหนดค่าเซิร์ฟเวอร์ของคุณ

สำหรับ Apache httpd 2.X นี่คือบรรทัดต่อไปนี้

AddHandler application/x-httpd-php .html

ดูPHP docuสำหรับข้อมูลเกี่ยวกับการติดตั้งเซิร์ฟเวอร์เฉพาะของคุณ


6

โดยค่าเริ่มต้นคุณไม่สามารถใช้ PHP ในหน้า HTML ได้

ในการทำเช่นนั้นให้แก้ไขไฟล์. htacccess ของคุณโดยทำดังนี้:

AddType application/x-httpd-php .html

4

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

<Files yourpage.html>
AddType application/x-httpd-php .html 
//you may need to use x-httpd-php5 if you are using php 5 or higher
</Files>

สิ่งนี้จะทำให้ PHP สามารถใช้งานได้เฉพาะในไฟล์ "yourpage.html" เท่านั้นไม่ใช่ในหน้า html ทั้งหมดของคุณซึ่งจะป้องกันการชะลอตัวบนเซิร์ฟเวอร์ทั้งหมดของคุณ

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


ใช้งานได้จริงมาก
quantme

4

สร้างไฟล์เปล่าโดยใช้ notepad และตั้งชื่อว่า. htaccess จากนั้นคัดลอกไฟล์นั้นในไดเร็กทอรีโปรเจ็กต์ของคุณแล้วเพิ่มบรรทัดนี้และบันทึก

AddType application/x-httpd-php .htm .html

อื่นบันทึกไฟล์. html โดยใช้. php เนื่องจาก php สามารถรองรับ html และบันทึกลงในพา ธ คอมพิวเตอร์ / var / www / html (linux)


2
ขอขอบคุณที่พิจารณาผู้ที่ไม่รู้วิธีสร้างไฟล์. htaccess
quantme

0

AJAX ก็เป็นไปได้เช่นกัน คุณต้องการข้อมูลจากหน้า php อย่างมีประสิทธิภาพ เมื่อคุณมีข้อมูลแล้วคุณสามารถจัดรูปแบบได้ในจาวาสคริปต์และดิสเพลย์

var xmlhttp = new XMLHttpRequest();
var url = "risingStars.php";

xmlhttp.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
        getDbData(this.responseText);
    }
}
xmlhttp.open("GET", url, true);
xmlhttp.send();


function getDbData(response) {

//do whatever you want with respone
}

0

MODERN REVISION: ตอนนี้คุณต้องแก้ไขโดยเปลี่ยน '' security.limit_extensions 'ที่รู้จักกันน้อยใน php-fpm เพื่อทำสิ่งนี้ คุณอาจจะรู้กลไกการเปลี่ยน apache เป็น AddHandler / AddType ที่มีการบันทึกไว้เป็นอย่างดีฉันจะไม่เข้าไปที่นี่

  1. คุณต้องค้นหาว่า php-fpm / conf อยู่ที่ไหนในการตั้งค่าของคุณ ฉันทำได้โดยการทำเช่นนี้

    # grep -rnw '/etc/' -e 'security.limit_extensions'

  2. ฉันได้รับสิ่งนี้กลับมา

    '/etc/php-fpm.d/www.conf:387:;security.limit_extensions = .php .php3 .php4 .php5 .php7'

  3. ไปที่ไฟล์นี้แก้ไขและตรวจสอบให้แน่ใจว่าคุณได้รับการแสดงความคิดเห็นเช่น: เปลี่ยนจาก';security.limit_extensions = .php .php3 .php4 .php5 .php7'<- NB: โปรดทราบว่า";"- บรรทัดนี้ถูกปิดใช้งานตามค่าเริ่มต้น - และคุณไม่จำเป็นต้องมีส่วนขยายไร้สาระทั้งหมดในความเป็นจริง อาจเป็นอันตราย .. เปลี่ยนเป็น'security.limit_extensions = .php .htm'<- สังเกตว่าตอนนี้เซมิโคลอนถูกลบออกแล้ว จากนั้นรีสตาร์ท apache / (หรือ nginx) และรีสตาร์ท php-fpm# service php-fpm restart # service httpd restart


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