Ăn cát bê tông: thực hành, thực hành và thực hành

Sửa code người chán, quay sang sửa code nhà

Gần đây KACBT nổi hứng lên có vài bài về chủ đề chỉnh chọc, sửa mã nguồn. Đó là chuyện liên quan đến cái mà ngày nay gọi là lập trình Web. Cụ thể hơn, thuộc mảng front-end. Hôm nay, bỗng nhiên thấy Google báo sitemap có vấn đề. Khi mở Firefox lên, chúng tôi cũng nhìn thấy báo XML có lỗi. Bài này mô tả lại sự việc tự sửa code.

Lỗi như thế nào mà phải sửa?

Khi Google báo lỗi về sitemap, KACBT thử gõ trực tiếp sitemap.xml vào thanh địa chỉ trình duyệt đã cho ra kết quả:

Dấu mũ chỉ đâu đó vào đầu dòng, thêm dòng chữ đỏ lòm cho biết có lỗi gì đó. Dòng chữ bên trên lại là Line Number 2, Column 1. Ấy thế, sự thật khi xem mã nguồn XML:

Có 1 dòng trắng đầu file XML

Ở đâu ra một dòng trắng “vô duyên” đến như vậy? Thử tìm hiểu xem vấn đề ở đây là gì?

Quay về trang chủ mở xem souce code HTML thì thấy như sau:

Có 1 dòng trống ở đầu file HTML

Khi thử xem vài trang bất kỳ, bấm Ctrl + U để xem mã HTML cũng thấy có một dòng trắng đầu tiên như vậy. Đến đây có thể kết luận server-side script, ở đây là PHP khi xuất file đã “một cách kỳ diệu” nào đó thêm một dòng trắng vào đầu trang.

Sau khi tra cứu chúng tôi nhận thấy rằng có khả năng là có một dòng trắng phía trước mở đầu đoạn PHP hoặc có một dòng trắng phía sau đóng mã PHP.

Có vài cách xử lý được đề xuất theo hướng tìm những file PHP như kể trên. Cũng có thể áp dụng cách tắt bớt plugin của WordPress đang sử dụng để tìm ra plugin nào gây nguyên nhân như vậy. Và cả trong theme cũng vậy. Những cách này sẽ triệt để vấn đề như nói thật, chúng tôi cảm thấy khó và có nguy cơ làm chết trang web.

Chọn cách dễ hơn để thực hiện

Mở file index.php trong thư mục public_html ra, file này chính là file khởi đầu để nạp WordPress CMS (là nền tảng vận hành site khó ăn cát bê tông chấm cơm). Tìm thấy có dòng:

define( 'WP_USE_THEMES', true );

Thêm vào trước dòng vừa kể đoạn mã sau:

Đoạn mã PHP loại bỏ dòng trống trước các file dạng văn bản text khi trả về client

Đoạn mã làm cái gì vậy kà? Nó làm thế này? Kiểm tra xem trong mảng header có cái nào là dòng rỗng không thì dẹp bỏ nó đi. Và cái hàm này thì được nạp làm tham số callback cho ob_start(). Túm lại là nếu có dòng trắng nào được trong header sẽ gửi về client thì xoá nó đi.

Save file và… voilà!

Kết quả đạt được sau sửa code

Sau khi sửa code, không còn dòng trắng nào đứng trước nữa, nên file XML đã hết báo lỗi:

Xem như xử lý xong vấn đề.

Lên đầu trang