Làm cách nào để thêm mã / tệp PHP vào tệp HTML (.html)?


97

Tôi không thể sử dụng PHP trong các trang HTML của mình. Ví dụ index.html,. Tôi đã thử sử dụng cả hai:

<? contents ?> 

<?php contents ?> 

Cả hai đều không hoạt động. Máy chủ của tôi cung cấp PHP và khi tôi sử dụng .phptiện ích mở rộng, nó hoạt động bình thường. Đây có phải là vấn đề hay tôi phải thay đổi các tùy chọn trong php.ini?


2
Bạn sẽ phải thay đổi máy chủ của mình (tôi giả sử là apache) để phục vụ các tệp html dưới dạng php, nhưng tại sao bạn lại muốn phần mở rộng là html thay vì php?
Thuốc nổ


@ExplosionPills Tôi đã làm điều đó bằng IIS v7! và nó có thể!
hoàn tác

@Death Tôi không có ý ám chỉ rằng nó chỉ có thể được thực hiện với apache, tôi chỉ cho rằng anh ấy đang sử dụng apache.
Thuốc nổ

1
Thật là một ý tưởng kinh khủng. Sử dụng chuyển hướng để tiết kiệm SEO của bạn. Sử dụng .html cho HTML và .php cho PHP.
Alien nghệ

Câu trả lời:


142

Bạn không thể chạy PHP trong tệp .html vì máy chủ không nhận ra đó là một phần mở rộng PHP hợp lệ trừ khi bạn yêu cầu. Để thực hiện việc này, bạn cần tạo tệp .htaccess trong thư mục web gốc của mình và thêm dòng này vào đó:

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

Điều này sẽ yêu cầu Apache xử lý các tệp có đuôi tệp .htm hoặc .html dưới dạng tệp PHP.


15
Trong khi điều này là đúng, tôi nghĩ rằng một câu hỏi quan trọng hơn là tại sao lại làm điều này? Hơn nữa, anh ta nên cập nhật cấu hình máy chủ hơn là sử dụng .htaccessnếu đó là một tùy chọn.
Thuốc nổ

10
Tôi đã làm điều này nhiều lần để che giấu thực tế là tôi đang sử dụng PHP (ngoài những thứ khác)
nickb

3
@nickb - bảo mật thông qua sự che giấu?
Nathan Long

2
@NathanLong w3.org/TR/cooluris Cụ thể, "Giữ các bit và phần cụ thể về triển khai như .php và .asp ra khỏi URI của bạn, bạn có thể muốn thay đổi công nghệ sau này." trong phần 4.5.
Eric Finn

4
@EricFinn - đó là một hướng dẫn tốt. Nhưng việc có các .htmltệp xử lý máy chủ dưới dạng PHP thậm chí không cần thiết hoặc hữu ích khi theo dõi nó. Bạn muốn người dùng truy cập example.com/foo. Bạn có thể sử dụng URL đó để phân phát nội dung PHP bất kể tên tệp trên máy chủ của bạn. Nếu người dùng đã foo.htmlđánh dấu trang, bạn vẫn có thể phân phát foo.phpmà không cần đổi tên tệp.
Nathan Long

20

Tôi nghĩ việc viết PHP thành tệp .html là khó hiểu và phản tự nhiên. Tại sao bạn lại làm vậy??

Dù sao đi nữa, nếu những gì bạn muốn là thực thi các tệp PHP và hiển thị chúng dưới dạng .html trong thanh địa chỉ, thì giải pháp đơn giản nhất sẽ là sử dụng .php như bình thường và viết quy tắc trong .htaccess của bạn như sau:

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

Điều gì sẽ xảy ra nếu tôi sử dụng PHP + HTML? tôi nên sử dụng định dạng nào? Tôi khá bối rối. Trang của tôi có mã thực sự ngắn dựa trên PHP và có nhiều mã bằng HTML. Vì vậy, những gì tôi sẽ làm là tạo một tệp HTML. Đây có phải là một thói quen xấu?
Hoon

3
Định dạng phải là .php, vì các tệp .html chỉ chứa mã HTML.
David Morales

15

Để sử dụng php trong các tệp .html, bạn phải liên kết chúng với bộ xử lý PHP trong tệp cấu hình máy chủ HTTP của bạn. Trong Apache, nó trông như thế này:

AddHandler application/x-httpd-php .html

bạn có muốn nhận xét về sự khác biệt giữa AddHandlerAddType? Cảm ơn.
PatrickT

1
@PatrickT Cách đơn giản nhất để so sánh là AddHandler là một ánh xạ "đầu vào" - nó ánh xạ một phần mở rộng tệp đến với một trình xử lý. AddType sửa đổi tiêu đề loại MIME đầu ra. Xem ghi chú tại đây: httpd.apache.org/docs/2.4/mod/mod_mime.html#addtype
Chris Trahey

