11/10/2026 · VietTechies · Biên tập

Ngày 8 tháng 6 năm 1995, Rasmus Lerdorf công bố bản phát hành công khai đầu tiên của PHP, và thứ ông đưa ra không phải là một ngôn ngữ lập trình. Ông đăng thông báo lên một nhóm thảo luận Usenet dành cho lập trình viên web, mở đầu bằng câu: “Xin giới thiệu Personal Home Page Tools (PHP Tools) phiên bản 1.0.”
Bài đăng mô tả: “Những công cụ này là một bộ file thực thi CGI nhỏ gọn, viết bằng C.” Các chương trình ấy chạy qua Common Gateway Interface, gọi tắt là CGI. Chúng ghi lại lượt truy cập vào các trang của bạn trong file log riêng, hiển thị log đó theo thời gian thực, đếm lượt truy cập theo từng ngày lẫn tổng cộng, có thể chặn khách truy cập theo tên miền, và giúp bạn tạo biểu mẫu đơn giản.
Ban đầu, Lerdorf dùng bộ công cụ này để theo dõi lượt truy cập vào bản CV mà ông đăng trên mạng. Ba mươi mốt năm sau lời công bố ấy, PHP được dùng trên 69,7% số website mà công ty khảo sát công nghệ web W3Techs xác định được ngôn ngữ lập trình phía máy chủ.
Ngôn ngữ PHP ra đời sau đó, và Lerdorf từng cho biết ngay từ đầu ông đã không định tạo ra một ngôn ngữ. Trong bài nói chuyện năm 2012 tại hội nghị O’Reilly Open Source Convention, ông nói: “Tôi không hề có ý định viết một ngôn ngữ. Tôi chẳng biết gì về cách viết một ngôn ngữ cả.”
Công cụ trước, ngôn ngữ sau
CGI cho phép máy chủ web giao một yêu cầu (request) cho một chương trình riêng, rồi gửi trả lại bất cứ thứ gì chương trình đó in ra. Lerdorf phát hành mã nguồn cùng với bộ công cụ. Theo trang lịch sử chính thức của PHP, quyết định đó cho phép lập trình viên dùng code theo cách họ thấy phù hợp, đồng thời khuyến khích họ gửi về các bản sửa lỗi và cải tiến.
Các bản phát hành nối tiếp nhau rất nhanh. Theo trang lịch sử, vào tháng 9 năm 1995, Lerdorf tạm đổi tên bộ công cụ thành FI, viết tắt của “Forms Interpreter” (trình thông dịch biểu mẫu), đồng thời bổ sung biến kiểu Perl, cơ chế tự động diễn giải biến từ biểu mẫu, và cách nhúng code vào HTML, ngôn ngữ đánh dấu của các trang web. FI tiếp tục lan rộng với vai trò một công cụ CGI, “nhưng vẫn chưa hẳn là một ngôn ngữ”. Đến tháng 10, ông phát hành một bản viết lại hoàn toàn, “được chủ ý thiết kế để giống C về cấu trúc”.
Đến tháng 4 năm 1996, ông đã gộp các tên gọi trước đó thành PHP/FI. Theo cách nói của trang lịch sử, đây là phiên bản “bắt đầu thực sự đưa PHP phát triển từ một bộ công cụ thành một ngôn ngữ lập trình đúng nghĩa”. Phiên bản này hỗ trợ sẵn một số loại cơ sở dữ liệu, cookie và hàm do người dùng tự định nghĩa. Dù đã có một số người đóng góp ở mức nhỏ, PHP/FI “vẫn chủ yếu do một cá nhân phát triển”. Trong hai năm 1997 và 1998, PHP/FI có “một nhóm người dùng trung thành gồm vài nghìn người trên khắp thế giới”.
Vì sao htmlspecialchars có cái tên dài như vậy
Một cách làm tắt từ những ngày đầu ấy còn lưu lại trong một hàm mà PHP đến nay vẫn cung cấp: htmlspecialchars. Hàm này chuyển các ký tự như dấu nhỏ hơn (<) hay dấu và (&) thành thực thể HTML (HTML entity), để trình duyệt hiển thị chúng như văn bản thường thay vì hiểu chúng là mã đánh dấu.
Tháng 12 năm 2013, một lập trình viên tên là Rowan Collins gửi thư tới mailing list internals, nơi đội ngũ phát triển nòng cốt của PHP thảo luận về ngôn ngữ này. Collins chỉ ra rằng một số tên hàm lõi không theo kiểu nào trong hai kiểu đặt tên quen thuộc của PHP. Anh cho rằng nếu có một quy ước đặt tên chặt chẽ hơn, có lẽ htmlspecialchars đã mang một cái tên khác với cái tên Lerdorf chọn. Lerdorf đáp rằng “chuyện đó còn có những yếu tố khác chi phối”.
“htmlspecialchars là một hàm có từ rất sớm”, ông viết. “Từ hồi PHP còn chưa tới 100 hàm và cơ chế băm tên hàm là strlen().”
Bảng băm (hash table) giúp tra cứu nhanh hơn bằng cách biến mỗi cái tên thành số hiệu của một ngăn chứa (bucket), nhờ vậy chương trình chỉ phải tìm trong một ngăn. Nếu hàm băm là strlen(), tức hàm trong ngôn ngữ C trả về độ dài của một chuỗi, thì mọi cái tên có cùng độ dài đều rơi vào cùng một ngăn. Lerdorf giải thích rằng để dàn các hàm ra nhiều ngăn, tên hàm “được chọn có chủ đích để rơi vào đúng ngăn ứng với một độ dài cụ thể”.
Ông cho biết thêm, chuyện đó diễn ra “vào khoảng cuối năm 1994”, khi PHP “chỉ là một công cụ để tôi dùng cho riêng mình” và ông “không lo lắm chuyện không nhớ nổi mấy cái tên hàm ít ỏi”. Nhưng công cụ ấy rồi không còn là của riêng ông nữa. Hàm htmlspecialchars thì đến PHP 8 vẫn còn đó.
Một ngôn ngữ không do một người làm nên
Phần lớn vòng đời của PHP/FI 2.0 trôi qua ở giai đoạn beta. Đến khi phiên bản này rời giai đoạn beta vào tháng 11 năm 1997, bộ phân tích cú pháp (parser) của nó “đang được viết lại toàn bộ”.
Bản viết lại ấy là công của Andi Gutmans và Zeev Suraski ở Tel Aviv. Khi đang phát triển một ứng dụng thương mại điện tử cho một dự án ở trường đại học, hai người thấy PHP/FI 2.0 quá kém hiệu quả và thiếu những tính năng họ cần. Vì vậy, năm 1997, họ bắt tay viết lại từ đầu parser của PHP/FI 2.0. Theo trang lịch sử chính thức, để tận dụng lượng người dùng sẵn có của PHP/FI, “Andi, Rasmus và Zeev quyết định hợp tác phát triển một ngôn ngữ lập trình mới, độc lập”.
Kết quả là PHP 3.0, do “nhóm phát triển PHP mới” công bố vào tháng 6 năm 1998, khi nhiều lập trình viên mới từ khắp thế giới đã gia nhập nhóm. Ý nghĩa của cái tên cũng thay đổi. Từ đây, PHP là viết tắt của “PHP: Hypertext Preprocessor” (bộ tiền xử lý siêu văn bản). Kiểu viết tắt đệ quy này “xóa đi hàm ý về mục đích sử dụng cá nhân hạn hẹp” mà cái tên cũ mang theo. Theo trang lịch sử, ở thời đỉnh cao, PHP 3.0 được cài trên khoảng 10% số máy chủ web trên internet.
Sau đó, Gutmans và Suraski viết lại phần lõi của PHP thêm một lần nữa. Zend Engine của họ, cái tên ghép từ tên riêng của hai người là Zeev và Andi, ra mắt vào giữa năm 1999. PHP 4.0, xây dựng trên nền Zend Engine, được phát hành vào tháng 5 năm 2000.
Danh xưng “cha đẻ PHP” chưa nói hết
Bài tường thuật của Computerworld về bài nói chuyện năm 2012 của Lerdorf mang tiêu đề “PHP creator extolls language’s modest start” (Cha đẻ PHP ca ngợi khởi đầu khiêm tốn của ngôn ngữ này), và danh xưng ấy xác đáng, trong một chừng mực nhất định. Lerdorf là người viết bộ công cụ ban đầu và là người phát triển chính của PHP/FI.
Nhưng PHP, trong giai đoạn lan rộng từ năm 1998 trở đi, là một dự án chung, xây trên một parser đã được viết lại, còn engine bên dưới PHP 4 là do Gutmans và Suraski làm ra. Cái tên “Personal Home Page” (trang chủ cá nhân) hợp với một bộ công cụ phục vụ trang web của một người. Còn “PHP: Hypertext Preprocessor” là tên của một ngôn ngữ có một đội ngũ đứng sau.
Khi cách làm tắt rơi vào tay người lạ
Mẹo strlen() hợp lý với một công cụ chưa đến 100 hàm, chỉ có một người dùng, và người dùng ấy, theo lời chính ông, không mấy bận tâm chuyện nhớ vài cái tên hàm. Rồi code được công khai, số người dùng tăng lên hàng nghìn, và lý do đằng sau những cái tên ấy khuất khỏi tầm mắt. Đổi tên một hàm sẽ làm hỏng mọi chương trình đang gọi hàm đó, và htmlspecialchars vẫn giữ nguyên tên.
Với một công cụ cá nhân, bối cảnh nằm sẵn trong đầu bạn: vì sao một cái tên lại dài, vì sao thiếu một bước kiểm tra, vì sao một file lại nằm ở chỗ đó. Một khi người khác xây dựng tiếp trên công cụ ấy, họ kế thừa cách làm tắt mà không có bối cảnh đi kèm, và mỗi người dùng mới lại khiến việc gỡ bỏ cách làm tắt ấy tốn kém hơn.
Khi bạn là người dùng duy nhất, một cách làm tắt chẳng tốn bao nhiêu. Vậy nên, trước khi đưa một công cụ nhỏ ra công khai, hãy đọc nó một lượt bằng con mắt của người lạ, và tự hỏi xem trong những cách làm tắt ở đó, cách nào bạn vẫn sẵn lòng giải thích sau ba mươi năm nữa.
Bài liên quan
Đọc bằng ngôn ngữ khác: English
Nguồn
- PHP Manual, “History of PHP”
- Rasmus Lerdorf, “Announce: Personal Home Page Tools (PHP Tools)”, nhóm thảo luận comp.infosystems.www.authoring.cgi, ngày 8 tháng 6 năm 1995, theo bản trích lại trong slide bài nói chuyện của ông
- Rasmus Lerdorf, “Re: Flexible function naming”, mailing list php.internals (ngày 17 tháng 12 năm 2013)
- Joab Jackson, “PHP creator extolls language’s modest start”, Computerworld (ngày 19 tháng 7 năm 2012)
- W3Techs, “Usage statistics and market share of PHP for websites” (ngày 11 tháng 10 năm 2026)
- PHP Manual, “htmlspecialchars”
- Ảnh bìa: Rasmus Lerdorf tại hội nghị New Zealand PHP Conference, ngày 28 tháng 8 năm 2014. Ảnh do William Stadtwald Demchick chụp, qua Wikimedia Commons, CC BY-SA 4.0
