Có nên đóng thẻ php lại không ? 2011-11-12 03:43:13


Các bạn cho hỏi mình xem một số mã nguồn thấy người ta chỉ mở thẻ PHP bằng "<?php" nhưng không thấy đóng lại bằng "?>". Điều này có tạo ra ảnh hưởng gì không ?

Tra loi 9 comment(s) đóng thẻ php ?> 2011-11-12 03:43:13

TG 2011-11-12 16:18:47


Không dùng thẻ đóng để đảm bảo việc dùng các hàm như session_start(), header() hoạt động. Lý do là trên 1 số hosting khi bạn upload 1 file lên host và sau khi download về thì nó tự thêm dấu enter giữa các dòng code và sau ký tự đóng.Điều này sẽ làm ảnh hưởng tới các hàm session_star() của bạn

Ví dụ:
File trước khi lên host:

config.php
<?php
$a
= 2;
?>


a.php
<?php
include 'config.php';
session_start();
?>


Lúc này việc tạo session hoạt động bình thường.
Nhưng sau khi download về ở 1 số host nội dung file config.php và a.php sẽ là:

config.php
<?php

$a
= 2;

?>



a.php
<?php

include 'config.php';

session_start();

?>


Lúc này hàm session sẽ bị lỗi, vì phía sau thẻ đóng ?> của file config.php có 1 ký tự xuống dòng. Chỉ cần bỏ dấu ?> của file config.php đi là xong. Đó là lý do tại sao 1 số bộ source không dùng thẻ đóng.

Lưu ý: là chỉ 1 số host bị tình trạng xuống dòng chứ không phải là tất cả.

@TG

đóng thẻ php ?> 2011-11-12 19:29:07

Thì ra là như thế, trước giờ mình cứ tưởng là người ta quên đóng nên đóng dùm.

Thanks.

@đóng thẻ php ?>

www.teenclubvn.net 2011-12-29 15:02:29

Mình cũng không hiểu tại sao nhiều người lập trình pro mà quên đóng ?>

hóa ra là vậy !

Thanks !

@www.teenclubvn.net

Ngọc Bảo 2013-02-07 20:38:03


chùi ui TG giải thích gì mà tầm bậy tầm bạ vậy nè.
việc xuống dòng hay kg là do bảng mã lưu các kí tự của 3 hệ khác nhau Linux , Windows, osX khác nhau
ví dụ khi soạn thảo trên window kí tự windows được lưu là \n\r và trên linux thì lưu \n trên OSx thì nó lưu kiểu gì đó quên roài. cái này thì thường người ta soạn thảo file php trên windows với eclipse trong option có phần lựa ký tự xuống hàng
còn việc tại sao thường thì kg đóng thẻ <? ?> bởi vì khi include một file khác vào tránh khoảng trống và ký tự xuống hàng của file php include đó (trường hợp ?> nhưng sau đó lại có khoảng trống hoặc các ký tự ẩn làm ảnh hưởng, header và session chỉ là trường hợp riêng biệt)
nên nguyên tắc đặt ra nếu file chi có thuần mã PHP thì kg đóng thẻ ?> nếu trộn lẫn mã HTML và PHP thì mới phải đóng thẻ

@Ngọc Bảo

conanit 2013-02-17 21:43:32


Luu y: neu chay host linux (vps) thi nen dung the dong la <?php ?>. neu dung <? ?> thi no se khong hieu do mat chu php.
minh nhan code web thue php, framework cakephp, ngoai ra minh con convert file psd sang html chuan w3c html5.
ban nao can thi lien lac voi minh:
yahoo: maiyeu_mainho512@yahoo.com
mail: codethue@gmail.com.

@conanit

Anh euro 2013-07-15 10:41:51

ông này nói như thánh ấy, việc phân biệt <?php và <? là do cấu hình trong php.ini chứ liên quan gì tới vps chỉ cần open cái sort_open_tags trong php.ini là có thể dùng cả 2 kiểu.

@Anh euro

Steven Phan 2015-02-11 22:48:06

Việc không đóng thẻ cũng nhằm một mục đích là tránh việc web cài đặt trên server nhiễm malware sẽ không bị chèn tự động các đoạn javascript chứa mã độc. Hoặc có chèn được vào nhưng trình biên dịch php sẽ không hiểu đoạn mã javascript sẽ không thể biên dịch tiếp và báo lỗi!
Việc tự động chèn các ký tự trống ở đầu file và cuối file php là do khi các bạn lưu tập tin php nhưng không để ý đến bảng mã. Nếu dùng bảng mã unicode (UTF8) thì không nên chọn include signature Hoặc include (with) BOM.

BOM - Byte Order Mark <<< Thông tin này các bạn có thể tra cứu trên Wikipedia về bảng mã Unicode hoặc UTF8.
Sau đây là ví dụ cách chọn lưu file cho Notepad++

1) >Click on "Format"
>Select "Encode in UTF-8 without BOM"

2) >Click on "settings"
>Click on "Preferences"
>Click on "new document/open save directory"
>Select "UTF-8 without BOM"

@Steven Phan

Hiếu 2015-10-29 22:35:43

@Hiếu

Chung cư vị trí vàng Goldseason - 47 Nguyễn Tuân 2015-12-06 15:44:45

@Chung cư vị trí vàng Goldseason - 47 Nguyễn Tuân

Reply