Trong bài học này chúng ta bắt đầu xem xét cách sử dụng PHP trong môi trường web. Chúng ta sẽ xây dựng một page đơn giản đầu tiên bằng cách tích hợp PHP với HTML và xem một số kinh nghiệm thực hiện các thao tác này.
Ví dụ xây dựng trang web đơn giản với PHP
Để dễ dàng minh họa các vấn đề, trước hết chúng ta sẽ cùng xây dựng một trang web đơn giản theo các bước sau:
(1) Tạo thư mục con learnphp trong thư mục htdocs của XAMPP.
Nếu sử dụng PhpStorm, bạn tạo project mới từ thư mục learnphp này. Sau khi tạo project, các thao tác tiếp theo có thể thực hiện trực tiếp trong tab Project.
(2) Trong thư mục learnphp tạo tiếp thư mục con lib.
(3) Trong thư mục lib tạo file functions.php.
(4) Trong thư mục learnphp tạo file script mới index.php.
<?php define('TITLE', 'Tự học ICT - PHP'); $content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; $books = [ ], [ ], [ ], [ ], ]; function book_info(array $b) { echo "{$b['title']} by {$b['authors']}"; } $list = <<<HTML HTML;
<?php require_once ‘lib/functions.php’;
<?php
Chạy Apache từ XAMPP control và mở đường link http://localhost/learnphp/index.php từ trình duyệt, bạn thu được kết quả như sau:
File PHP và cấu trúc URL
Khi sử dụng PHP CLI, bạn sử dụng chương trình dịch chúng tôi và cung cấp tên file script cần chạy: php.exe đường/dẫn/tới/file/php. Bạn có thể chạy bất kỳ file php nào từ CLI bằng cách này.
Khi tích hợp với web server, tình hình cũng diễn ra tương tự. Bạn có thể yêu cầu chạy bất kỳ file script php nào từ thanh địa chỉ của trình duyệt, miễn là nó nằm ở khu vực cho phép của server, và bạn sử dụng một địa chỉ phù hợp. Trong ví dụ ở trên bạn truy cập trang theo địa chỉ:
http://localhost/learnphp/index.php
Một địa chỉ như vậy được gọi là một URL.
URL là viết tắt của Uniform Resource Locator. Hiểu một cách nôm na nhất, mỗi URL là địa chỉ của một tài nguyên trên Internet. Cấu trúc tổng quát nhất của một URL như sau:
scheme://host:port/path?query-string#fragment-id
Thực tế việc truy xuất tài nguyên trong htdocs được Apache giới hạn bằng cách sử dụng file .htaccess.
Phần path của URL trùng với đường dẫn tới file tương ứng trong htdocs. Giả sử trong htdocs có các file chúng tôi chúng tôi chúng tôi chúng tôi chúng tôi bạn có thể truy xuất qua URL (có path) tương ứng là chúng tôi chúng tôi chúng tôi /create.php.
Để ngắn gọn, chúng ta chỉ nói về phần path và bỏ qua phần scheme, host và port trong URL.
Nếu file nằm trong thư mục con (của htdocs), chúng ta cần đưa thêm cả tên thư mục con vào đường link. Ví dụ, với file chúng tôi nằm trong thư mục con user, bạn truy xuất nó qua URL /user/login.php.
Trường hợp đặc biệt đối với file chúng tôi . File này được gọi là file mặc định trong XAMPP Apache. Nếu không chỉ định rõ file cần tải, Apache sẽ tự động tìm file chúng tôi trong thư mục tương ứng. Các file mặc định khác trong XAMPP Apache là chúng tôi và index.html.
Do đặc thù của giao thức HTTP (giao thức truyền dữ liệu giữa trình duyệt và máy chủ web), file hay thư mục không nên chứa dấu cách. Nếu đặt tên có dấu cách, khi viết đường link bạn phải thay dấu cách bằng cụm %20. Ví dụ, /user/member%20login.php.
Mã nguồn PHP và mã HTML kết quả
Trong ví dụ trên bạn chỉ định tải file chúng tôi từ thanh địa chỉ trình duyệt.
Bấm Ctrl + U trên trình duyệt bạn sẽ nhìn thấy mã nguồn HTML của page như sau:
Hãy so sánh mã HTML sinh ra (và gửi về trình duyệt) với mã PHP của trang index.php.
Tất cả các lệnh xuất văn bản của PHP (echo, print) đều dẫn đến việc đưa dữ liệu tương ứng vào mã HTML kết quả.
Các lệnh PHP khác không đưa lại mã HTML kết quả.
Mã HTML sinh ra từ lệnh PHP và mã HTML sẵn có phối hợp chính xác ở đúng vị trí viết mã lệnh PHP tương ứng.
Như vậy, có thể dễ dàng nhận ra, vai trò của PHP trong ứng dụng web là sinh ra nội dung “động” sử dụng các logic và cơ chế của lập trình. Các nội dung “động” hòa trộn với các nội dung “tĩnh” – nội dung được viết sẵn – để tạo ra trang web.
Khi bạn yêu cầu truy xuất một file script nào đó từ thanh địa chỉ trình duyệt, Apache server sẽ chuyển file đó sang cho chương trình dịch PHP. Những văn bản chương trình dịch PHP sinh ra + những gì có sẵn (bị bỏ qua) sẽ chuyển ngược trở lại cho Apache. Apache gửi kết quả đó tới trình duyệt.
Như vậy, cái bạn nhận được sẽ là kết quả thực thi script của PHP trộn với những gì bạn thiết kế từ trước (ở dạng HTML, CSS, hình ảnh, v.v.).
Bạn có thể thắc mắc, vậy có thể gọi mở trang chúng tôi từ trình duyệt không?
File script này truy cập được qua URL chúng tôi Hãy nhập đường link http://localhost/learnphp/lib/functions.php vào trình duyệt.
Tuy nhiên, cái bạn nhận được là một giao diện trống rỗng. Lưu ý rằng trình duyệt không hề báo lỗi. Nếu bạn mở mã nguồn (Ctrl + U) hoặc Developer Tools (F12) sẽ thấy cái khung HTML trống rỗng.
Khi bạn gọi file này qua đường link như trên, cơ chế PHP vẫn thực thi toàn bộ code của chúng tôi Nhưng do file chúng tôi không hề có lệnh xuất dữ liệu nào, trong HTML kết quả cuối cùng không có gì. Do vậy trình duyệt nhận được một cái khung HTML trống rỗng.
Tích hợp PHP trong trang web
Khi chạy PHP tích hợp với web server, bạn bắt buộc phải đặt phần mở rộng của file script là php, ngay cả khi file chứa hỗn hợp HTML và PHP. Nếu đặt phần mở rộng khác, chương trình dịch PHP sẽ không hoạt động trên file.
Có 4 kiểu viết code PHP trộn lẫn với code HTML/XML: (1) kiểu tiêu chuẩn, còn gọi là kiểu XML, (2) kiểu SGML, (3) Kiểu ASP, (4) kiểu script.
Cần lưu ý rằng chương trình dịch PHP chỉ dịch và thực thi những gì nằm giữa các cặp tag PHP. Tất cả những gì nằm ngoài các khối PHP (ngoài các cặp tag PHP) sẽ bị chương trình dịch PHP bỏ qua và đưa thẳng vào HTML kết quả (cuối cùng gửi cho trình duyệt).
Khi file chỉ chứa mã PHP bạn có thể bỏ qua thẻ đóng. Tuy nhiên, khi tích hợp với HTML thì bạn phải chú ý theo dõi sự tương ứng giữa thẻ đóng với thẻ mở tương ứng. Thiếu thẻ đóng là một lỗi rất thường gặp.
Xuất thông tin ra trình duyệt
Ở giai đoạn đầu học PHP chúng ta chỉ xuất thông tin ra console với lệnh echo hoặc sử dụng PHP interactive shell. Khi tích hợp PHP với web server, thông tin chúng ta xuất ra sẽ được server gửi cho trình duyệt. Do vậy, nội dung xuất ra cơ bản sẽ là HTML.
Một điều may mắn là để xuất thông tin cho trình duyệt bạn có thể tiếp tục sử dụng lệnh echo quen thuộc. Ngoài echo, các lệnh quen thuộc khác như print, printf đều xuất dữ liệu cho trình duyệt. Tuy nhiên, giờ đây bạn cần nhớ và điều chỉnh một chút để xuất ra HTML, thay vì văn bản thuần (plaintext).
Nói cách khác, bạn không cần học các lệnh mới để xuất thông tin cho trình duyệt. Cái bạn cần là lưu ý rằng hoàn cảnh xuất dữ liệu của bạn giờ đây không còn là console nữa mà là trình duyệt. Và ngôn ngữ chính thức mà trình duyệt hiểu là HTML.
Với hầu hết các page, các nội dung chủ yếu xoay quanh các loại sau:
Văn bản: đây là nội dung chính ở các trang blog, tin tức.
Bảng biểu, danh sách: đây là nội dung thường gặp ở trang quản lý dữ liệu.
Form: đây là nội dung ở các trang nhập dữ liệu. Nội dung này sẽ được học trong một bài riêng.
Khi xuất thông tin/HTML cho trình duyệt bạn sẽ gặp những vấn đề hơi khác biệt trong console.
(1) Xuất các khối HTML lớn
Các khối văn bản lớn thường gặp là bảng hoặc danh sách. Để tạo các khối văn bản HTML lớn, cách tiện lợi nhất là sử dụng lối viết heredoc:
$list = <<<HTML HTML;
Bên trong khối văn bản này bạn có thể viết hoàn toàn HTML, hoặc kết hợp với biến/biểu thức PHP. Văn bản heredoc có thể thực hiện nội suy biến.
Dĩ nhiên, bạn hoàn toàn có thể sử dụng chuỗi trong cặp nháy đơn hoặc nháy kép vì chúng đều cho phép viết trên nhiều dòng. Tuy nhiên, nếu trong chuỗi HTML có sử dụng attribute thì lối viết này không tiện lợi lắm vì giá trị attribute của HTML cũng phải đặt trong cặp dấu nháy đơn hoặc nháy kép.
Đây là cách chúng ta đã sử dụng:
Ở vị trí của giá_trị bạn có thể để bất kỳ biểu thức nào.
(3) Sử dụng các lệnh điều khiển
Khi sử dụng lệnh điều khiển, bạn nên sử dụng lối viết tương đương thay vì lối viết truyền thống (với cặp dấu {}).
Lối viết này có ưu điểm lớn là dễ đọc do phẩn mở đầu và kết thúc lệnh là các từ khóa rõ ràng. Với lối viết này bạn không lo bị bỏ lỡ dấu đóng khối code } nữa.
Ngoài ra cũng nên sử dụng cú pháp tương đương (for – endfor, foreach-endforeach, v.v.) cho dễ đọc.
(5) Phân chia mã nguồn
Một trong những vấn đề mà người mới học lập trình PHP thường mắc phải là trộn lẫn lộn code PHP và mã HTML vào một file lớn! Bạn có thể thường xuyên gặp các đoạn code ví dụ chứa cả mã HTML + khai báo hàm + khai báo biến + truy xuất dữ liệu.
Đừng bao giờ làm như vậy!
Với cách tiếp cận của bài giảng này, ít nhất bạn cũng đã cảm nhận được rằng, mã PHP nên tách ra các file code riêng, và mã HTML nên để ở một file riêng.
Chúng ta đã vận dụng tư tưởng này qua việc phân chia mã PHP vào chúng tôi và HTML vào chúng tôi Trong chúng tôi chỉ sử dụng các lệnh xuất giá trị và lệnh điều khiển hỗ trợ hiển thị thông tin.
Trong bài học này chúng ta đã làm quen với những vấn đề cơ bản và thường gặp nhất khi sử dụng PHP trong môi trường web. Nhìn chung bạn có thể áp dụng nguyên vẹn những gì đã biết về PHP cơ bản trong môi trường này.
Tuy nhiên, bạn cần luôn lưu ý rằng trong môi trường web thì PHP thường xuyên phải đi cùng với HTML khi xuất dữ liệu cho người dùng, do vậy cần chú ý cách thể hiện các khối HTML (tích hợp HTML trong PHP), các viết giá trị (khi tích hợp PHP trong HTML), cách viết lệnh điều khiển.