Cơ bản về .htaccess
Những kí tự đặc biệt
[NC] : Chỉ định server so khớp nhưng kí tự không phân biệt hoa thường.
Ví dụ :
RewriteCond %{HTTP_REFERER} !
[PT]: có nghĩa là dùng kí tự để buộc "rewrite engine" ấn định bảng giá trị của uri trở thành giá trị của tên files
[OR] : các biểu thức được nối tiếp nhau bằng toán tử OR, trong đó biểu thức nào đúng, sẽ là quy tắc để lệnh Rewrite áp dụng.
Ví dụ:
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} ^Anarchie [OR]
RewriteCond %{HTTP_USER_AGENT} ^ASPSeek [OR]
RewriteCond %{HTTP_USER_AGENT} ^attach [OR]
RewriteRule ^.* - [F,L]
[NE] : Chỉ định server xử lí các gói tin trả về mà không dùng kí tự thoát
Những kí tự đặc biệt
[NS] : Chỉ định server bỏ qua thư mục hiện hành nếu request nhắm vào thư mục con.
[QSA] : chỉ định server gắn chuỗi truy vấn vào cuối cùng của URL
[S=x] : Chỉ định server bỏ qua không xem xét các X rules tiếp theo nữa nếu một rule đã được thực thi.
[T=MIME-type] : Khai báo định dạng files của server
[] : chỉ định các kí tự đặt đặt trong [] sẽ được match. Cụ thể [xyx] thì các request có mang theo các kí tự x, y hoặc z sẽ được match.
+ : chỉ định nội dung đừng trước dấu + phải xuất hiện ít nhất 1 lần
[^] : Ngược lại với [], các kí tự được đặt theo dạng [xyz^] sẽ không được match.
[a-z] : Dấu ‘-‘ đặt giữa 2 kí tự bên trong cặp dấu [] sẽ match tất cả các kí tự nằm trong khoảng từ kí tự đầu đến kí tự cuối.
53 trang |
Chia sẻ: trungkhoi17 | Lượt xem: 478 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Mã nguồn mở - Chương 5: Ngôn ngữ kịch bản PHP nâng cao - Nguyễn Minh Thành, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Ngôn ngữ kịch bản php nâng caoGiảng viên : ThS. Nguyễn Minh ThànhEmail : thanhnm@itc.edu.vnChương 5 : Môn Các Hệ Thống Mã Nguồn Mở1Nội DungCookieSessionXử lý FormGửi mailXử lý FileChuyển hướng website với .htaccessBắt lỗi chương trìnhHướng đối tượng trong PHPMôn Các Hệ Thống Mã Nguồn Mở2CookieMôn Các Hệ Thống Mã Nguồn Mở3a- 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.comUnicaNIODID4yZ3oOSlqrO-WrSL3kVibm.com/160014659229443047581154339995230113713*(tên tệp ndt@ibm[1]) ndt là PC name của clientCookie (tt)Môn Các Hệ Thống Mã Nguồn Mở4b- Thiết lập cookieCú 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.phpHàm time() trả về số giây đã trôi qua bắt đầu từ 01-Jan-1970Một dạng thời gian dùng trong hệ điều hành UnixCookie (tt)Môn Các Hệ Thống Mã Nguồn Mở5d- Đọc cookieTệp ReadCookie.php";else echo "Welcome guest!";?>$_COOKIE[] là một biến mảng toàn cụcHàm isset() kiểm tra một biến đã được khai báo, khởi gán chưaSessionMôn Các Hệ Thống Mã Nguồn Mở6a- 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 Sessionsession_start();// hàm session_start() phải đặt trước thẻ $_SESSION['username']=“NguyenMinhThanh";Ví dụ : Trang Save_Session.phpHàm header() chuyển hướng trình duyệt đến URL sau LocationSession (tt)Môn Các Hệ Thống Mã Nguồn Mở7c- Truy cập biến SessionTrang : Read_Session.php d- Xóa bỏ biến Sessionunset($_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ở8Tóm tắt:Thiết lậpsession_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-commerceForm – truyền nhận thông tinMôn Các Hệ Thống Mã Nguồn Mở9Giả 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ênPhả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ở10Ví dụ: Tệp DangKy.htmHọ tên: Đăng ký:Java C Pattern Trí tuệ nhân tạoTệ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ở11Xâ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.phpGửi mailMôn Các Hệ Thống Mã Nguồn Mở13Cú 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ở14Ví 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 mailCó thể lập trình để gởi mail đến danh sách các địa chỉ đã lưu trong CSDLXử Lý FileMôn Các Hệ Thống Mã Nguồn Mở151. Mở file $file=fopen("welcome.txt","r") or exit("Unable to open file!");Xử Lý FileMôn Các Hệ Thống Mã Nguồn Mở162- Đóng file fclose($file);Cách khác: Sử dụng hàm file(path) mở đọc file và đóng file luônVí 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ý FileMôn Các Hệ Thống Mã Nguồn Mở174- Đọc từng dòng trong file";}fclose($file);?>5- Đọc từng ký tự trong fileXử Lý FileMôn Các Hệ Thống Mã Nguồn Mở186-Upload fileFilename: Xử Lý FileMôn Các Hệ Thống Mã Nguồn Mở196-Upload fileUpload_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ề .htaccessMôn Các Hệ Thống Mã Nguồn Mở201. Đị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ề .htaccessMôn Các Hệ Thống Mã Nguồn Mở21Dấ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,denydeny from all7. Đặ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ụcresidesAuthType basicAuthName "Thư mục này đã được bảo vệ"AuthUserFile /home/path/.htpasswdAuthGroupFile /dev/nullRequire valid-user # Đặt mã cho fileAuthType BasicAuthName "Prompt"AuthUserFile /home/path/.htpasswdRequire valid-userCác ví dụ trong .htaccessMôn Các Hệ Thống Mã Nguồn Mở339. Đặ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.html10. 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ã sauRewriteRule ^category/(.+)$ [R=301,L] 11. Bỏ phần đuôi file ở URLKhông muốn hiện .php ở url, hãy thêm đoạn code sau:RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L]Các ví dụ trong .htaccessMôn Các Hệ Thống Mã Nguồn Mở3412. Thêm / vào cuối URLMộ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 URLRewriteBase /RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_URI} !#RewriteCond %{REQUEST_URI} !(.*)/$RewriteRule ^(.*)$ [L,R=301]Các ví dụ trong .htaccessMôn Các Hệ Thống Mã Nguồn Mở3513. 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ìnhKhi 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ở36Thay đổi mức độ bắt lỗiCác cấu hình về thông báo lỗi nằm trong file php.iniCấu hình trong php.inierror_reporting = E_ALL & ~E_NOTICEdisplay_errors = On | OffCấu hình bằng scripterror_reporting(OPTIONS);error_reporting(0);ini_set('display_errors',‘On');Môn Các Hệ Thống Mã Nguồn Mở37Tự bắt lỗi chương trìnhMôn Các Hệ Thống Mã Nguồn Mở38Khi 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ôngHoặ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 PHPMô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 PHPMôn Các Hệ Thống Mã Nguồn Mở40Hiể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 PHPMôn Các Hệ Thống Mã Nguồn Mở41Hiể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 PHPMôn Các Hệ Thống Mã Nguồn Mở42a- Đặc điểm OOP trong PHP 5.0 : không cho phép đa kế thừab- 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ở43Tệp Class1.phpho_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ảnPhươ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ở44Phương Thức Magic Trong OOPMôn Các Hệ Thống Mã Nguồn Mở45Phương Thức Magic Trong OOPMôn Các Hệ Thống Mã Nguồn Mở46Phương Thức Magic Trong OOPConvert qua một ChuỗiNế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ở47Sự kế thừa trong hướng đối tượngMộ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 extendsMôn Các Hệ Thống Mã Nguồn Mở48Kỹ thuật nạp chồng trong Hướng Đối TượngMôn Các Hệ Thống Mã Nguồn Mở49Tạ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 conGán tầm vực cho Thuộc Tính và Phương ThứcMôn Các Hệ Thống Mã Nguồn Mở50OOP 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ở51Ví dụ minh họa các từ khóa private, protected và publicpublic.""; // 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à MyClass2Mô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ốtecho $obj2->private; // Chưa được định nghĩaecho $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:
- bai_giang_ma_nguon_mo_chuong_5_ngon_ngu_kich_ban_php_nang_ca.pptx