Bài giảng PHP Advances - Lương Trần Hy Hiến
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng PHP Advances - Lương Trần Hy Hiến", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_php_advances_luong_tran_hy_hien.pdf
Nội dung text: Bài giảng PHP Advances - Lương Trần Hy Hiến
- PHP Advances Luong Tran Hy Hien, FIT of HCMUP 1
- Nội dung 1. Hướng đối tượng 2. Truyền nhận dữ liệu (POST/GET) 3. Cookies, Sessions 4. Xử lý ngày tháng 5. Xử lý tập tin & thư mục 6. Upload tập tin lên Server 7. Hình ảnh 8. E-mail, Secure E-mail 9. Xử lý lỗi 2
- 1. Hướng đối tượng • Khai báo lớp • Hàm tạo • Phạm vi • Kế thừa • Hàm serialize,unserialize 3
- 1. Hướng đối tượng (tt) • Khai báo • Hàm tạo 4
- 1. Hướng đối tượng (tt) • Khai báo lớp class tên_lớp { các thuộc tính và phương thức } • Tạo và hủy một đối tượng $tên_biến = new tên_lớp(); Đối tượng sẽ tự động bị hủy khi không còn tham chiếu nào đến nó $tên_biến = NULL; 5
- 1. Hướng đối tượng (tt) • Các từ khóa khai báo: – public: có thể sử dụng bên ngoài lớp – private: chỉ sử dụng cục bộ bên trong lớp – protected: sử dụng được bởi các lớp kế thừa • Một số quy tắc chung: – Không thể khai báo hai method trùng tên – Method phải được khai báo ngay bên trong khai báo lớp – Dùng biến giả $this để truy xuất các member và method trong lớp – Dùng toán tử -> để truy xuất đến member và method 6
- 1. Hướng đối tượng (tt) • Khai báo constructor và destructor public function __construct(danh sách tham số) { khởi tạo giá trị các member } constructor được tự động thực hiện khi đối tượng được tạo public function __destruct() { dọn dẹp } destructor được tự động thực hiện khi đối tượng bị hủy 7 7
- 1. Hướng đối tượng (tt) 8
- 1. Hướng đối tượng (tt) • Khai báo const TÊN_HẰNG = giá trị; • Truy xuất tên_lớp::TÊN_HẰNG // ngoài lớp seft::TÊN_HẰNG // trong lớp 9
- 1. Hướng đối tượng (tt) • Khai báo static $thuộc_tính • Truy xuất tên_lớp::$thuộc_tính// ngoài lớp seft::$thuộc_tính // trong lớp 10
- 1. Hướng đối tượng (tt) • Khai báo – static function phương_thức( ) • Truy xuất – tên_lớp::phương_thức( ) // ngoài lớp – seft:: phương_thức( ) // trong lớp 11
- 1. Hướng đối tượng (tt) • Khai báo lớp con class lớp_con extends lớp_cha { các thuộc tính và phương thức } Tất cả các member và method được khai báo public hay protected trong lớp cha được thừa kế và có thể sử dụng trong lớp con 12
- Phương thức nạp chồng • Gọi một method lớp cha parent::phương_thức( ) Bằng cách định nghĩa lại một phương thức đã có ở lớp cha, tất cả các lời gọi đến phương thức này mà không chỉ định rõ như trên sẽ được hiểu là gọi phương thức có cùng tên của lớp con 13
- Sự đa hình • Khai báo lớp trừu tượng abstract class lớp_trừu_tượng { // các thuộc tính abstract public function phương_thức_trừu_tượng( ); // các phương thức khác } Không thể tạo đối tượng trực tiếp từ lớp trừu tượng Lớp con bắt buộc phải định nghĩa các phương thức trừu tượng của lớp cha 14
- Ngăn kế thừa và nạp chồng • Lớp không thể kế thừa final class không_thể_kế_thừa { } • Phương thức không thể nạp chồng final public function không_thể_nạp_chồng( ) { } 15
- interface • Khai báo Interface interface giao_diện { public function phương_thức(); } • Khai báo lớp theo mẫu Interface abstract class tên_lớp implements giao_diện { } Các lớp sử dụng Interface hay kế thừa từ một lớp sử dụng Interface bắt buộc phải định nghĩa tất cả các phương thức trong Interface đó 16
- 1. Hướng đối tượng (tt) 17
- 1. Hướng đối tượng (tt) 1. Hàm serialize() dùng để lưu trữ đối tượng, hàm trả về một chuỗi các byte để lưu thông tin của đối tượng 2. Hàm unserialize() dùng để khôi phục đối tượng được lưu giữ bởi hàm serialize() a = 10; $ob1->b = 100; $ob1->c = “Nguyen Ngoc Thuy Hang"; $luu = serialize($ob1); echo "$luu "; $ob2 = unserialize($luu); var_dump($ob2); 18 ?>
- 2. Truyền nhận dữ liệu (POST/GET) 2.1 Cơ chế truyền nhận dữ liệu 2.2 Các cách truyền nhận dữ liệu 19
- Cơ chế truyền nhận dữ liệu www.example.com Webserver 2 Internet or Intranet Yêu cầu trang b.php 7
- Cơ chế truyền nhận dữ liệu ?
- Cơ chế truyền nhận dữ liệu www.example.com Textbox : txtDangnhap Webserver Password Box: txtDangnhap 2 txtDangnhap = phpAdmin Internet or Intranet txtDangnhap = admin 7 Yêu cầu trang xlDangnhap.php
- 2. Truyền nhận dữ liệu (POST/GET) • Trang web nhập dữ liệu – Cách 1: truyền dữ liệu trực tiếp qua url • Sử dụng liên kết để sửa lại url • Thông qua đối tượng location – Cách 2: truyền dữ liệu thông qua form • Sử dụng đối tượng • Nhập liệu thông qua các formfield • Thực hiện việc truyền dữ liệu thông qua submit • Hai phương thức gởi dữ liệu GET / POST • Trang web nhận dữ liệu (dùng các biến toàn cục) – Cách 1: $_GET[“biến”] – Cách 2: $_POST[“biến”] – Cách 3: $_REQUEST[“biến”] 23
- 3. Cookies, Sessions 3.1 Cookies là gì? 3.2 Sử dụng cookies 3.3 Ví dụ Cookies 3.4 Session là gì? 3.5 Sử dụng session 3.6 Ví dụ session 24
- 3.1 Cookies là gì? . Là những mẫu tin được server lưu xuống máy của client . Mỗi lần client gửi request 1 trang web, đồng thời sẽ gửi kèm file cookie đã lưu lần trước lên server. . Việc xử lý thông tin (lưu, lấy) trong cookie do server thực hiện. . Thường được sử dụng để lưu thông tin cá nhân của client. cookie $_COOKIE setcookie 25 Client Webserver
- 3.2 Sử dụng cookies • Lệnh ghi cookie setcookie(name, value, expire, path, domain); setrawcookie(name, value, expire, path, domain); • name : Tên cookie • value : Giá trị cookie • expire : Thời điểm mà cookie hết hiệu lực • path : Đường dẫn trên server mà cookie có hiệu lực • domain : Xác định tên miền mà cookie được gởi đi • Bắt buộc phải xuất hiện trước thẻ • Lấy giá trị cookie echo $_COOKIE[“cookieName"]; • Xóa cookie setcookie(“cookieName", "", time() -3600);
- 3.3 Ví dụ Cookie $_COOKIE[fieldName] cookie Lưu username & password setcookie Client Webserver
- 3.4 Session là gì? User 2 User 1 Session: user 1 Session: user 2 Session: user 3 User 3 28
- 3.4 Session là gì? $_SESSION[sessionVar] Cookie: PHPSESSID session_start Client Webserver . Là thông tin về client được server lưu trên máy của server . Sử dụng session lưu định danh duy nhất cho từng client . Mục đích lưu biến dữ liệu dùng chung cho nhiều trang trong 1 phiên làm việc của client
- 3.5 Sử dụng session • Khởi động Session session_start(); • Ghi & Đọc giá trị Session $_SESSION[“sessionVar”] = $value ; $_SESSION[“sessionVar”] = array(); $_SESSION[“sessionVar”][] = $value; if (isset($_SESSION[“sessionVar"]) echo $_SESSION[“sessionVar"]; • Hủy Biến trong Session unset($_SESSION[“sessionVar”]); • Hủy cả Session session_destroy(); 30
- 3.6 Ví dụ : Đếm số lần duyệt trang web
- 3.6 VD2: Ứng dụng cho Login • Làm thế nào để ngăn không cho người dùng truy cập vào các trang web nếu chưa đăng nhập? • Ý tưởng: • Dùng các biến Session để lưu trạng thái đăng nhập của người dùng: $_SESSION[“IsLogin”] = true/false : Lưu trạng thái đăng nhập $_SESSION[“Username”] : Lưu Tên đăng nhập $_SESSION[“Authentication”] : Lưu Loại quyền đăng nhập
- Ứng dụng cho Login – Gồm 4 bước 1. Tạo trang login.html yêu cầu người dùng đăng nhập. 2. Tạo trang validateuser.php xử lí thông tin đăng nhập từ trang login.htm – Kết nối với CSDL, kiểm tra thông tin đăng nhập có hợp lệ hay không ? • Nếu không hợp lệ thì cho redirect về trang login.html. • Nếu hợp lệ thì dùng một biến trong Session để lưu trạng thái login thành công – Ví dụ: $_SESSION[“IsLogin”] = true. – Lưu ý: Phải đặt giá trị mặc định cho biến Session này là false khi khởi tạo một Session. 3. Tạo trang logout.php là trang xử lý khi người dùng logout . Reset trạng thái login là chưa đăng nhập ($_SESSION[“IsLogin”] = false).
- Session - Ứng dụng cho Login 4. Trong tất cả các trang muốn bảo mật, thêm đoạn mã sau để kiểm tra người dùng đã đăng nhập hay chưa, nếu chưa thì redirect lại trang login.html
- Giỏ hàng (shopping cart) Xóa biến trong Session {‘Book1’, ‘Book2’, ‘Book3’} Session : Array : Mathang [ ] Ghi xuống CSDL Session : Array : Soluong[ ] {13, 2, 7}
- Session – Cookie – Database Cookie1 Session 1 Cookie2 Client 1 Web Server Session 2 Session 3 Internet or Intranet Client 2 Database Server Cookie3 Client 3 Thông tin chia sẽ Vị trí Thời gian Số client Số trang web lưu trữ tồn tại sử dụng Database/File Server Dài Nhiều Nhiều Session Server Ngắn 1 Nhiều Cookies Client Dài 1 Nhiều
- 4. Xử lý ngày tháng
- 4. Xử lý ngày tháng 39
- Date and time formats DAYS d - day of the month 2 digits (01-31) j - day of the month (1-31) D - 3 letter day (Mon - Sun) l - full name of day (Monday - Sunday) N - 1=Monday, 2=Tuesday, etc (1-7) S - suffix for date (st, nd, rd) w - 0=Sunday, 1=Monday (0-6) z - day of the year (1=365) WEEK W - week of the year (1-52) MONTH F - Full name of month (January - December) m - 2 digit month number (01-12) n - month number (1-12) M - 3 letter month (Jan - Dec) t - Days in the month (28-31) YEAR L - leap year (0 no, 1 yes) 40 o - ISO-8601 year number (Ex. 1979, 2006)
- Date and time formats TIME a - am or pm A - AM or PM B - Swatch Internet time (000 - 999) g - 12 hour (1-12) G - 24 hour c (0-23) h - 2 digit 12 hour (01-12) H - 2 digit 24 hour (00-23) i - 2 digit minutes (00-59) s - 2 digit seconds (00-59) I - daylight savings (1=yes, 0=no) O - offset GMT (Ex: 0200) Z - offset in seconds (-43200 - 43200) 11:19:26 PM r - full RFC 2822 formatted date 41
- 5. Xử lý tập tin & thư mục 1. Sử dụng include() 2. Sử dụng include_once() 3. Sử dụng include_path cho các dự án lớn 4. Kiểm tra file 5. Đọc, ghi file 6. Làm việc với thư mục 42
- 5. Xử lý tập tin & thư mục (tt) • include(): – sử dụng để chia sẻ các hàm dùng chung, các đoạn mã chung trong một project có nhiều file. – khác cú pháp #include của ngôn ngữ C, lệnh này không chèn mã lệnh vào file mà thực thi file php giống như cú pháp gọi hàm. – thông báo warning nếu không tìm thấy file nhưng không dừng chương trình. • require() - tương tự include(), lệnh này có sự khác biệt là sẽ dừng ngay chương trình khi không tìm thấy file. 43
- 5. Xử lý tập tin & thư mục (tt) //vars.php Vì include() thực hiện lời gọi đến file php, return 4 + 4; ?> //test.php // A "; echo "A $color $fruit"; $retVal = include("file1.php"); // A green apple echo “Value file 1: $retVal "; echo "This is from file 2\n"; ?> ?> 44
- 5. Xử lý tập tin & thư mục (tt) • Có thể đặt lệnh include bên trong 1 cấu trúc điều kiện hoặc cấu trúc lặp, • Tùy theo điều kiện của cấu trúc mà include() có được thực hiện hay không, 1 hay nhiều lần, • Việc này giúp hỗ trợ cho việc thiết kế kiến trúc trang web tốt hơn. 45
- 5. Xử lý tập tin & thư mục (tt) • include_once() giống như include(), tuy nhiên có điểm khác biệt là chỉ include 1 lần, lần sau nếu gặp lại file này thì ko include nữa • include_once() phân biệt chữ hoa, chữ thường Vì phân biệt chữ hoa/thường nên include_one chèn thêm lần thứ hai
- 5. Xử lý tập tin & thư mục (tt) • include file theo đường dẫn tuyệt đối: Cách này dở vì khi cài đặt trên máy khác sẽ không tìm thấy file được include • include file theo đường dẫn tương đối: Cách này tốt hơn, nhưng mỗi khi đổi vị trí của file được include thì phải sửa lại tại tất cả các file thực hiện lời gọi include • Cách tốt nhất là sử dụng include_path (thiết lập trong file PHP.INI) đối với những file thư viện dùng chung được sử dụng nhiều (giống như đối với ngôn ngữ C) 47
- 5. Xử lý tập tin & thư mục (tt) . thay đổi include_path trong PHP.INI . dùng lệnh set_include_path() . dùng lệnh ini_set()
- 5. Xử lý tập tin & thư mục (tt) file_exist(), is_file(), is_dir(), is_readable(), is_writeable(), is_executable(), filesize(), fileatime() "; return; } print "$file is ".(is_file( $file )?"":"not ")."a file \n"; print "$file is ".(is_dir( $file )?"":"not ")."a directory \n"; print "$file is ".(is_readable( $file )?"":"not ")."readable \n"; print "$file is ".(is_writable( $file )?"":"not ")."writable \n"; print "$file is ".( filesize($file))." bytes \n"; print "$file was accessed on ".date( "D d M Y g:i A", fileatime($file ))." "; print "$file was modified on ".date( "D d M Y g:i A", filemtime( $file))." "; print "$file was changed on".date( "D d M Y g:i A", filectime($file))." "; } outputFileTestInfo("c:\\windows\\system32\\cmd.exe"); 49 ?>
- 5. Xử lý tập tin & thư mục (tt) fopen($filename, $mode); fwrite($handle, $string); fread($handle, $length); fgets($handle); sprintf($format); fscanf($handle, $format); fseek($handle, $offset); fclose($handle); file_get_contents($filename); 50
- 5. Xử lý tập tin & thư mục (tt) } fclose($f); 51
- 5. Xử lý tập tin & thư mục (tt)
- 5. Xử lý tập tin & thư mục (tt) a = 10; $ob1->b = 100.023; $ob1->c = "Test String"; var_dump($ob1); $f = fopen("test.txt", "wb"); fwrite($f, serialize($ob1)); fclose($f); $f = fopen("test.txt", "rb"); $ob2 = unserialize(fgets($f)); fclose($f); var_dump($ob2); ?> 53
- 5. Xử lý tập tin & thư mục (tt) • mkdir(), rmdir() • opendir(), readdir(), closedir() 54
- 6. Upload tập tin lên server • Gửi các file lên server (upload) là một chức năng không thể thiếu đối với các ứng dụng Web- based. • Để form có thể upload file, ta phải xác định thuộc tính enctype của form có giá trị "multipart/form-data”. • Với PHP, bạn có thể xác định kích thước lớn nhất của file upload bằng cách đặt thêm 1 hidden field có tên MAX_FILE_SIZE trước control file. 55
- 6. Upload tập tin lên server Yêu cầu trang upload.php Webserver Internet file or Intranet Disk driver Upload.php • $_FILES[“file”]["name"] • $_FILES[“file”]["type"] • $_FILES[“file”]["size"] • $_FILES[“file”]["tmp_name"] • $_FILES["file”]["error"]
- 6. Upload tập tin lên server Mảng $_FILE Element Contains Example $ FILES['taptin']['name'] Name of uploaded file test.gif $_FILES['taptin']['tmp_name'] Path to temporary file /tmp/phprDfZvN $_FILES['taptin']['size'] Size (in bytes) of uploaded file 6835 $_FILES['taptin']['error'] An error code corresponding UPLOAD_ERR_FO to a PHP constant RM_SIZE $_FILES['taptin']['type'] MIME type of uploaded file image/gif (where given by client) 57
- 6. Upload tập tin lên server Mã lỗi Constant Name Value Explanation UPLOAD_ERR_OK 0 No problem UPLOAD_ERR_INI_SIZE 1 File size exceeds php.ini limit set in upload_max_filesize UPLOAD_ERR_FORM_SIZE 2 File size exceeds limit set in hidden element named MAX_FILE_SIZE UPLOAD_ERR_PARTIAL 3 File only partially uploaded UPLOAD_ERR_NO_FILE 4 File was not uploaded 58
- 6. Upload tập tin lên server 59
- 6. Upload tập tin lên server 60
- Kiểm tra lỗi, định dạng, kích thước File upload • Lưu ý : – $_FILES[“ ”][“type”] • “image/gif” • “image/jpeg” Firefox nhận đây là file jpeg • “image/pjpeg” IE nhận đây là file jpeg – $_FILES[“ ”][“size”] : Kích thước file tính theo byte – $_FILES[“ ”][“error”] : Mã lỗi khi upload File • = 0 : Không có lỗi • > 0 : Có lỗi
- 7. Hình ảnh Vẽ ảnh từ văn bản 62
- 8. E-mail, Secure E-mail • Sử dụng thư viện open source: PHP Mailer • Chép 3 file: class.phpmailer.php, class.smtp.php, phpmailer.lang-en.php vào thư mục web của site 63
- Gởi email sử dụng Mail Server của GMail
- 9. Xử lý lỗi • Sử dụng try catch try { // do something that can go wrong } catch (Exception $e) { throw new Exception( 'Something really gone wrong', 0, $e); } 65
- Toán tử điều khiển lỗi • Toán tử điều khiển lỗi (@) dùng để đặt trước các hàm,biểu thức. Khi đó tất cả các thông báo lỗi trong hàm, biểu thức đó bị bỏ qua. • Ví dụ: 66
- Tham khảo • Website W3school • Slide lập trình Web, ĐH KHTN, 2007 67
- THE END