Bài giảng Các hệ thống mã nguồn mở - Chương 5: Ngôn ngữ kịch bản PHP nâng cao

a- Session là một phiên làm việc kể từ khi client truy cập vào website cho đến khi đóng trình duyệt hay abandon(kết thúc) phiên.

PHP đưa ra biến toàn cục $_SESSION[] để lưu trữ thông tin, và biến này có thể truy cập từ mọi trang PHP trong phiên.

b- Khai báo và thiết lập Session

session_start();

// hàm session_start() phải đặt trước thẻ <html>

$_SESSION['username']=“NguyenMinhThanh";

Ví dụ : Trang Save_Session.php

 

<?php

session_start();

$_SESSION['username']=“NguyenMinhThanh";

header("Location:Read_Session.php");

?>

 

Hàm header() chuyển hướng trình duyệt đến URL sau Location

 

pptx52 trang | Chia sẻ: NamTDH | Lượt xem: 1016 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Bài giảng Các hệ thống mã nguồn mở - Chương 5: Ngôn ngữ kịch bản PHP nâng cao, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Click to edit Master title style Click to edit Master text styles Second level Third level Fourth level Fifth level 1/16/2013 Môn Các Hệ Thống Mã Nguồn Mở ‹#› Ngôn ngữ kịch bản php nâng cao Giảng viên : ThS. Nguyễn Minh Thành Email : thanhnm@itc.edu.vn Chương 5 : Môn Các Hệ Thống Mã Nguồn Mở 1 Nội Dung Cookie Session Xử lý Form Gửi mail Xử lý File Chuyển hướng website với .htaccess Bắt lỗi chương trình Hướng đối tượng trong PHP Môn Các Hệ Thống Mã Nguồn Mở 2 Cookie Môn Các Hệ Thống Mã Nguồn Mở 3 a- Cookie là mẫu tin nhỏ, có cấu trúc, dạng text lưu ở máy client khi truy cập một website (nếu kịch bản trong trang đó có chức năng thiết lập cookie).Cookie được lưu ở thư mục : C:\Documents and Settings\Administrator\Cookies Ví dụ đây là một mẫu cookie khi viếng trang www.ibm.com UnicaNIODID 4yZ3oOSlqrO-WrSL3kV ibm.com/ 1600 1465922944 30475811 543399952 30113713 * (tên tệp ndt@ibm[1]) ndt là PC name của client Cookie (tt) Môn Các Hệ Thống Mã Nguồn Mở 4 b- Thiết lập cookie Cú pháp: setcookie(name, value, expire[, path, domain]); Trong PHP, câu lệnh setcookie phải đặt trước thẻ Ví dụ : Trang CreateCookie.php Hàm time() trả về số giây đã trôi qua bắt đầu từ 01-Jan-1970 Một dạng thời gian dùng trong hệ điều hành Unix Cookie (tt) Môn Các Hệ Thống Mã Nguồn Mở 5 d- Đọc cookie Tệp ReadCookie.php "; else echo "Welcome guest!"; ?> $_COOKIE[] là một biến mảng toàn cục Hàm isset() kiểm tra một biến đã được khai báo, khởi gán chưa Session Môn Các Hệ Thống Mã Nguồn Mở 6 a- Session là một phiên làm việc kể từ khi client truy cập vào website cho đến khi đóng trình duyệt hay abandon(kết thúc) phiên. PHP đưa ra biến toàn cục $_SESSION[] để lưu trữ thông tin, và biến này có thể truy cập từ mọi trang PHP trong phiên. b- Khai báo và thiết lập Session session_start(); // hàm session_start() phải đặt trước thẻ $_SESSION['username']=“NguyenMinhThanh"; Ví dụ : Trang Save_Session.php Hàm header() chuyển hướng trình duyệt đến URL sau Location Session (tt) Môn Các Hệ Thống Mã Nguồn Mở 7 c- Truy cập biến Session Trang : Read_Session.php d- Xóa bỏ biến Session unset($_SESSION[‘tên']); session_destroy(); Đây là các câu lệnh dùng khi Logout, tuy nhiên khi session_destroy() phải lưu ý, vì có xóa những biến Session của hệ thống không? Session (tt) Môn Các Hệ Thống Mã Nguồn Mở 8 Tóm tắt: Thiết lập session_start(); $_SESSION[‘tên’]=giá_trị; Truy cập: session_start(); $biến = $_SESSION[‘tên’]; Xóa giá trị đã thiết lập : unset($_SESSION[‘tên’]); Hủy bỏ toàn bộ biến $_SESSION[]: session_destroy(); Session có rất nhiều ứng dụng, ví dụ như lưu trữ thông tin về giỏ hàng trong E-commerce Form – truyền nhận thông tin Môn Các Hệ Thống Mã Nguồn Mở 9 Giả sử method của Form là POST => server sẽ nhận được thông qua biến toàn cục $_POST[‘tên’], với ‘tên’ là giá trị của thuộc tính name của phần tử trong form. Cú pháp Form Biệt lệ : Các checkbox cùng tên Phải đặt cùng tên như là một phần tử của mảng động, ví dụ box[] Khi truy cập ở server chỉ lấy phần tên, ví dụ $_POST[‘box’], và trả về là một mảng gồm các value được chọn. Các trường hợp khác $_POST là một chuổi. Có thể dùng $_REQUEST thay cho $_POST và $_GET. Lưu ý: w3schools.com gọi chúng là Function, có lẽ không đúng! Môn Các Hệ Thống Mã Nguồn Mở 10 Ví dụ: Tệp DangKy.htm Họ tên: Đăng ký:Java C Pattern Trí tuệ nhân tạo Tệp XuLy.php ”; while(list($k,$v)=each($hocphan) $str+=$k.”-”$v.””; echo $str; ?> Môn Các Hệ Thống Mã Nguồn Mở 11 Xây dựng form Login “tự gọi” Một trang PHP tự gọi lại chính nó là một phong cách nhiều LTV PHP ưa thích. Dựa trên các kỹ thuật: Chỗ nào cần đưa các giá trị php chỉ cần Biến toàn cục lưu tên trang hiện thời : $_SERVER[‘PHP_SELF’] Câu lệnh if .. else .. endif của PHP để điều khiển luồng HTML Từ những kiến thức trên ta xây dựng một form đăng nhập. Môn Các Hệ Thống Mã Nguồn Mở 12 You are'nt login! > User Name: Password: You are login. - Sinh viên hãy dùng include() để ghép vào một trang khác. Trang Login.php Gửi mail Môn Các Hệ Thống Mã Nguồn Mở 13 Cú pháp: mail(to,subject,message,headers,parameters) Ý nghĩa các tham số: - to, subject, message : như ý nghĩa các text box khi soạn mail - headers :tùy chọn, có thể sử dụng Bcc, Cc - parameter: tùy chọn, các thông số về trình soạn, gởi mail Trong phần message: sử dụng ký hiệu \n để xuống dòng. Môn Các Hệ Thống Mã Nguồn Mở 14 Ví dụ : Tệp Send_mail.php Lưu ý: người gởi phải có một đia chỉ mail. Theo dõi các kỹ thuật chống spam của mỗi trình gởi, nhận mail của người nhận! Phối hợp với form để soạn thảo một trình gởi mail Có thể lập trình để gởi mail đến danh sách các địa chỉ đã lưu trong CSDL Xử Lý File Môn Các Hệ Thống Mã Nguồn Mở 15 1. Mở file $file=fopen("welcome.txt","r") or exit("Unable to open file!"); Xử Lý File Môn Các Hệ Thống Mã Nguồn Mở 16 2- Đóng file fclose($file); Cách khác: Sử dụng hàm file(path) mở đọc file và đóng file luôn Ví dụ : $myfile = 'vanban.txt'; $lines = file($myfile); // trả về mảng các dòng văn bản echo("Số dòng: ".count($lines).""); // cũng có thể dùng foreach($lines as $key=>$value) foreach($lines as $line) { echo($line."");}   3- Kiểm tra EOF if (feof($file)) echo "End of file"; Xử Lý File Môn Các Hệ Thống Mã Nguồn Mở 17 4- Đọc từng dòng trong file ";} fclose($file); ?> 5- Đọc từng ký tự trong file Xử Lý File Môn Các Hệ Thống Mã Nguồn Mở 18 6-Upload file Filename: Xử Lý File Môn Các Hệ Thống Mã Nguồn Mở 19 6-Upload file Upload_file.php 0) { echo "Return Code: " . $_FILES["file"]["error"] . "";}  else {      echo "Upload: " . $_FILES["file"]["name"] . "";      echo "Type: " . $_FILES["file"]["type"] . "";      echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb";      echo "Temp file: " . $_FILES["file"]["tmp_name"] . "";      if (file_exists("upload/" . $_FILES["file"]["name"])) {  echo $_FILES["file"]["name"] . " already exists. " }     else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);        echo "Stored in: " . "upload/" . $_FILES["file"]["name"];        }  } ?> Cơ bản về .htaccess Môn Các Hệ Thống Mã Nguồn Mở 20 1. Định nghĩa htaccess: Apache cung cấp khả năng cấu hình thông qua những files truy cập siêu văn bản . Những files này cho phép thay đổi tinh chỉnh của Apache (httpd.conf) . Theo mặc định file này có tên .htaccess.   .htaccess có tác dụng trên thư mục hiện hành (nơi chưa nó) và tất cả các thư mục con. Vì vậy, muốn sử dụng .htacess để quản lí truy cập vào website của mình, đơn giản bạn chỉ việc soạn thảo một file .htaccess, và lưu nó vào thư mục root của website. Cơ bản về .htaccess Môn Các Hệ Thống Mã Nguồn Mở 21 Dấu “#” này dùng để định nghĩa một đoạn comment trong httpd.conf, và .htaccess. Ví dụ : #Enable Rewrite mod  order allow,deny deny from all 7. Đặt mã cho thư mục và file Đặt mã & quyền truy cập vào thư mục/file như sau: # Đặt mã cho thư mục resides AuthType basic AuthName "Thư mục này đã được bảo vệ" AuthUserFile /home/path/.htpasswd AuthGroupFile /dev/null Require valid-user   # Đặt mã cho file AuthType Basic AuthName "Prompt" AuthUserFile /home/path/.htpasswd Require valid-user Các ví dụ trong .htaccess Môn Các Hệ Thống Mã Nguồn Mở 33 9. Đặt trang mặc định Đặt trang web mặc định cho thư mục nào đó. Ví dụ đặt file about.html thay cho file index.html: #Đặt trang mặc định (index) DirectoryIndex about.html 10. Bỏ một nội dung ở URL Để chuyển url từ: về -> bạn chỉ cần thêm vào file .htaccess đoạn mã sau RewriteRule ^category/(.+)$ [R=301,L] 11. Bỏ phần đuôi file ở URL Không muốn hiện .php ở url, hãy thêm đoạn code sau: RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L] Các ví dụ trong .htaccess Môn Các Hệ Thống Mã Nguồn Mở 34 12. Thêm / vào cuối URL Một vài bộ máy tìm kiếm (như Yahoo)tự động bỏ dấu / ở cuối url. Website cũng có thể được truy cập có hoặc không có dấu / ở sau cùng url. Điều này không tốt với các bộ máy tìm kiếm (sẽ bị coi là duplicated content). Thêm đoạn mã dưới đây vào .htaccess để giải quyết vấn đề đó: #Thêm / vào cuối URL RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !# RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ [L,R=301] Các ví dụ trong .htaccess Môn Các Hệ Thống Mã Nguồn Mở 35 13. Không cho "browse" thư mục Để ngăn chặn truy cập vào tên file trong thư mục nào đó (ví dụ thư mục plugins của wordpress), thêm đoạn mã sau vào file .htacess: Options All -Indexes Nếu muốn cho phép browse thư mục bạn chỉ cần đổi lại là:  Options All +Indexes   Bắt lỗi chương trình Khi có vấn đề trong quá trình thực thi, PHP luôn cố gắng đưa ra các thông báo lỗi hữu ích để người dùng (lập trình viên) xác định được vấn đề. Môn Các Hệ Thống Mã Nguồn Mở 36 Thay đổi mức độ bắt lỗi Các cấu hình về thông báo lỗi nằm trong file php.ini Cấu hình trong php.ini error_reporting = E_ALL & ~E_NOTICE display_errors = On | Off Cấu hình bằng script error_reporting(OPTIONS); error_reporting(0); ini_set('display_errors',‘On'); Môn Các Hệ Thống Mã Nguồn Mở 37 Tự bắt lỗi chương trình Môn Các Hệ Thống Mã Nguồn Mở 38 Khi chương trình thực thi có thể phát sinh lỗi ở một số hàm được gọi, nếu thấy không chắc chắn ta có thể bắt lỗi bằng hàm : die(“message”) functionname() or die(“message”); Khi hàm functionname có lỗi hàm die sẽ dừng chương trình và xuất thông báo. Trong chương trình có thể xảy ra những lỗi về logic, những lỗi này có thể được bắt thủ công Hoặc đẩy lỗi lên cho PHP tự thông báo. If ($height_of_door > $height_of_house) { echo “This is impossible”; exit(); } If ($height_of_door > $height_of_house) { trigger_error(“Impossible condition”,E_USER_ERROR); } Hướng đối tượng trong PHP Môn Các Hệ Thống Mã Nguồn Mở 39 “Lập trình hướng đối tượng là 1 phương pháp viết mã cho phép các lập trình viên nhóm các action tượng tự nhau vào các class”. Điều này giúp mã lệnh giữ vững được nguyên lý DRY “don’t repeat yourself” (không lặp lại chính nó) và dễ dàng để bảo trì. Một lợi ích to lớn của nguyên lý lập trình DRY là: nếu một phần thông tin nào đó được thay đổi trong chương trình, thì thông thường chỉ cần có duy nhất 1 thay đổi để cập nhật lại mã lệnh. Một trong những ác mộng lớn nhất đối với các lập trình viên là bảo trì mã lệnh, nơi dữ liệu được khai báo đi khai báo lại nhiều lần, họ phải tìm kiếm, làm việc trên các dữ liệu và chức năng trùng lặp. Hướng đối tượng trong PHP Môn Các Hệ Thống Mã Nguồn Mở 40 Hiểu Về Đối Tượng (Objects) Và Lớp (Class) Nhiều lập trình viên có kinh nghiệm cho rằng hai khái niệm object và class có thể thay thế cho nhau. Tuy vậy, đây không phải là vấn đề đáng quan tâm, mặc dù sự khác nhau giữa object và class có thể sẽ rất phức tạp khiến bạn phải bù đầu để tìm hiểu khi mới tiếp xúc với chúng. Hướng đối tượng trong PHP Môn Các Hệ Thống Mã Nguồn Mở 41 Hiểu Về Đối Tượng (Objects) Và Lớp (Class) Một object sau đó, cũng giống như một ngôi nhà thực tế được xây dựng dựa trên bản thiết kế này. Dữ liệu trong object ở đây có thể được xem như là gỗ, dây điện, và bê tông để tạo nên ngôi nhà hoàn chỉnh: mà không hề có chi tiết cách tạo ra chúng trong bản thiết kế. Tuy nhiên, khi kết hợp tất cả lại với nhau, nó sẽ trở thành một ngôi nhà hoàn chỉnh đến từng chi tiết. Các Class xử lý cấu trúc dữ liệu và các action, đồng thời sử dụng các thông tin đó để xây dựng các object. Có thể có nhiều hơn một object được xây dựng từ cùng một class tại cùng một thời điểm, mỗi object này đều là 1 cá thể độc lập và không phụ thuộc lẫn nhau. Trở lại vấn đề xây dựng, điều này cũng giống như một quần thể các lô nhà có thể được xây dựng trên cùng một bản thiết kế: 150 ngôi nhà khác nhau đều có hình dạng giống nhau, nhưng có các hộ gia đình và nội thất bên trong đều khác nhau. Hướng đối tượng trong PHP Môn Các Hệ Thống Mã Nguồn Mở 42 a- Đặc điểm OOP trong PHP 5.0 : không cho phép đa kế thừa b- Khai báo class Class tên_class{ // khai báo thuộc tính, bản chất là biến dùng trong class // khai báo các phương thức, bản chất là các hàm. Riêng hàm dựng // phải cùng tên với tên của class // sử dụng từ khóa private hay public và protected để xác định chế // độ truy xuất } c- Sử dụng - Tạo biến đối tượng: $tên_object = new tên_class([giá trị khởi tạo]); Sử dụng thuộc tính, phương thức: + $tên_object->tên_thuộc tính; + $tên_object->tên_phương thức([tham số]); Hướng đối tượng trong PHP (tt) Môn Các Hệ Thống Mã Nguồn Mở 43 Tệp Class1.php ho_ten = $hten; $this->ngay_sinh=$ngsinh; } } echo "Su dung ham constractor"; $hung=new hoso(“Nguyễn Minh Thành",“12/3/1985"); echo "Họ tên: " . $hung->ho_ten . “, Ngày sinh: " . $hung->ngay_sinh; ?> Ví dụ đơn giản Phương Thức Magic Trong OOP Để giúp cho việc sử dụng các object trở nên thuận tiện hơn, PHP đã cung cấp một số phương thức magic, chúng thường được gọi khi có những action nhất định thường xuyên xảy ra trong các object. Điều này cho phép lập trình viên thực thi một số tác vụ hữu ích dễ dàng. Phương thức Constructors (hàm dựng) và Destructors (hàm hủy) Khi một object được khởi tạo, nó thường kèm theo nhu cầu thiết lập một vài thứ ngoài lề. Để xử lý điều này, PHP cung cấp phương thức magic__construct(), phương thức này sẽ tự động được gọi ngay khi một object mới được khởi tạo. Để gọi một hàm khi object bị hủy, chúng ta có sẵn phương thức magic__destruct(). Thông thường nó được sử dụng vào mục đích dọn dẹp một cái gì đó (ví dụ: đóng một kết nối cơ sở dữ liệu). Môn Các Hệ Thống Mã Nguồn Mở 44 Phương Thức Magic Trong OOP Môn Các Hệ Thống Mã Nguồn Mở 45 Phương Thức Magic Trong OOP Môn Các Hệ Thống Mã Nguồn Mở 46 Phương Thức Magic Trong OOP Convert qua một Chuỗi Nếu muốn echo MyClass ra dưới dạng chuỗi, ta sẽ gặp lỗi. Để tránh được lỗi này, cần sử dụng một phương thức magic khác được gọi là__toString(). Môn Các Hệ Thống Mã Nguồn Mở 47 Sự kế thừa trong hướng đối tượng Một Class có thể kế thừa các phương thức và thuộc tính của class khác, bằng cách sử dụng từ khóa extends Môn Các Hệ Thống Mã Nguồn Mở 48 Kỹ thuật nạp chồng trong Hướng Đối Tượng Môn Các Hệ Thống Mã Nguồn Mở 49 Tại một class con, để thay đổi giá trị, tính năng của một thuộc tính hoặc phương thức đã có sẵn ở class cha, chỉ cần ghi đè (nạp chồng) lên nó bằng cách khởi tạo lại chính nó trong class con Gán tầm vực cho Thuộc Tính và Phương Thức Môn Các Hệ Thống Mã Nguồn Mở 50 OOP tập trung vào việc “đóng gói” các phương thức và thuộc tính của một đối tượng nào đó. Trong OOP, các thành viên trong một lớp cần phải được xác định xem chúng có thể được truy xuất từ đâu (tính rõ ràng). Có ba khả năng xảy ra: - Chế độ public: Các thành viên nếu được thiết lập ở chế độ này sẽ được nhìn thấy và truy xuất ở mọi nơi trong chương trình. - Chế độ private: Các thành viên nếu được thiết lập ở chế độ này sẽ chỉ được nhìn thấy và truy xuất được ở bản thân lớp định nghĩa thành viên đó. - Chế độ protected: Chế độ này sẽ được dùng để giới hạn truy cập tới các lớp được thừa kế và bản thân lớp định nghĩa thành viên đó. Với PHP5, tất cả các thành viên của một lớp đều phải được khai báo tính rõ ràng với các từ khoá tương ứng là public, protected và private. Môn Các Hệ Thống Mã Nguồn Mở 51 Ví dụ minh họa các từ khóa private, protected và public public.""; // bên trong lớp echo $this->protected.""; echo $this->private.""; } } class MyClass2 extends MyClass{ // thừa kế từ lớp MyClass protected $protected = 'Protected2'; function printHello(){ // chồng hàm echo $this->public.""; // thừa kế từ MyClass echo $this->protected.""; // lấy thuộc tính riêng echo $this->private.""; // không thừa kế từ MyClass } } Xem tiếp trang sau về sử dụng các lớp MyClass và MyClass2 Môn Các Hệ Thống Mã Nguồn Mở 52 $obj = new MyClass(); echo $obj->public; / echo $obj->protected; // lỗi: $protected đã bị đặt ở chế độ bảo vệ echo $obj->private; // lỗi: $private đã bị đặt ở chế độ riêng tư $obj->printHello(); // Hoạt động bình thường, do các thuộc tính được triệu gọi bên trong một phương thức nằm trong lớp. $obj2 = new MyClass2(); echo $obj->public; // Chạy tốt echo $obj2->private; // Chưa được định nghĩa echo $obj2->protected; // Gây lỗi $obj2->printHello(); // Hiển thị Public, Protected2, not Private ?> Hỏi Đáp ? Môn Các Hệ Thống Mã Nguồn Mở 53

Các file đính kèm theo tài liệu này:

  • pptxchuong_5_ngon_ngu_lap_trinh_web_php_nang_cao_7731.pptx