13

Bạn có thể sửa đổi .htaccess như những người khác đã nói, nhưng giải pháp nhanh nhất là đổi tên phần mở rộng tệp thành .php


Bạn cũng có thể thử .phtml
Floggedhorse

9

Thêm dòng này

AddHandler application/x-httpd-php .html

để httpd.confnộp cho những gì bạn muốn làm. Nhưng hãy nhớ rằng, nếu bạn làm điều này thì máy chủ web của bạn sẽ rất chậm, bởi vì nó sẽ phân tích cú pháp ngay cả mã tĩnh không chứa mã php. Vì vậy, cách tốt hơn sẽ là tạo phần mở rộng tệp .phtmlthay vì chỉ .html.


5
Hãy nhớ đừng viết đậm toàn bộ câu trả lời của bạn.
David Morales

7

Để .htmlphân tích cú pháp các tệp cũng vậy, bạn cần đặt trình xử lý thích hợp trong cấu hình máy chủ của mình.

Đối với Apache httpd 2.X, đây là dòng sau

AddHandler application/x-httpd-php .html

Xem tài liệu PHP để biết thông tin về cài đặt máy chủ cụ thể của bạn.


6

Theo mặc định, bạn không thể sử dụng PHP trong các trang HTML.

Để thực hiện điều đó, hãy sửa đổi tệp .htacccess của bạn như sau:

AddType application/x-httpd-php .html

4

Nếu bạn chỉ có mã php trong một tệp html nhưng có nhiều tệp khác chỉ chứa mã html, bạn có thể thêm phần sau vào tệp .htaccess của mình để tệp đó sẽ chỉ phân phát tệp cụ thể đó dưới dạng 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>

Điều này sẽ làm cho PHP CHỈ thực thi được trên tệp "yourpage.html" chứ không phải trên tất cả các trang html của bạn, điều này sẽ ngăn chặn sự chậm lại trên toàn bộ máy chủ của bạn.

Về lý do tại sao ai đó có thể muốn phân phát php qua tệp html, tôi sử dụng hàm IMPORTHTML trong bảng tính của google để nhập dữ liệu JSON từ một url bên ngoài phải được phân tích cú pháp bằng php để dọn dẹp nó và xây dựng bảng html. Cho đến nay tôi vẫn chưa tìm ra cách nào để nhập tệp .php vào bảng tính của google nên nó phải được lưu dưới dạng tệp .html để hàm hoạt động. Có thể cung cấp php qua tệp .html là cần thiết cho mục đích sử dụng cụ thể đó.


Rất thực tiễn.
quantme

4

Tạo một tệp trống bằng notepad và đặt tên là .htaccess, Sau đó sao chép tệp đó vào thư mục dự án của bạn và thêm dòng này và lưu.

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

nếu không hãy lưu tệp .html bằng cách sử dụng .php vì php có thể hỗ trợ html và lưu tệp đó trong đường dẫn máy tính / var / www / html (linux)


1
Cảm ơn bạn đã xem xét những người thậm chí không biết cách tạo tệp .htaccess.
quantme

0

AJAX cũng là một khả năng. Một cách hiệu quả, bạn sẽ muốn dữ liệu từ trang php. Sau khi có dữ liệu, bạn có thể định dạng bằng javascript và hiển thị.

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

CÁCH MẠNG HIỆN ĐẠI: bây giờ bạn cũng cần phải sửa nó bằng cách thay đổi '' security.limit_extensions 'ít được biết đến trong php-fpm để thực hiện việc này. Bạn có thể đã biết rõ cơ chế thay đổi apache thành AddHandler / AddType được tài liệu hóa, tôi sẽ không trình bày ở đây.

  1. BẠN PHẢI tìm hiểu vị trí của php-fpm / conf trong thiết lập của bạn. Tôi đã làm điều đó bằng cách làm điều này

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

  2. Tôi lấy lại cái này

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

  3. đi tới tệp này, chỉnh sửa nó và ĐẢM BẢO BẠN THỰC HIỆN NÓ ĐƯỢC BÌNH LUẬN NGOÀI EG: thay đổi nó từ ';security.limit_extensions = .php .php3 .php4 .php5 .php7'<- NB: lưu ý ";"- dòng này thực sự được TẮT theo mặc định - và bạn không cần tất cả các phần mở rộng vô nghĩa, trên thực tế là có lẽ nguy hiểm .. đổi nó thành 'security.limit_extensions = .php .htm'<- lưu ý rằng dấu chấm phẩy bây giờ đã bị loại bỏ. sau đó khởi động lại apache / (hoặc nginx) và khởi động lại php-fpm# service php-fpm restart # service httpd restart


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.