Chương 1:
Môn Các Hệ Thống Mã Nguồn Mở
TỔNG QUAN VỀ CÁC HỆ THỐNG MÃ NGUỒN MỞ
22/03/2016
1
Môn Các Hệ Thống Mã Nguồn Mở
Nội Dung
1. Khái niệm về phần mềm nguồn mở 2. Lợi ích của phần mềm nguồn mở 3. Nhược điểm của các hệ thống mã nguồn mở 4. Các loại giấy phép 5. Phân loại các nhóm phần mềm mã nguồn mở 6. Phần mềm miễn phí dạng dịch vụ (SaaS) 7. Yêu cầu đề tài
2
Môn Các Hệ Thống Mã Nguồn Mở
Khái niệm về phần mềm nguồn mở
• Phần mềm nguồn mở (PMNM) là phần mềm được cung
cấp với cả mã và nguồn.
• Không chỉ là miễn phí về giá mua mà chủ yếu là miễn phí
về bản quyền: người dùng có quyền sửa đổi, cải tiến,
phát triển, nâng cấp theo một số nguyên tắc chung quy
định trong giấy phép phần mềm nguồn mở (General
Public Licence - GPL).
3
Khái niệm về phần mềm nguồn mở (tt)
• PMNM không phải lúc nào cũng miễn phí.
• Nhà cung cấp PMNM có thể không thu phí sử dụng phần
mềm nhưng có thể thu phí các dịch vụ khác như: bảo
hành, huấn luyện, nâng cấp, tư vấn, vv… tức là những
dịch vụ để phục vụ người dùng, nhưng không được bán
các sản phẩm nguồn mở vì nó là tài sản của trí tuệ chung,
không phải là tài sản riêng của một nhà cung cấp nào.
• Hoặc các công cụ hỗ trợ thêm cho phần mềm có thể bị
thu phí.
Môn Các Hệ Thống Mã Nguồn Mở
4
Khái niệm về phần mềm nguồn mở (tt)
• Các nhà cung cấp PMNM có quyền không hỗ trợ bạn
trong quá trình sử dụng phần mềm hoặc phải mất một
mức phí để được hỗ trợ.
• Phần này không có trong giấy phép sử dụng PMNM.
Môn Các Hệ Thống Mã Nguồn Mở
5
Khái niệm về phần mềm nguồn mở (tt)
• Người dùng có đầy đủ quyền truy cập vào mã nguồn.
• Tự do sử dụng chương trình cho mọi mục đích, quyền tự
do để nghiên cứu cấu trúc của chương trình, chỉnh sữa
phù hợp với nhu cầu, truy cập vào mã nguồn, quyền tự
do phân phối lại các phiên bản cho nhiều người, quyền tự
do cải tiến chương trình và phát hành những bản cải tiến
vì mục đích công cộng.
Môn Các Hệ Thống Mã Nguồn Mở
6
Môn Các Hệ Thống Mã Nguồn Mở
Lịch sử phát triển
• 1983: Xu hướng phần mềm miền phí “Free Software” bắt đầu
• 1995: Free Software Foundation đưa ra định nghĩa về phần
mềm miễn phí.
• 1998: Tổ chức “Open Source Initiative” do Eric S. Raymond và
Bruce Perens thành lập đã đổi thuật ngữ “phần mềm miễn phí”
thành “phần mềm nguồn mở”
• Miễn phí
• Có source code
• Có thể thay đổi, tinh chỉnh source code
7
Môn Các Hệ Thống Mã Nguồn Mở
Lợi ích của phần mềm nguồn mở
• Tính an toàn
• Tính ổn định/đáng tin cậy
• Các chuẩn mở và việc không phải lệ thuộc nhà cung cấp
• Giảm phụ thuộc vào nhập khẩu
• Phát triển năng lực của ngành công nghiệp phần mềm địa
phương
• Vấn đề vi phạm bản quyền, quyền sở hữu trí tuệ, và tính tuân
thủ WTO
• Nội địa hoá
8
Môn Các Hệ Thống Mã Nguồn Mở
Nhược điểm của PMNM
• Nhiều lĩnh vực chưa có sản phẩm phần mềm hoàn thiện
• Không hoàn toàn tương thích với PMNĐ
• Thiếu tính tiện dụng vốn là đặc trưng của phần mềm thương
mại
• Không có sự hỗ trợ một cách chính thức
9
Môn Các Hệ Thống Mã Nguồn Mở
Các loại giấy phép
• Phần mềm thương mại (Commercial Software)
• Là phần mềm thuộc bản quyền của tác giả hoặc nhà sản xuất, chỉ
được cung cấp ở dạng mã nhị phân, người dùng phải mua và
• Phần mềm thử nghiệm giới hạn (Limited Trial Software)
• Là những phiên bản giới hạn của các phần mềm thương mại được
cung cấp miễn phí nhằm mục đích thử nghiệm, giới thiệu sản
không có quyền phân phối lại.
phẩm và kích thích người dùng quyết định mua. Loại sản phấm
này không chỉ giới hạn về tính năng mà còn giới hạn về thời gian
dùng thử (thường là 60 ngày).
10
Môn Các Hệ Thống Mã Nguồn Mở
Các loại giấy phép
• Người phổ biến một chương trình đã được cấp phép đại chúng phải
Giấp phép đại chúng GNU (General Public License)
• Nếu người phổ biến chương trình đã thực hiện một sửa đổi gì đó cho
đồng thời phổ biến luôn cả mã nguồn cho người nhận
phần mềm thì những sửa đổi đó cũng phải được cấp phép theo chế
• Người phổ biến chương trình không áp dụng với người nhận bất cứ
hạn chế nào không thuộc phạm vi giấy phép đại chúng
• Người nhận một phần mềm đã cấp phép đại chúng sẽ được trao y
độ giấy phép đại chúng
nguyên mọi quyền như người phổ biến gốc, tức là quyền sao chép,
chỉnh sửa và phổ biến phần mềm
11
Môn Các Hệ Thống Mã Nguồn Mở
Các loại giấy phép
Giấp phép BSD (Berkeley System Distribution)
• Ghi nhận công lao của tác giả đầu tiên làm ra phần mềm
bằng cách đưa vào file mã nguồn các thông tin bản quyền
gốc
• Người phát hành ban đầu sẽ không chịu trách nhiệm
trước pháp luật về bất cứ thiệt hại nào phát sinh do sử
dụng những phần mềm nguồn mở đã được chỉnh sửa
12
Môn Các Hệ Thống Mã Nguồn Mở
Các loại giấy phép
Giấp phép đại chúng Giấp phép BSD
Phải phổ biến mã nguồn gốc Có Không
Phải phổ biến mã nguồn người dùng tạo mới
Có
Không
Có Không
Mã nguồn tạo mới phải được cấp phép đại chúng
13
Môn Các Hệ Thống Mã Nguồn Mở
Các loại giấy phép khác
• EU DataGrid Software License • Eclipse Public License • Educational Community License • Eiffel Forum License • Eiffel Forum License V2.0 • Entessa Public License • Fair License • Frameworx License • GNU General Public License • (GPL) • GNU Library or "Lesser" • General Public License (LGPL) • Historical Permission Notice and
• Academic Free License • Adaptive Public License • Apache Software License • Apache License, 2.0 • Apple Public Source License • Artistic license • Attribution Assurance Licenses • New BSD license • Computer Associates Trusted • Open Source License 1.1 • Common Development and • Distribution License • Common Public License 1.0 • CUA Office Public License
Disclaimer
Version 1.0
14
Môn Các Hệ Thống Mã Nguồn Mở
Các loại giấy phép khác
• NASA Open Source Agreement
1.3
• IBM Public License • Intel Open Source License • Jabber Open Source License • Lucent Public License (Plan9) • Lucent Public License Version
• Naumen Public License • Nethack General Public License • Nokia Open Source License • OCLC Research Public License
1.02
2.0
• Open Group Test Suite License • Open Software License
• MIT license • MITRE Collaborative Virtual Workspace License (CVW License)
• Motosoto License • Mozilla Public License 1.0 (MPL) • Mozilla Public License 1.1 (MPL)
15
Môn Các Hệ Thống Mã Nguồn Mở
Các loại giấy phép khác
• PHP License • Python license (CNRI Python
• Sun Public License • Sybase Open Watcom Public
License)
License 1.0
• Python Software Foundation
• University of Illinois/NCSA Open
Source License
License
• Vovida Software License v. 1.0
W3C License
• Qt Public License (QPL) • RealNetworks Public Source
License V1.0
• Reciprocal Public License • Ricoh Source Code Public
• wxWindows Library License • X.Net License • Zope Public License • zlib/libpng license
License
• Sleepycat License • Sun Industry Standards Source
License (SISSL)
16
Môn Các Hệ Thống Mã Nguồn Mở
Phân loại phần mềm nguồn mở
• Các phần mềm NM có thể được phân loại theo chức
năng
• Hệ điều hành
• Cơ sở dữ liệu
• Ứng dụng trên Desktop
• Ứng dụng Server
• Ứng dụng Web
17
Môn Các Hệ Thống Mã Nguồn Mở
Phân loại phần mềm nguồn mở
• Nhóm hệ điều hành
• Linux
• Unix
• Android
• …
18
Môn Các Hệ Thống Mã Nguồn Mở
Phân loại phần mềm nguồn mở (tt)
• Nhóm Cơ sở dữ liệu
• MySQL
• Cassandra
• PostgreSQL
• …
19
Môn Các Hệ Thống Mã Nguồn Mở
Phân loại phần mềm nguồn mở (tt)
• Nhóm ứng dụng Desktop
• Open Office
• Xara Xtreme
• GZIP
• Eclipse
• …
20
Môn Các Hệ Thống Mã Nguồn Mở
Phân loại phần mềm nguồn mở (tt)
• Nhóm Server
• Webserver
• File Server
• Apache
• XtreemFS
• NGINX
• HFS
• Lighttpd
• Openfiler
• Mail Server
• SENDMAIL
• QMAIL
• POSTFIX
• EXIM
21
Môn Các Hệ Thống Mã Nguồn Mở
Phân loại phần mềm nguồn mở (tt) • Nhóm ứng dụng Web trên nền PHP: loại ứng dụng rộng rãi hiện nay
http://www.softaculous.com/softaculous/apps 22
Môn Các Hệ Thống Mã Nguồn Mở
Phân loại phần mềm nguồn mở (tt)
• Loại hệ thống chuyên về CMS/Portal
23
Môn Các Hệ Thống Mã Nguồn Mở
Phân loại phần mềm nguồn mở (tt)
• Loại hệ thống chuyên về Forum
24
Môn Các Hệ Thống Mã Nguồn Mở
Phân loại phần mềm nguồn mở (tt)
• Loại hệ thống chuyên về Blog
25
Môn Các Hệ Thống Mã Nguồn Mở
Phân loại phần mềm nguồn mở (tt)
• Loại hệ thống chuyên về thương mại điện tử (eCommerce)
26
Môn Các Hệ Thống Mã Nguồn Mở
Phân loại phần mềm nguồn mở (tt)
• Loại hệ thống chuyên về ERP
27
Môn Các Hệ Thống Mã Nguồn Mở
Phân loại phần mềm nguồn mở (tt)
• Loại hệ thống chuyên về Giáo dục (Education)
28
Môn Các Hệ Thống Mã Nguồn Mở
Phân loại phần mềm nguồn mở (tt)
• Loại hệ thống chuyên về Social Networking
29
Môn Các Hệ Thống Mã Nguồn Mở
Phân loại phần mềm nguồn mở (tt)
• Các loại hệ thống Open Source Web trên nền .NET
30
Phần mềm miễn phí dạng dịch vụ (SaaS)
Môn Các Hệ Thống Mã Nguồn Mở
31
Phần mềm miễn phí dạng dịch vụ (SaaS)
• Bên cạnh phần mềm tự do và mã nguồn mở, xu hướng
hiện tại cung cấp phần mềm dưới dạng dịch vụ.
• Chuyển từ “mua” sang “thuê” phần mềm.
• Hay cung cấp miễn phí với tính năng tối thiểu,trả phí với
tính năng mở rộng - Freemium
• Dùng bao nhiêu trả tiền bấy nhiêu.
Môn Các Hệ Thống Mã Nguồn Mở
32
Phần mềm miễn phí dạng dịch vụ (SaaS)
• SaaS – Software as a Service
• Dữ liệu được lưu trữ trên “mây” (Internet)
• Truy cập phần mềm qua web browser
Môn Các Hệ Thống Mã Nguồn Mở
33
Phần mềm miễn phí dạng dịch vụ (SaaS)
Lợi ích
• Truy cập được từ bất cứ đâu, bất cứ thời điểm nào
• Chi phí thường rẻ hơn mua phần mềm dạng sảnphẩm
(không phải trả tiền cho những tính năngkhông dùng)
• Không cần sắm, cài đặt, bảo trì, hệ thống hay máy chủ.
Đơn giản chỉ cần có thiết bị truy cập được và Internet.
• Không phụ thuộc nền tảng (platform)
Môn Các Hệ Thống Mã Nguồn Mở
34
Phần mềm miễn phí dạng dịch vụ (SaaS)
Nhược điểm
• Kết nối Internet và tốc độ đường truyền
• Khó tùy biến để đáp ứng nhu cầu đặc thù của doanh
nghiệp
• Rủi ro về bảo mật thông tin
• Lệ thuộc vào nhà cung cấp dịch vụ
Môn Các Hệ Thống Mã Nguồn Mở
35
Môn Các Hệ Thống Mã Nguồn Mở
Hỏi Đáp ?
36
Chương 2:
Môn Các Hệ Thống Mã Nguồn Mở
TỔNG QUAN VỀ WAMP SERVER
22/03/2016
37
Môn Các Hệ Thống Mã Nguồn Mở
Nội Dung
1. Giới thiệu về Wamp Server 2. Các thành phần trong Wamp Server 3. Cài đặt Wamp Server 4. Sử dụng Wamp Server
38
Môn Các Hệ Thống Mã Nguồn Mở
Giới Thiệu Về Wamp Server
• WampServer
là một môi
trường phát
triển web cho
Windows với các thành phần:
• Apache
• PHP
• MySQL
• Website: http://www.wampserver.com/
• Phiên bản mới nhất là WampServer 2.2E
39
Môn Các Hệ Thống Mã Nguồn Mở
Giới Thiệu Về Wamp Server
• Tự động cài đặt toàn hệ thống, dễ sử
dụng
• Dễ dàng nâng cấp phiên bản mới của
các module con (Apache, PHP, MySQL)
• Tự nhận diện sự tương thích các phiên
bản của các module với nhau
40
Môn Các Hệ Thống Mã Nguồn Mở
Giới Thiệu Về Wamp Server
• Tự động cài đặt toàn hệ thống, dễ sử
dụng
• Dễ dàng nâng cấp phiên bản mới của
các module con (Apache, PHP, MySQL)
• Tự nhận diện sự tương thích các phiên
bản của các module với nhau
41
Các Thành Phần Trong WampServer 2.2E
• Webserver: Apache 2.4.2
• CSDL: MySQL 5.5.24
• PHP Engine: 5.4.3
• Website quản lý Database Server: phpMyAdmin
• Quản lý Webserver bằng Website
Môn Các Hệ Thống Mã Nguồn Mở
42
Cài đặt Wamp Server
• Download
WAMP
SERVER
từ
địa
chỉ
http://www.wampserver.com/ (lưu ý: chọn đúng bản 32bit
hoặc 64bit
• Double click vào file cài đặt
Môn Các Hệ Thống Mã Nguồn Mở
43
Cài đặt Wamp Server
• Chọn thư mục chứa Wamp
Môn Các Hệ Thống Mã Nguồn Mở
44
Cài đặt Wamp Server
• Chọn trình duyệt mặc định cho Wamp
Môn Các Hệ Thống Mã Nguồn Mở
45
Cài đặt Wamp Server
• Chọn tài khoản mail để thực thi chức năng gửi mail trong
website
Môn Các Hệ Thống Mã Nguồn Mở
46
Cài đặt Wamp Server
• Chọn tài khoản mail để thực thi chức năng gửi mail trong
website
Môn Các Hệ Thống Mã Nguồn Mở
47
Sử dụng Wamp Server – Khởi động
• Double
click
vào
biểu
Wamp trên Desktop
• Sau khi khởi động, Wamp
Server sẽ tự động chạy 2
dịch vụ là
• Wampapache
• Wampmysqld
Môn Các Hệ Thống Mã Nguồn Mở
48
Sử dụng Wamp Server – Khởi động
• Một biểu tượng xuất hiện ở khay hệ thống cho phép tắt,
khởi động lại Wamp cũng như các dịch vụ
Môn Các Hệ Thống Mã Nguồn Mở
49
Sử dụng Wamp Server – Khởi động
• Chạy thử trang thông tin của Server
• Click localhost
Môn Các Hệ Thống Mã Nguồn Mở
50
Sử dụng Wamp Server – Cấu Hình Port
• Sau khi đặt, Apache sử dụng port 80 (port chuẩn của
Windows)
• IIS cũng sử dụng port 80
• Khắc phục
• Thay port của IIS: 80 81 (hoặc port khác)
• Thay port của Apache: 80 81
Môn Các Hệ Thống Mã Nguồn Mở
51
Sử dụng Wamp Server – Cấu Hình Port
• Thay đổi Port cho Apache: 80 81
• Mở
Môn Các Hệ Thống Mã Nguồn Mở
tập tin http.conf trong thư mục
notepad chẳng hạn.
• Tìm Listen 80 và sửa lại thành Listen 81
C:/wamp/bin/apache/Apache.x.y.z/conf/ bằng một trình soạn thảo,
52
Sử dụng Wamp Server – Cấu Hình Port
• Thay đổi Port cho Apache:
• Thay đổi
Môn Các Hệ Thống Mã Nguồn Mở
tiếp các alias ở khay hệ
• Mở tập tin wampmanager.ini trong thư
mục /wamp/.
• Thay đổi tất cả các dòng http://localhost/
thành http://localhost:81/
thống chạy bằng port 81
53
Sử dụng Wamp Server – PhpMyAdmin
• Wamp cung cấp một hệ thống website PhpMyAdmin để
quản lý CSDL trong MySQL
Môn Các Hệ Thống Mã Nguồn Mở
54
Sử dụng Wamp Server – PhpMyAdmin
• Tạo CSDL mới
Môn Các Hệ Thống Mã Nguồn Mở
55
Sử dụng Wamp Server – PhpMyAdmin
• Các chức năng
Môn Các Hệ Thống Mã Nguồn Mở
56
Sử dụng Wamp Server – PHP Website
• Chạy thử một website PHP
• Tạo một trang web php (vd: test.php) và gõ lệnh sau:
echo ‘Chào bạn đến với Website’
• Lưu trang web vào thư mục C:\Wamp\www
• Chạy trang web: mở trình duyệt và gõ đường dẫn
Môn Các Hệ Thống Mã Nguồn Mở
http://localhost:81/text.php
57
Lưu ý
• Ngoài WampServer, sinh viên có thể sử dụng các loại
Web Server khác (tùy thích)
• AppServer
• Zend Server
• XampServer
Môn Các Hệ Thống Mã Nguồn Mở
58
Hỏi Đáp ?
Môn Các Hệ Thống Mã Nguồn Mở
59
Chương 3:
Môn Các Hệ Thống Mã Nguồn Mở
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MYSQL
22/03/2016
60
Môn Các Hệ Thống Mã Nguồn Mở
Nội Dung
1. Tổng quan về MySQL 2. Khởi động và tắt dịch vụ MySQL 3. Truy cập MySQL 1. MySQL Console 2. PhpMyAdmin
4. Thay đổi password cho root (tài khoản mặc định) 5. Các thao tác trên CSDL 6. Định nghĩa bảng 7. Truy vấn dữ liệu
Import và Export dữ liệu
8. 9. Công cụ đồ họa MySQL GUI TOOLS
61
Môn Các Hệ Thống Mã Nguồn Mở
Tổng Quan Về MySQL
• MySQL là một hệ quản trị cơ sở dữ liệu đa luồng mã
nguồn mở tương tự như SQL Server, Oracle…
• Chuyên dụng cho mọi mức độ doanh nghiệp. • MySQL được phát triển bởi một công ty tư vấn và phát triển ứng dụng của Thuỵ Điển có tên là TcX sau đổi tên thành MySQL AB.
• Hiện nay, MySQL đã được Oracle mua lại. • MySQL được phát triển phổ biến cho hệ điều hành Linux, tuy nhiên, với các phiên bản mới hiện nay, nó đã có thể sử dụng tốt trên của hệ điều hành Windows.
• MySQL có nhiều phiên bản phát hành: các cá nhân có thể được dùng miễn phí tuy nhiên các doanh nghiệp thì cần phải trả phí mới được sử dụng.
62
Môn Các Hệ Thống Mã Nguồn Mở
Đặc điểm MySQL
• Tốc độ truy xuất nhanh, ổn định, dễ sử dụng • Có tính khả chuyển, hoạt động trên nhiều nền tảng HĐH • Cung cấp hệ thống thư viện hàm lớn • Khả năng bảo mật tốt • Hoạt động như một hệ client/server hoặc trong hệ thống
nhúng.
• Thích hợp cho các hệ thống trên Internet (Yahoo!, Alcatel,
Google, Nokia, YouTube…)
• Được hỗ trợ bởi nhiều ngôn ngữ lập lập trình
63
Môn Các Hệ Thống Mã Nguồn Mở
Lịch sử phát triển MySQL
• 1994: được phát triển bởi Michael Widenius và David
Axmark thuộc công ty TcX.
• 23-5-1995: phát hành phiên bản đầu tiên • 8-1-1998: phiên bản trên Windows 95 và NT được phát
hành.
• 01-2001: phiên bản 3 được phát hành • 03-2003: phiên bản 4 được phát hành • 26-2-2008: Sun MicroSystem mua lại MySQL AB. • 27-11-2008: Ver 5.0, 5.1 phát hành • Ver 5.1 chứa khá nhiều lỗi và hoạt động không hiệu quả. • 27-1-2010: Oracle mua lại Sun MicroSystem và phát hành
Ver 5.4, 5.5 hoạt động tốt hơn.
64
Môn Các Hệ Thống Mã Nguồn Mở
Khởi động và tắt dịch vụ
• Khi được cài đặt cùng WAMP Server, mỗi lần khởi động WAMP thì dịch vụ MySQL cũng tự động được kích hoạt.
65
Môn Các Hệ Thống Mã Nguồn Mở
Khởi động và tắt dịch vụ
• Khi được cài đặt cùng WAMP Server, mỗi lần khởi động WAMP thì dịch vụ MySQL cũng tự động được kích hoạt.
• Để tắt và mở dịch vụ, ta có thể sử dụng biểu tượng
WAMP Server ở khay hệ thống, chọn mục MySQL
66
Môn Các Hệ Thống Mã Nguồn Mở
Đăng nhập vào MySQL Server
tài khoản mặc định của
• Sau khi cài đặt, MySQL Server • User: root • Password:
• Đăng nhập bằng PhpMyAdmin
• Vào biểu tương WAMP Server, click chọn
• Wamp sẽ tự động đăng nhập vào MySQL bằng tài
PhpMyAdmin
• Nếu thay đổi password chương trình sẽ không
khoản trên
đăng nhập được, cần chỉnh lại pass trong file c:\wamp\apps\phpmyadmin3.5.1\config.inc.php Mục: $cfg['Servers'][$i]['password'] = ‘…';
67
Môn Các Hệ Thống Mã Nguồn Mở
Đăng nhập vào MySQL Server
68
Môn Các Hệ Thống Mã Nguồn Mở
Đăng nhập vào MySQL Server
• Đăng nhập bằng MySQL Console
• Tại icon WAMP Server, chọn mục MySQL, chọn MySQL Console
69
Môn Các Hệ Thống Mã Nguồn Mở
Các thao tác trên CSDL
• Thay đổi mật khẩu
• set password for acount_name@server_name =
• Xem tình trạng Server
• status;
• Xem các cơ sở dữ liệu • show databases;
• Tạo CSDL mới
• create database database_name;
• Sử dụng CSDL
• use database_name;
• Xóa CSDL
• drop database database_name;
password("new_password");
70
Môn Các Hệ Thống Mã Nguồn Mở
Table
• Các kiểu dữ liệu trong MySQL
• Kiểu số
71
Môn Các Hệ Thống Mã Nguồn Mở
Table (tt)
• Các kiểu dữ liệu trong MySQL
• Kiểu chuỗi
72
Môn Các Hệ Thống Mã Nguồn Mở
Table (tt)
• Các kiểu dữ liệu trong MySQL
• Kiểu ngày giờ (lưu ý các dữ liệu ngày khi Insert vào MySQL)
73
Môn Các Hệ Thống Mã Nguồn Mở
Table (tt)
• Các kiểu dữ liệu trong MySQL
• Hỗn hợp (Miscellaneous)
Enum: kiểu dữ liệu liệt kê, cho phép định nghĩa trước các giá trị cho một cột, cột sẽ chỉ lưu trữ một trong các giá trị định sẵn đó.
Vd: CREATE TABLE Test(
Return ENUM('Y','N') DEFAULT 'N', Size ENUM('S','M','L','XL','XXL'), Color ENUM('Black','Red','White')
)
Set: kiểu dữ liệu liệt kê, tương tự enum nhưng cho phép cột lưu trữ nhiều giá trị trong các giá trị định sẵn, mỗi giá trị cách nhau bởi dấu ', ' Vd:
CREATE Table Test(
Advertiser SET('Web Page','Television','Newspaper')
)
74
Môn Các Hệ Thống Mã Nguồn Mở
Table (tt)
• Các từ khóa khai báo cột
75
Môn Các Hệ Thống Mã Nguồn Mở
Table (tt)
• Tạo bảng
Create table table_name ( column_names datatypes modifiers)
Vd: Tạo bảng Customers (khách hàng) CREATE TABLE Customers (
Customer_ID INT NOT NULLPRIMARY KEY AUTO_INCREMENT, First_Name VARCHAR(20)NOT NULL, Last_Name VARCHAR(30) NOT NULL, Address VARCHAR(50), City VARCHAR(20), State VARCHAR(2), Zip VARCHAR(20), E_Mail VARCHAR(20), Age INT, Race VARCHAR(20), Gender ENUM('M', 'F') DEFAULT 'F', Favorite_Activity ENUM('Programming', 'Eating', 'Biking', 'Running', 'None') DEFAULT 'None', Occupation VARCHAR(30), Smoker CHAR(0)
);
76
Môn Các Hệ Thống Mã Nguồn Mở
Table (tt)
• Thay đổi cấu trúc bảng
• Thay đổi tên cột
Vd:
Alter table table_name CHANGE old_column_name new_column_name old_datatype; ALTER TABLE Customers CHANGE First_Name FirstName VARCHAR(20);
• Thay đổi kiểu dữ liệu
Alter table table_name CHANGE column_name column_name new_datatype; ALTER TABLE Customers
Vd: CHANGE Last_Name Last_Name VARCHAR(50); • Đổi tên bảng
Alter table table_name RENAME new_table_name; ALTER TABLE Customers RENAME Customer_Table;
Vd: • Thêm cột vào bảng
Alter table table_name ADD column_name datatype; Vd:
ALTER TABLE Customer ADD Last_Name VARCHAR(30);
77
Môn Các Hệ Thống Mã Nguồn Mở
Table (tt)
• Thay đổi cấu trúc bảng
• Xoá một cột
Alter table table_name DROP column_name;
Vd:
ALTER TABLE Customers DROP Last_Name;
• Thêm khoá chính
Alter table table_name ADD Primary Key (column_names);
Vd:
ALTER TABLE Customers ADD PRIMARY KEY (Customer_ID);
• Xoá khoá chính
Alter table table_name DROP Primary Key;
78
Môn Các Hệ Thống Mã Nguồn Mở
Table (tt)
• Chèn dữ liệu
• Insert
into table_name (column_names) values
• Xóa dữ liệu
• Delete From table_name Where condition
• Cập nhật dữ liệu
• Update
(column_values);
table_name set filename=newvalue where
condition
79
Môn Các Hệ Thống Mã Nguồn Mở
Import & Export dữ liệu
• Import từ file text
• Mysqlimport.exe database_name table_name.txt • Vd: mysqlimport QLBanHang Customer.txt
• Lưu ý:
• Mỗi dòng dữ liệu được trình bày trên 1 dòng. • Giá trị text phải được đóng bằng dấu nháy đơn (') hoặc nháy kép
• Các giá trị cách bởi dấu phẩy (,). • Các giá trị phải được sắp theo thứ tự tương ứng • Vd: khi import vào bảng có các cột sau Customer_ID int,
(").
Last_Name varchar(25), First_Name varchar(15), dữ liệu file text phải theo mẫu sau:
1, "Nguyen Minh","Thanh"
80
Môn Các Hệ Thống Mã Nguồn Mở
Import & Export dữ liệu
• Import từ file text
81
Môn Các Hệ Thống Mã Nguồn Mở
Import & Export dữ liệu
• Import từ file sql
Để thực thi file sql ta sẽ sử dụng lệnh sau:
Load Data Infile filename.sql Into Table table_name;
Vd: LOAD DATA INFILE "C:\MyDocs\data.sql" INTO TABLE Orders;
82
Môn Các Hệ Thống Mã Nguồn Mở
Import & Export dữ liệu
• Import từ file sql
Nếu muốn chỉ định file sql nằm trên máy cục bộ, cá nhân:
Load Data Local Infile filename.sql Into Table table_name;
Để thay thế các dòng giá trị trùng nhau:
Load Data Local Infile filename.sql Replace Into Table table_name;
Tuy nhiên, ta cũng có thể sử dụng phương thức Load Data này cho các file text
LOAD DATA INFILE "Orders.txt" REPLACE INTO TABLE Orders FIELDS
TERMINATED BY ',' ENCLOSED BY '"';
83
Môn Các Hệ Thống Mã Nguồn Mở
Import & Export dữ liệu
• Export dữ liệu: Chương trình mysqldump
Để export cấu trúc định nghĩa và cả dữ liệu trong bảng ra file .txt ta dùng chương
trình mysqldump trong thư mục Bin của MySQL. File kết xuất sẽ nằm trên
server.
Mysqldump.exe –u username –p database_name table_name > filename.txt
vd: mysqldump –u root –p qlBanHang Customers > C:\Customer.txt
Sau khi gõ lệnh, ta sẽ nhập password của tài khoản sử dụng.
Nếu không muốn tạo từng file .txt cho từng bảng, mà muốn làm cho cả CSDL, ta
sử dụng lệnh
Mysqldump.exe –u username –p database_name > filename.txt
84
Môn Các Hệ Thống Mã Nguồn Mở
Truy Vấn Dữ Liệu
85
Môn Các Hệ Thống Mã Nguồn Mở
Truy Vấn Dữ Liệu
• Các hàm sử dụng trong truy vấn
Hàm toán học
Mod (số bị chia, số chia): lấy phần dư của phép chia.
Vd: Select Mod(ThanhTien,2) From Orders as HoaDon;
Round(số, vị trí làm tròn): hàm làm tròn số.
Vd: Select Round(ThanhTien,1) From Orders as HoaDon;
86
Môn Các Hệ Thống Mã Nguồn Mở
Truy Vấn Dữ Liệu
• Các hàm sử dụng trong truy vấn
Hàm điều kiện
IF(logic_expression,true_result,false_result): hàm kiểm tra điều kiện đúng/sai.
Vd: Select If(SoLuong>20,5%,2%) as GiamGia From Orders;
IFNULL(result_1,result_2): hàm trả về kết quả result_1 nếu nó không null ngược
lại sẽ trả về result_2.
Vd: Select IfNull(10/0,1) as Exam
CASE value WHEN expression THEN result_1 ELSE result_2: hàm trả về
result_1 khi expression đúng, ngược lại trả về result_2.
Vd: Select CASE 1 WHEN Column1="Y" THEN 1 WHEN Column2="Y" THEN 2
WHEN Column3="Y" THEN 3 ELSE "NONE";
87
Môn Các Hệ Thống Mã Nguồn Mở
Truy Vấn Dữ Liệu
• Các hàm sử dụng trong truy vấn
Hàm chuỗi
LTRIM, RTRIM, TRIM: cắt bỏ những khoảng trắng thừa. Vd: Select LTRIM(" ABC") → "ABC" Vd: Select RTRIM("ABC ") → "ABC" Vd: Select TRIM(" ABC ") → "ABC"
SUBSTRING(chuỗi, vị trí bắt đầu): lấy một chuỗi con từ vị trí bắt đầu Vd: Select Substring("Hello World",7) → "World"
LOCATE(chuỗi 1, chuỗi 2, vị trí bắt đầu): xác định vị trí chuỗi 1 trong chuỗi 2 từ vị trí bắt đầu. Vd: Select Locate("lo","Hello World",1) → 4
REPLACE(chuỗi 1, chuỗi 2, chuỗi 3): thay thế chuỗi 2 bằng chuỗi 3 trong chuỗi 1. Vd: select Replace("Filename.xxx","xxx","123") → "Filename.123"
UCASE, LCASE: chuyển chữ thường thành in hoa và ngược lại. REVERSE: đảo ngược chuỗi.
88
Môn Các Hệ Thống Mã Nguồn Mở
Truy Vấn Dữ Liệu
• Các hàm sử dụng trong truy vấn
Hàm thời gian
MONTHNAME(date): trả về tên tháng của date. Vd: Select monthname(20000105) → January DAYOFYEAR(date): trả về số ngày tính từ đầu năm đến date. Vd: Select dayofyear(20000201) → 32 Vd: Select dayofyear("2000/02/01") → 32 DAYOFMONTH(date): trả về số ngày tính từ đầu tháng đến date. Vd: Select dayofyear(20000201) → 1 Vd: Select dayofyear("2000/02/01") → 1 Vd: Select dayofyear("00-02-01") → 1 DAYOFWEEK(date): trả về số ngày tính từ đầu tuần đến date. Vd: Select dayofyear(20000201) → 3 Vd: Select dayofyear("0-2-1") → 3 YEAR(date): trả về năm của date. QUARTER(date): trả về quý của date.
89
Môn Các Hệ Thống Mã Nguồn Mở
Truy Vấn Dữ Liệu
• Các hàm sử dụng trong truy vấn
Hàm thời gian
MONTH(date): trả về tháng của date. DAY(date): trả về ngày của date. WEEK(date): trả về số tuần của date tính từ ngày đầu tiên của năm. YEARWEEK(date): trả về số tuần của date tính từ ngày đầu tiên của năm. NOW() , SYSDATE(), CURRENT_TIMESTAMP: trả về ngày giờ hệ thống. Vd: Select NOW() → 2009-10-28 18:05:11 Vd: Select NOW()+0 → 20091028180511 CURDATE() , CURRENT_DATE: trả về ngày của hệ thống. CURTIME() , CURRENT_TIME: trả về ngày của hệ thống. HOUR(time): trả về giờ của time. MINUTE(time): trả về phút của time. SECOND(time): trả về giây của time. DATE_FORMAT(date,format): định dạng date theo format. TIME_FORMAT(time,format): định dạng date theo format.
90
Môn Các Hệ Thống Mã Nguồn Mở
Truy Vấn Dữ Liệu
• Các tham số thời gian
91
Môn Các Hệ Thống Mã Nguồn Mở
Truy Vấn Dữ Liệu
• Các hàm sử dụng trong truy vấn
Hàm thời gian
TO_DAYS(date): trả về số ngày từ ngày đầu tiên sau Công Nguyên đến date.
Vd: TO_DAYS("2000-01-01") → 730485
FROM_DAYS(number): trả về ngày sau Công Nguyên number ngày.
Vd: FROM_DAYS(1000000) → 2737-11-28
TIME_TO_SEC(time): trả về thời gian tính bằng giây từ 0:00:00 đến time.
SEC_TO_TIME(seconds): trả về thời điểm sau 0:00:00 một khoảng thời gian là
seconds giây.
DATE_ADD(date, INTERVAL expression type): cộng thêm một khoảng thời gian vào
date.
92
Môn Các Hệ Thống Mã Nguồn Mở
Truy Vấn Dữ Liệu
• Các hàm sử dụng trong truy vấn
Hàm thời gian
ADDDATE(date, INTERVAL expression type): cộng thêm một khoảng thời gian vào
date.
DATE_SUB(date, INTERVAL expression type): bớt đi một khoảng thời gian trong
date.
SUBDATE(date, INTERVAL expression type): bớt đi một khoảng thời gian trong
date.
Vd: ADDDATE("1980-07-04",INTERVAL 15 YEAR) → 1995-07-04
Vd: SUBDATE(20001201, INTERVAL "10 4" YEAR_MONTH)→ 1990-08-01
93
Môn Các Hệ Thống Mã Nguồn Mở
Truy Vấn Dữ Liệu
94
Môn Các Hệ Thống Mã Nguồn Mở
Công cụ đồ họa MySQL GUI TOOLS
• MySQL GUI Tool là bộ công cụ với giao diện đồ hoạ thân thiện, giúp
người sử dễ dàng thao tác trên MySQL hơn so với thao tác bằng giao
diện câu lệnh.
• Có thể tải MySQL GUI Tools trên trang web chính thức của MySQL
(http://dev.mysql.com/downloads/gui-tools/5.0.html). Bộ công cụ bao
gồm 3 công cụ chính:
• MySQL Administrator: công cụ quản trị MySQL Server.
• MySQL Query Browser: công cụ thực hiện các câu truy vấn trực
quan.
• MySQL Migration Toolkit: công cụ cho phép chuyển đổi giữa các
hệ CSDL khác nhau.
95
Môn Các Hệ Thống Mã Nguồn Mở
Công cụ đồ họa MySQL GUI TOOLS
• MySQL Administrator
96
Môn Các Hệ Thống Mã Nguồn Mở
Công cụ đồ họa MySQL GUI TOOLS
• MySQL Administrator
97
Môn Các Hệ Thống Mã Nguồn Mở
Công cụ đồ họa MySQL GUI TOOLS
• MySQL Query Browser
98
Hỏi Đáp ?
Môn Các Hệ Thống Mã Nguồn Mở
99
Môn Các Hệ Thống Mã Nguồn Mở
Chương 4:
NGÔN NGỮ KỊCH BẢN PHP CƠ BẢN
22/03/2016
100
Môn Các Hệ Thống Mã Nguồn Mở
Nội Dung
1. Giới thiệu về PHP 2. Chuỗi kí tự 3. Dữ liệu Ngày 4. Mảng 5. Phương thức nhận dữ liệu POST & GET 6. Hàm
101
Môn Các Hệ Thống Mã Nguồn Mở
Giới Thiệu về PHP I.1 Lịch sử: PHP (Hypertext Preprocessor) là ngôn ngữ script trên server được thiết kế để dễ dàng xây dựng các trang Web động. Ngôn ngữ PHP ra đời năm 1994 Rasmus Lerdorf (1968, GreenLand) sau đó được phát triển bởi nhiều người trải qua nhiều phiên bản. Phiên bản đang phổ biến là PHP 5.0 đã được công bố 7/2004.Phiên bản mới nhất là 5.5.12
Ưu điểm:Mã nguồn mở (open source code) - Miễn phí, download dễ dàng từ Internet. - Ngôn ngữ rất dễ học, dễ viết. - Mã nguồn không phải sửa lại nhiều khi viết chạy cho các hệ điều hành từ Windows, Linux, Unix - Tương thích với nhiều ứng dụng Server khác nhau như: Apache, IIS,… - Hỗ trợ nhiều hệ quản trị CSDL khác nhau Tên gọi ban đầu:'Personal Home Page Tools’ Xem: http://en.wikipedia.org/wiki/PHP
102
Môn Các Hệ Thống Mã Nguồn Mở
Tính năng của PHP
• Tạo ra các trang web động • Tạo, mở, đọc, ghi, xóa và đóng các file trên Server • Nhận dữ liệu từ các biểu mẫu trên trang web • Gửi và nhận Cookies • Thêm xóa sửa dữ liệu trong Database • Ngăn chặn người dùng truy cập các trang trên website • Mã hóa dữ liệu
103
Môn Các Hệ Thống Mã Nguồn Mở
Viết Script PHP
• Script PHP có thể nhúng trược tiếp trong các thẻ HTML. • Được đặt trong cặp thẻ
echo “Chào bạn đến với PHP”;
?>
104
Môn Các Hệ Thống Mã Nguồn Mở
Quá Trình Thông Dịch file PHP
105
Môn Các Hệ Thống Mã Nguồn Mở
Ghi Chú Trong PHP
• Thẻ ghi chú giúp cho trình thông dịch bỏ qua các lệnh đó
không thực hiện.
• Nên chèn các thẻ ghi chú sẽ giúp cho việc đọc và bảo trì
code dễ dàng hơn.
# This is also a single line comment
/*
This is a multiple lines comment block
that spans over more than
one line
*/
?>
106
Môn Các Hệ Thống Mã Nguồn Mở
Phân biệt hoa thường ?
• Trong PHP, các hàm, lớp, từ khóa (if, while,…) không
phân biệt hoa thường
";
echo "Hello World!
";
EcHo "Hello World!
";
?>
• Nhưng các biến có phân biệt hoa thường
";
echo "My house is " . $COLOR . "
";
echo "My boat is " . $coLOR . "
";
?>
107
Môn Các Hệ Thống Mã Nguồn Mở
Hằng – Biến a. Khai báo biến:
Ví dụ
Biến là nới lưu trữ dữ liệu trong chương trình Cách khai báo: $tên_biến = giá_trị;
$x = 5; $y=6; $z=$x+$y; echo $z; ?>
Khai báo biến mảng: $tên_mảng = array(); Khai báo biến đối tượng: $tên_object= new tên_lớp();
b. Khai báo hằng:
define(“tên_hằng”, giá_trị);
Ví dụ:
define(“PI”,3.14); $r=4; echo “Diện tích hình tròn:’.$r*$r*PI; ?>
108
Môn Các Hệ Thống Mã Nguồn Mở
Luật đặt tên biến – hằng
• Tên biến bắt đầu bởi dấu $, theo sau là tên biến • Tên biến phải bắt đầu bằng một kí tự hoặc dấu _ • Tên biến không được bắt đầu bằng số • Tên biến chỉ có thể chứa các kí tự, kí số và dấu _ • Tên biến phân biệt hoa thường
109
Môn Các Hệ Thống Mã Nguồn Mở
Kiểu dữ liệu – Phạm Vi Biến
Kiểu dữ liệu • PHP là một ngôn ngữ lỏng lẻo về kiểu dữ liệu • PHP sẽ tự động chuyển kiểu dữ liệu đúng cho biến tùy
thuộc vào dữ liệu nó chứa.
• Các kiểu dữ liệu chính:
• Integer, Double, Boolean, String, Array và Object, NULL
Phạm Vi Biến • Biến có thể được định nghĩa bất kì đâu trong script PHP • Phạm vị của biến là vùng mà biến được sử dụng • Có 3 mức phạm vi
• Local • Global • Static
110
Môn Các Hệ Thống Mã Nguồn Mở
Phạm vi Local và Global • Biến được định nghĩa bên ngoài các hàm có phạm vi
Global, chỉ được sử dụng bên ngoài các hàm.
• biến được định nghĩa bên trong một hàm có phạm vi
Local.
$y=10; // local scope
echo "
Test variables inside the function:
"; echo "Variable x is: $x"; echo ""; echo "Variable y is: $y";
} myTest(); echo "
Test variables outside the function:
"; echo "Variable x is: $x"; echo ""; echo "Variable y is: $y"; ?>
111
Môn Các Hệ Thống Mã Nguồn Mở
Từ khóa Global • Từ khóa Global được định nghĩa để truy cập biến global
bên trong hàm.
function myTest() {
global $x,$y;
$y=$x+$y;
}
myTest();
echo $y; // outputs 15
?>
112
Môn Các Hệ Thống Mã Nguồn Mở
Mảng $GLOBALS • PHP cũng lưu trữ các biến Global trong một mảng gọi là
$GLOBALS[index]. Index chính là tên biến.
function myTest() {
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
}
myTest();
echo $y; // outputs 15
?>
113
Môn Các Hệ Thống Mã Nguồn Mở
Từ khóa static • Khi một hàm hoàn tất thì giá trị biến sẽ tự động mất. Tuy nhiên, thỉnh thoảng ta muốn giữ lại giá trị của nó cho lần sau, ta sử dụng từ khóa Static
function myTest() {
static $x=0;
echo $x;
$x++;
}
myTest();
myTest();
myTest();
?>
114
Môn Các Hệ Thống Mã Nguồn Mở
Các thao tác trên biến
isset($varname)
Chuyển kiểu dữ liệu Kiểm tra nội dung biến
$newint = (int) $var1; $newfloat = (float) $var1; $newstring = (string) $var1;
empty($varname)
is_int ($varname)
var_dump($myvariable);
Xuất thông tin biến is_array ($varname)
is_float ($varname)
is_null ($varname)
is_string ($varname)
is_numeric ($varname)
Xuất dữ liệu
echo $myvariable;
print $myvariable;
115
Môn Các Hệ Thống Mã Nguồn Mở
Các phép toán a. Phép gán: $biến = biểu_thức;
c. Các phép toán so sánh: ==, !=, >=,<=,>,<
b. Các phép toán số học: +,-,*,/,%
d. Các phép toán kết hợp: ++,--,+=,-=,*=,/=
e. Các phép toán logic: !, &&, ||
f. Toán tử tam phân: (điều_kiện ? giá_trị_1: giá_trị_2)
g. Phép ghép chuỗi: . (dấu chấm)
h. Toán tử error: @, ngăn không cho thông báo lỗi.
Ví dụ: $a=10; $b=0; $c=@$a/$b
116
Môn Các Hệ Thống Mã Nguồn Mở
Một số ví dụ dữ liệu kiểu số
• Ví dụ 1:
• Ví dụ 2:
$var1 = “1”; $var2 = 2; $total = $var1 + $var2;
• Ví dụ 3
$var1 = “x”; $var2 = 2; $total = $var1 + $var2;
$var1 = “2,000”; $var2 = 2; $total = $var1 + $var2;
117
Môn Các Hệ Thống Mã Nguồn Mở
Các hàm trên dữ liệu số • Sqrt: căn bậc 2 • Ceil: làm tròn lên • Floor: làm tròn xuống • Number_format: định dạng số
• pow: lũy thừa • rand: tạo số ngẫu nhiên • round: làm tròn • Max, min: lấy giá trị lớn, nhỏ • Abs: trị tuyệt đối
$x=12345678.456789;
echo $x."
";
echo number_format($x)."
";
echo number_format($x,2)."
";
echo number_format($x,2,",",".")."
";
?>
kết quả: 12345678.4568 12,345,678 12,345,678.46 12.345.678,46
118
Môn Các Hệ Thống Mã Nguồn Mở
Các câu lệnh điều khiển a- Câu lệnh if. Các cú pháp thông dụng:
- if(điều_kiện) { /* nhóm lệnh */}
- if(điều_kiện) { /* nhóm lệnh1 */} else { /* nhóm lệnh2 */}
- if(điều_kiện) { ….. }
elseif(điều_kiện_1) {….} elseif(điều_kiện_2) {….} ………. elseif(điều_kiện_n) {….}
else {/* nhóm lệnh cuối cùng */}
119
Môn Các Hệ Thống Mã Nguồn Mở
Các câu lệnh điều khiển (tt) b. Câu lệnh switch
Cú pháp:
case giá_trị_1: nhóm lệnh 1 ; break; case giá_trị_2: nhóm lệnh 2 ; break; … case giá_trị_n: nhóm lệnh n ; break; default: nhóm_lệnh_n+1;
switch($biến){
}
Lưu ý: giá trị của $biến phải là đếm được, rời rạc
120
Môn Các Hệ Thống Mã Nguồn Mở
Các câu lệnh điều khiển (tt) Trong PHP có 4 câu lệnh lặp, trong đó foreach có cách sử dụng đặc sắc so với các NNLT khác. Muốn thoát khỏi vòng lặp: sử dụng lệnh exit
c- Câu lệnh while: Cú pháp: while(điều_kiện_lặp) { /* nhóm lệnh */}
d- Câu lệnh do … while: Cú pháp: do { /* nhóm lệnh */} while(điều_kiện_lặp)
{ /* nhóm lệnh */}
e- Câu lệnh for(;;): Cú pháp: for(khởi_tạo; điều_kiện_lặp; tăng_giảm)
f- Câu lệnh foreach: duyệt qua tất các các phần tử của một mảng, nhất là mảng kết hợp.
121
Môn Các Hệ Thống Mã Nguồn Mở
Chuỗi Kí Tự 1- Khai báo biến
Phân biệt ngoặc đơn và kép: - Chuỗi sử dụng ngoặc đơn được lưu trữ như một chuỗi bình thường. - Chuỗi sử dụng ngoặc kép được lượng giá các biến và kí tự đặc biệt
$str =“Trường cao đẳng CNTT TpHCM”;
trong chuỗi trước khi lưu trữ.
$number = 10; $string1 = “There are ‘$number’ people in line.”; $string2 = ‘There are “$number” people waiting.’; echo $string1,”\n”; echo $string2;
122
Môn Các Hệ Thống Mã Nguồn Mở
Chuỗi Kí Tự
2- Các hàm về kiểu chuổi ký tự:
- chop(), trim(), ltrim()
- nl2br(): định dạng HTML, biến ký tự \n thành “
”
- addslashes(): để biến một chuổi có thể lưu trữ trong CSDL, ví dụ: dấu “
-> \”
- substr($str,$pos,$len): tách một chuổi con từ một chuổi
- strpos($str,$sub): vị trí chuổi $sub trong chuổi $str
- str_replace($rep,$with,$str): thay $rep bằng $with trong $str
- explode($separator,$str): tách chuổi $str thành các chuổi con dựa trên
dấu phân cách $separator và lưu kết quả vào mảng, ~ phương thức split
của JavaScript. Ngược lại là hàm implode hay join.
- str_repeat(“str”,n): lặp lại str n lần
- str_chr(“str”,”chr”): trả về 1 chuỗi bắt đầu từ kí tự chr trong str.
- stristr(“str”,”chr”): giống str_chr nhưng không phân biệt hoa thường
- strlen(“str”): chiều dài chuỗi str
- strrev(“str”): đảo ngược chuỗi str
123
Môn Các Hệ Thống Mã Nguồn Mở
Chuỗi Kí Tự (tt)
Ví dụ: Chuẩn hóa một chuổi văn bản(dạng đơn giản): không có ký tự trống ở hai đầu, giữa 2 từ chỉ có duy nhất một ký tự trống.
Độ dài chuổi ban đầu “.strlen($str);
function normalize($st){
$str=trim($str); // cắt các ký tự trống ở hai đầu $twoSpace=" "; $oneSpace=" "; while(strpos($st,$twoSpace)>0)
{$st=str_replace($twoSpace,$oneSpace,$st);}
return $st;}
echo ““Độ dài sau khi chuẩn hóa “.strlen(normalize($str)); ?>
124
Môn Các Hệ Thống Mã Nguồn Mở
Chuỗi Kí Tự (tt)
Danh sách giáo viên:";
foreach($arr as $key=>$value) echo ($key+1)."-".$value."
";
?>
125
Môn Các Hệ Thống Mã Nguồn Mở
Dữ Liệu Ngày – Giờ • ĐỊnh dạng ngày
• Lấy ngày hệ thống
$mydate = date(“format”,$timestamp);
$today = date(“Y/m/d”);
• Lấy giờ hệ thống
$today = time(); hoặc $today = strtotime(“today”);
• Tạo một ngày chỉ định
$importantDate = mktime(h,m,s,mo,d,y);
• Ví dụ: $importantDate = mktime(0,0,0,1,15,2003);
Hoặc $importantDate = strtotime(“January 15 2003”);
126
Môn Các Hệ Thống Mã Nguồn Mở
Dữ Liệu Ngày – Giờ
127
Môn Các Hệ Thống Mã Nguồn Mở
Mảng Một Chiều 1. Khai báo: $n=100; $arr1 = array($n); $arr2 = array(giá_trị_1, giá_trị_2, .., giá_trị_n); $arr3 = range(100,900);// range(“z”, “a”); $arr4 = arrr(hoten=>“Minh Thành”, quequan=>“HCM”,
tuoi=>27;IQ=“Rất cao”); // mảng kết hợp
Câu lệnh lặp foreach rất hiệu quả khi duyệt mảng kết hợp
128
Môn Các Hệ Thống Mã Nguồn Mở
Mảng Một Chiều (tt)
2- Sử dụng
-Truy cập một phần tử mảng: $arr[$key]
$key có ý nghĩa rộng hơn Index, dùng tham chiếu đến một phần tử của mảng.
Ví dụ 1: Tạo mảng gồm 10 phần tử là các số nguyên lấy ngẫu nhiên trong [0,100]. Khởi tạo $key là 0.
// tạo mảng
$arr = array(10);
//nhập mảng
for($i=0; $i<10; $i++) $arr[$i] = rand(0,100);
//xuất mảng
for($i=0; $i<10; $i++) echo ($i+1).”-”.$arr[$i].”
”;
?>
129
Môn Các Hệ Thống Mã Nguồn Mở
Mảng Một Chiều (tt) -Sử dụng foreach
foreach($arr as $key=>$value){
echo $key .“,”;
echo $value.”
”;
}
$chỉ_số=>$giá_trị (của phần tử mảng)
Có thể thay thế key và value bằng tên khác, chẳng hạn $k=>$v, miễn rẳng đảm bảo khai báo:
130
Môn Các Hệ Thống Mã Nguồn Mở
Mảng Một Chiều (tt) -Truy cập một phần tử mảng: sử dụng hàm each()
while($item=each($arr)){
echo $item[“key”] .”,”;
echo $item[“value”]. “
”;
}
- Truy cập một phần tử mảng: sử dụng hàm list()
Hàm each() trả về phần tử kế tiếp của mảng. ~ hàm next()
}
while(list($k,$v)=each($arr)){
echo $k .”,”;
echo $v. “
”;
Hàm list($k,$v) tách cặp giá trị (key, value) của phần tử có “chỉ số” là $key ra hai biến $k và $v
131
Môn Các Hệ Thống Mã Nguồn Mở
Các Hàm Về Mảng -Hàm count(), sizeof(): trả về kích thước của mảng
+ current()/end(): trả về phần tử đầu tiên/ cuối cùng của mảng
+ prev() / next(): trả về phần tử liền trước / kế kiếp
+ sort() , asort(), rsort(), arsort(): sắp xếp mảng theo value của phần tử
+ ksort(), krsort():sắp xếp mảng theo key của phần tử
- Print_r() hoặc var_dump(): xem nội dung mảng
- Unset($arr[$key]): xóa phần tử $key khỏi mảng
- array_slice($arrayname,n1,n2): ngắt mảng
- array_merge($array1,$array2,...);: trộn mảng
- array_sum($array): tính tổng
- array_unique($names): loại trùng
- array_flip($testarray): hoán đổi key và value
- is_array() kiểm tra mảng
132
Môn Các Hệ Thống Mã Nguồn Mở
Mảng động: kiểu dữ liệu mảng trong PHP là mảng động, tức là ta có thể thêm dữ liệu vượt quá phạm vi ban đầu, mảng sẽ tự tăng số phần tử lên.
Để gán phần tử tiếp theo cho mảng: $a[] = giá trị;
echo "So phan tu cua mang con ".count($child)."
";
// In ra mảng con gồm các số lẻ từ mảng $arr
for($i=0;$i
133
Môn Các Hệ Thống Mã Nguồn Mở
Các Mảng Xây Dựng Sẵn
134
Môn Các Hệ Thống Mã Nguồn Mở
Các Mảng Xây Dựng Sẵn
Ví dụ: xuất các thành phần trong mảng $_SERVER
foreach($_SERVER as $key =>$value) {
echo “Key=$key, Value=$value\n”;
135
}
Môn Các Hệ Thống Mã Nguồn Mở
Hàm 1- Cú pháp: function tên_hàm([các_tham_số]) {
// Khai báo biến riêng // Câu lệnh PHP [ return giá_trị; ]
}
[các_tham_số]: các tham số là tùy chọn
2- Sử dụng hàm -Hàm không có giá trị trả về: tên_hàm([các_tham_số]); -Hàm có giá trị trả về: tham gia vào các biểu thức, gán giá trị cho biến.
136
Môn Các Hệ Thống Mã Nguồn Mở
Hàm (tt) A- Hàm không có giá trị trả về: ”Minh Thành”,diachi=>”HCM”,tuoi=>27,phai=>“Nam”); function display($a){
echo “
echo “
} display($arr); ?> Đây là một hàm không trả về giá trị. Hàm display in ra các giá trị của mảng 137
Môn Các Hệ Thống Mã Nguồn Mở
Hàm (tt) B- Hàm có giá trị trả về
“Minh Thành",diachi=>“HCM");
function is_hoten($mang){
// trả về value của phần tử có key là hoten while(list($k,$v)=each($mang)){
if($k=="hoten") {return $v;exit;}
}
}
echo is_hoten($arr); ?>
Lưu ý: có cần exit khỏi vòng lặp không?
138
Môn Các Hệ Thống Mã Nguồn Mở
3- Tầm vực của biến trong trang PHP - Biến chung: được khai báo ngoài phạm vi các hàm, hoặc global ... - Biến riêng: khai báo bên trong hàm (nếu không có global) - Biến $_SESSION: có giá trị toàn cục, cho mọi trang trong phiên. PHP xây dựng sẵn một số biến toàn cục với tên quy ước $_TÊN (in hoa)
function tên_hàm($x){
global $total; $total=giá_trị; static $index; $index=giá_trị; // các lệnh PHP
}
4- Tham trị và tham biến -Hàm trên được gọi với tham trị -Hàm sau đây sẽ được gọi với tham biến:
function tên_hàm(&$y){
// các lệnh PHP
}
139
Môn Các Hệ Thống Mã Nguồn Mở
Phương Thức Truyền Dữ Liệu Đây là những biến toàn cục nhận các giá trị gởi từ client
đến server bằng phương thứ Post hay Get.
1- Phương thức POST
Receive.php
140
Môn Các Hệ Thống Mã Nguồn Mở
Phương Thức Truyền Dữ Liệu (tt) Trường hợp đặc biệt: nhận dữ liệu gởi từ các checkbox cùng tên:
Goi.html
Nhan.php
$v) echo $v.”
”;
?>
141
Môn Các Hệ Thống Mã Nguồn Mở
Phương Thức Truyền Dữ Liệu (tt)
2- Phương thức GET
Giả sử trang goi.html chứa đoạn mã:
Đăng ký Ta gọi: gởi dữ liệu đến trang nhan.php theo phương thức GET, các biến khác được ghép bởi ký hiệu &
Chú ý: hoten=Hà Giang, không đóng dấu nháy kép!
Nhan.php
$_REQUEST: là biến toàn cục thay thế cho $_POST và $_GET
142
Môn Các Hệ Thống Mã Nguồn Mở
V- Sử dụng lại mã PHP
-Sử dụng hàm include(), require() để chèn tệp tin PHP, HTML vào một trang PHP khác. Ngoài ra còn có: include_once(), require_once(), - Phân biệt include() và require() include(“tên_tệp”): nếu tên_tệp không tồn tại thì PHP thông báo lỗi và vẫn tiếp tục thực thi script còn lại. require(“tên_tệp”): nếu tên_tệp không tồn tại thì PHP dừng thực thi script. -Sử dụng include(), require() là một cách tái sử dụng đoạn mã đã viết.
Ví dụ:Trang Index.php bao gồm 3 khối:
-header.inc: gồm các khai báo ...
-menu.php: gồm các liên kết -footer.php: gồm các thông tin về website và143
Môn Các Hệ Thống Mã Nguồn Mở
V- Sử dụng lại mã PHP
Trang Index.php
include(“header.inc”);
include(“menu.php”);
include(“footer.php”);
?>
144
Môn Các Hệ Thống Mã Nguồn Mở
V- Sử dụng lại mã PHP
Header.inc
Ví dụ về include()
echo "";?>
Footer.php
Khoa Tin học, Trường Đại học Sư phạm
145
Môn Các Hệ Thống Mã Nguồn Mở
V- Sử dụng lại mã PHP
Menu.php
Trang chu
";
$strMenu.="Array
";
$strMenu.="String
";
$strMenu.="Post, Get
";
$strMenu.="Cookie, Session
";
echo $strMenu;
?>
146
Hỏi Đáp ?
Môn Các Hệ Thống Mã Nguồn Mở
147
Chương 5:
Môn Các Hệ Thống Mã Nguồn Mở
NGÔN NGỮ KỊCH BẢN PHP NÂNG CAO
22/03/2016
148
Môn Các Hệ Thống Mã Nguồn Mở
Nội Dung
1. Cookie 2. Session 3. Gửi mail 4. Xử lý File 5. Chuyển hướng website với .htaccess 6. Bắt lỗi chương trình 7. Hướng đối tượng trong PHP
149
Môn Các Hệ Thống Mã Nguồn Mở
Cookie 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
150
Môn Các Hệ Thống Mã Nguồn Mở
Cookie (tt) 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ẻ
Trang CreateCookie.php
Ví dụ:
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
151
Môn Các Hệ Thống Mã Nguồn Mở
Cookie (tt) d- Đọc cookie
Tệp ReadCookie.php
if (isset($_COOKIE[“username"]))
echo "Welcome " . $_COOKIE[“username"] . "!
";
else
?>
echo "Welcome guest!
";
Hàm isset() kiểm tra một biến đã được khai báo, khởi gán chưa
$_COOKIE[] là một biến mảng toàn cục
152
Môn Các Hệ Thống Mã Nguồn Mở
Session 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.
b- Khai báo và thiết lập Session
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.
Ví dụ: Trang Save_Session.php
session_start(); // hàm session_start() phải đặt trước thẻ $_SESSION['username']=“NguyenMinhThanh";
Hàm header() chuyển hướng trình duyệt đến URL sau Location
153
Môn Các Hệ Thống Mã Nguồn Mở
Session (tt) c- Truy cập biến Session Trang: Read_Session.php if(isset($_SESSION['username']))
else
$mess=$_SESSION['username']." đã đăng nhập";
$mess=“Bạn chưa đăng nhập hệ thống!";
echo $mess; ?> 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?
154
Môn Các Hệ Thống Mã Nguồn Mở
Session (tt)
Tóm tắt:
Thiết lập session_start(); $_SESSION[‘tên’]=giá_trị;
Xóa giá trị đã thiết lập: unset($_SESSION[‘tên’]);
Truy cập: session_start(); $biến = $_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
155
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ở
156
Trang Login.php
$user=$_REQUEST["ht"]; $pass=$_REQUEST["mk"]; // thay cho $_POST[]
?> You are'nt login!
163
Môn Các Hệ Thống Mã Nguồn Mở
Xử Lý File
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"];
}
164
} ?>
Môn Các Hệ Thống Mã Nguồn Mở
Cơ bản về .htaccess 1. Định nghĩa htaccess:
văn bản .
Apache cung cấp khả năng cấu hình thông qua những files truy cập siêu
Những files này cho phép thay đổi tinh chỉnh của Apache (httpd.conf) .
.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
Theo mặc định file này có tên .htaccess.
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.
165
Môn Các Hệ Thống Mã Nguồn Mở
Cơ bản về .htaccess
Dấu “#” này dùng để định nghĩa một đoạn comment trong httpd.conf, và .htaccess.
Ví dụ:
#Enable Rewrite mod <<<đây là comment, dòng này sẽ không được thực thi trong .htaccess
RewriteEngine on
Lưu ý:
.htaccess là một công cụ rất mạnh trong việc quản lí website. Một lỗi cú pháp
nhỏ (thậm chí là một khoản trắng) cũng khiến website của bạn hoạt động không
được bình thường như trước.
Do vậy trước khi làm việc với .htaccess, bạn nên backup cẩn thận dữ
liệu của mình, nếu có trục trặc xảy ra, việc khôi phục trở nên đơn giản.
166
Môn Các Hệ Thống Mã Nguồn Mở
Cơ bản về .htaccess • Những kí tự đặc biệt
#: comment [F]: chỉ định server sẽ trả về client trang lỗi 403 nếu truy cập vào những nơi không được phép [L]: ấn định rằng bước trước đã xong thì ngừng và không tiếp tục thực thi lệnh rewrite tiếp theo nữa. [N]: chỉ thị cho server tiếp tục rewrite cho đến khi tất cả các mục chỉ định được rewrite hoàn toàn. [G]: Chỉ định server trả về client trang báo lỗi không tồn tại (no longer exit) [P]: chỉ định server điểu kiển các yêu cầu được ấn định bởi mod_proxy [C]: Chỉ định server thực hiện rule hiện hành song song với rule trước đó [R]: chỉ định server đổi hướng request sang một trang khác trong trường hợp trình duyệt gởi yêu cầu duyệt một trang được sửa chữa đường dẫn (rewrite) trước đó.
167
Môn Các Hệ Thống Mã Nguồn Mở
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} !^http://domain.com/.*$ [NC] [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
168
Môn Các Hệ Thống Mã Nguồn Mở
Cơ bản về .htaccess • 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.
169
Môn Các Hệ Thống Mã Nguồn Mở
Cơ bản về .htaccess • Những kí tự đặc biệt
a{n}: chỉ định chính xác n kí tự a được match. Ví dụ a{3} thì 3 kí tự a sẽ được match. a{n,}: Tương tự như trên, nhưng trong trường hợp này sẽ match các kí tự a từ na trở lên. a{n,m}: Chỉ định một khoảng chính xác các kí tự (m-n)a sẽ được match. (): Nhóm các chuỗi ^: Bắt đầu bằng $: Kết thúc bằng ( .*$: kết thúc bằng bất cứ gì) ?: chuỗi có hoặc không !: phủ định. VD: “!string” sẽ match tất cả các kí tự, ngoại trừ string -: Loại đi một chức năng, hoặc một rule đang thực thi nào đó. *: Tất cả đều được |: Hoặc \: Kí tự thoát
170
Môn Các Hệ Thống Mã Nguồn Mở
Cơ bản về .htaccess • Những kí tự đặc biệt
-d: Kiểm tra thư mục có tồn tại hay không? -f: Kiểm tra file có tồn tại hay không -s: Kiểm tra giá trị của file có khác 0 hay không?
Mã chuyển hướng trang báo lỗi - 401 - Authorization Required: Lỗi chưa được xác thực user và password - 400 - Bad request: Lỗi truy cập không hợp lệ, do server không chấp nhận request, hoặc request thiếu một số yêu cầu nào đó. - 403 - Forbidden: Lỗi truy cập vào trang bị cấm - 500 - Internal Server Error: Lỗi do server - 404 - Wrong page: Lỗi truy cập vào trang không tồn tại - 301 - Moved Permanently: 302 - Moved Temporarily: Lỗi truy cập vào trang đã bị di chuyển.
171
Môn Các Hệ Thống Mã Nguồn Mở
Các ví dụ trong .htaccess
1. Ngăn chặn hotlink
Nhiều người copy ảnh từ server của bạn và đưa lên trang web của họ. Thêm vào .htaccess đoạn mã dưới đây sẽ giúp bạn ngăn chặn ảnh hiển thị trên website khác:
Options +FollowSymlinks #No hotlink RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www.)?domain.com/ [nc] RewriteRule .*.(gif|jpg|png)$ http://domain.com/images/stop_stealing_bandwidth.gif [nc]
172
Môn Các Hệ Thống Mã Nguồn Mở
Các ví dụ trong .htaccess
2. 301 Redirect
Nếu ta chuyển domain, hoặc chỉ muốn chuyển một trang cũ về một trang mới và không muốn lo lắng về các kết quả search từ google, sử dụng đoạn mã sau
Redirect 301 /d/file.html http://www.domain.com/r/file.html
3. Viết lại tên miền cũ sang tên mới
Sử dụng đoạn mã dưới đây để chuyển tất cả các link từ tên miền cũ sang tên miền mới:
#Chuyển hướng từ tên miền cũ sang tên mới RewriteEngine On RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
173
Môn Các Hệ Thống Mã Nguồn Mở
Các ví dụ trong .htaccess
4. Tạo trang báo lỗi riêng Nếu không muốn dùng các trang báo lỗi có sẵn của host, ta có thể tạo các trang báo lỗi riêng và cấu hình vào file htaccess như sau:
ErrorDocument 401 /error/401.php ErrorDocument 403 /error/403.php ErrorDocument 404 /error/404.php ErrorDocument 500 /error/500.php
5. Cấm IP truy cập
Nếu có 1 IP thường xuyên spam website, ta có thể cấm IP đó như dòng 2, hoặc cấm 1 dải IP như dòng 3:
allow from all deny from 113.190.183.138 deny from 113.190
174
Môn Các Hệ Thống Mã Nguồn Mở
Các ví dụ trong .htaccess
6. Bảo vệ file Đoạn mã dưới đây sẽ từ chối khi người dùng truy cập vào bất kỳ file nào và gửi về lỗi 403:
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
#Protect .htaccess File
# Đặt mã cho file
175
Môn Các Hệ Thống Mã Nguồn Mở
Các ví dụ trong .htaccess
9. Đặt trang mặc định
10. Bỏ một nội dung ở URL
Đặt trang web mặc định cho thư mục nào đó. Ví dụ đặt file about.html thay cho file index.html:
Để chuyển url từ: http://domain.com/category/tong-hop về -> http://domain.com/tong-hop, bạn chỉ cần thêm vào file .htaccess đoạn mã sau
#Đặt trang mặc định (index) DirectoryIndex about.html
RewriteRule ^category/(.+)$ http://www.domain.com/$1 [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]
176
Môn Các Hệ Thống Mã Nguồn Mở
Các ví dụ trong .htaccess
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 ^(.*)$ http://domain.com/$1/ [L,R=301]
177
Môn Các Hệ Thống Mã Nguồn Mở
Các ví dụ trong .htaccess
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
178
Môn Các Hệ Thống Mã Nguồn Mở
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 đề.
179
Môn Các Hệ Thống Mã Nguồn Mở
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');
180
Môn Các Hệ Thống Mã Nguồn Mở
Tự bắt lỗi chương trình • 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”)
• Khi hàm functionname có lỗi hàm die sẽ dừng chương trình và xuất
functionname() or die(“message”);
• 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
thông báo.
If ($height_of_door > $height_of_house) {
echo “This is impossible
”;
exit();
}
• Hoặc đẩy lỗi lên cho PHP tự thông báo.
If ($height_of_door > $height_of_house) {
trigger_error(“Impossible condition”,E_USER_ERROR);
}
181
Môn Các Hệ Thống Mã Nguồn Mở
Hướng đối tượng trong PHP
“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.
182
Môn Các Hệ Thống Mã Nguồn Mở
Hướng đối tượng trong PHP
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.
183
Môn Các Hệ Thống Mã Nguồn Mở
Hướng đối tượng trong PHP
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.
184
Môn Các Hệ Thống Mã Nguồn Mở
Hướng đối tượng trong PHP
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ố]);
185
Môn Các Hệ Thống Mã Nguồn Mở
Hướng đối tượng trong PHP (tt) Ví dụ đơn giản
Tệp Class1.php
class hoso{ public $ho_ten; public $ngay_sinh;
$this->ho_ten = $hten; $this->ngay_sinh=$ngsinh;
function hoso($hten,$ngsinh){
}
186
}
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;
?>
Môn Các Hệ Thống Mã Nguồn Mở
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).
187
Môn Các Hệ Thống Mã Nguồn Mở
Phương Thức Magic Trong OOP
188
Môn Các Hệ Thống Mã Nguồn Mở
Phương Thức Magic Trong OOP
189
Môn Các Hệ Thống Mã Nguồn Mở
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().
190
Môn Các Hệ Thống Mã Nguồn Mở
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
191
Môn Các Hệ Thống Mã Nguồn Mở
Kỹ thuật nạp chồng trong Hướng Đối Tượng
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
192
Môn Các Hệ Thống Mã Nguồn Mở
Gán tầm vực cho Thuộc Tính và Phương Thức 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ế độ 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 đó.
- 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 đó.
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.
193
Môn Các Hệ Thống Mã Nguồn Mở
Ví dụ minh họa các từ khóa private, protected và public
public $public = 'Public 1'; // truy xuất mọi nơi trang private $private = 'Private 1'; // chỉ t.x được bên trong lớp protected $protected = 'Protected 1'; // không cho kế thừa,private
public function printHello(){ // được truy xuất mọi thuộc
echo $this->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
194
$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
?>
Môn Các Hệ Thống Mã Nguồn Mở
195
Hỏi Đáp ?
Môn Các Hệ Thống Mã Nguồn Mở
22/03/2016
196
Chương 6:
Môn Các Hệ Thống Mã Nguồn Mở
PHP & MYSQL
22/03/2016
197
Môn Các Hệ Thống Mã Nguồn Mở
Nội Dung
1. Kết nối database server 2. Truy cập CSDL và thực thi câu lệnh 3. Xử lý tiếng việt trong MySQL & PHP 4. Phân trang dữ liệu
198
Môn Các Hệ Thống Mã Nguồn Mở
Kết nối database server
1- Cú pháp
Đối với localhost, dù webserver có PORT là 81 vẫn không ghi thêm port, port mặc định của database server MySQL là 3306.
Các cách sử dụng:
1- $con=mysql_connect(“localhost”,”root”,””) or die(“Error:”.mysql_error());
2- $con=mysql_connect(svn,usr,pss);
if(!$con) {die(“Error:”.mysql_error(); //có thể thay đổi message}
else{ // truy cập database }
mysql_connect(server_name,username,password);
199
Môn Các Hệ Thống Mã Nguồn Mở
Thực Thi Câu Lệnh SQL
1- Truy cập CSDL
mysql_select_db(“database name", $con);
với $con được trả về trong mysql_connect() đã thành công trước đó.
2- Thực thi câu lệnh SQL
mysql_query(“SQL_Statement”);
Tùy theo câu lệnh SQL mà ta có kết quả trả về của hàm mysql_query() mà ta có mã PHP xử lý tương ứng. + Câu lệnh Select + Các câu lệnh khác
: trả về mảng các record : true/false tùy theo sự thành công hay không
a)Câu lệnh SQL: Select…
$strSQL=“Select * from table_name”; //nếu câu lệnh SQL dài, phức tạp. $result = mysql_query($strSQL); if($result) { trích xuất dữ liệu trong mảng $result;} // !? else {echo “Records not found!”;}
200
Môn Các Hệ Thống Mã Nguồn Mở
Thực Thi Câu Lệnh SQL (tt)
b) Câu lệnh SQL: Create Database
$result=mysql_query("CREATE DATABASE database_name",$con ); if($result) {echo “Database created!”;} else {echo “Could’nt create database,” .mysql_error();}
Tuy nhiên, để đảm bảo các field kiểu char có thể dữ liệu theo mã UTF-8 thì cần thay đổi câu lệnh SQL:
$strSQL="CREATE DATABASE VD2”; $strSQL+= “DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci";
$result=mysql_query($strSQL,$con ); if($result) {echo “Database created!”;} else {echo “Could’nt create database,”.mysql_error();}
- Ta thường tạo CSDL thông qua một công cụ riêng, ít khi sử dụng câu lệnh như trên. Tuy nhiên, tạo table lại hay sử dụng. - Collate: đối chiếu, kiểm tra thứ tự (trang).
201
c- Câu lệnh SQL: Create table $sql = "CREATE TABLE table_name ( field_name data_type[(length)] constraint,… ) ENGINE = MyISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci";
Ví dụ:
$sql=“Create table SV (Ma varchar(11) NOT NULL ,”; $sql+=HoTen varchar(30) not null , primary key(Ma)”; $sql+=“) engine = MyISAM” ;
$result = mysql_query($sql,$con);
if(!$result) {echo “Error”.mysql_error();} else { // mã PHP phù hợp}
Môn Các Hệ Thống Mã Nguồn Mở
202
Môn Các Hệ Thống Mã Nguồn Mở
d- Câu lệnh Insert, Update
$result=mysql_query($sql);
$sql=“Insert into table_name(field_list) values(value_list);
if(!$result) {echo mysql_error(); // xử lý tiếp;}
else { //xử lý …}
Việc sử dụng câu lệnh Upadte cũng tương tự
-Sử dụng hàm die() một cách hợp lý
Lỗi xảy ra nếu vi phạm một trong các ràng buộc toàn vẹn dữ liệu.
-Sử dụng transaction để điều khiển mạch chương trình. Xem bài đọc thêm PHP trên trang web của giảng viên
203
e- Câu lệnh SQL: Select…
$sql = “Select …..”;
$result = mysql_query($sql);
if(!$result) { echo “Record not found!”; }
else {
while($row = mysql_fetch_array($result)){
echo $row[‘firstField'] . " " . $row[‘secondField'];
echo "
";
}
} // else
mysql_close($con); // đóng kết nối
Câu lệnh Select … from … where … limit start, total trong MySQL
Trong đó start: là bắt đầu từ record số start (>=0), Record đầu tiên thứ tự là 0
Total: là tổng số record được hiển thị. Đây là đặc điểm riêng của MySQL
fetch: nạp vào, tìm và nạp vào, $row là một mảng với key là fieldname Chúng ta còn phương pháp khác duyệt “tập các record”, xem trang sau.
Môn Các Hệ Thống Mã Nguồn Mở
204
Môn Các Hệ Thống Mã Nguồn Mở
Hàm mysql_fetch_array
Cú pháp: mysql_fetch_array(data [, array_type]);
Array_type có thể là: MySQL_Assoc : mảng kết hợp, key của mảng là field_name MySQL_Num : key của mảng là chỉ số MySQL_Both : cả hai khả năng trên, đây là kiểu mặc định.
Vì không khai báo array_type, tức là MySQL_Both, do vậy (1) có thể:
while($row = mysql_fetch_array($result)){
echo $row[0] . " " . $row[1];
echo "
";
}
205
Môn Các Hệ Thống Mã Nguồn Mở
Tiếng Việt trong PHP
- Phần không sử dụng CSDL MySQL, phải đảm bảo: Lưu tệp với mã UTF-8 (*) Khai báo trong phần head
- Phần sử dụng CSDL MySQL, phải đảm bảo: Khai báo câu lệnh mysql_query(“SET NAMES ‘utf8’”) trước câu lệnh mysql_query($sql) với $sql là một câu lệnh Select. Ví dụ:
$sql = “Select …..”;
mysql_query(“SET NAMES ‘utf8’”); (*) $result = mysql_query($sql);
if(!$result) { echo “Record not found!”; } else {
while($row = mysql_fetch_array($result)){
echo $row[‘firstField'] . " " .$row[‘secondField'].”
”;}
}
206
Môn Các Hệ Thống Mã Nguồn Mở
Một Số Hàm Hữu Ích
- Kiểm tra kết quả trả về của mysql_connect và mysql_query:
$con=mysql_connect(server, user, password)
$rs =mysql_query($sql, $con)
Cách 1: dùng if($con) hay if($rs) trả về giá trị logic
Cách 2: dùng if(is_resource($con)) hay if(is_resource($rs)) trả về giá trị logic
- Bản chất $rs trả về là một nguồn dữ liệu, là recordset như trong ADO của Microsoft
- Trong câu lệnh:
while($row = mysql_fetch_array($rs)){
echo $row[‘FieldName'] .
Để kiểm tra $row dùng hàm is_array()
- Để ngăn thông báo lỗi khi sử dụng mysql_connect, mysql_query cần sử dụng toán tử error: @
207
Môn Các Hệ Thống Mã Nguồn Mở
Phân Trang Dữ Liệu
Kỹ thuật cơ bản dựa trên câu lệnh Select … limit start, total
Mỗi trang sẽ hiển thị total records, bắt đầu từ reocord thứ start
Record đầu tiên có thứ tự là 0.
Có nhiều phương pháp xây dựng các link để điều khiển trang
Pre 1 2 3 4 5 Next
Giả sử test.php là trang PHP có chức năng hiển thị trang thứ $I với số record là $PageSize, tùy theo $i mà xác định $start để xây dựng câu
lệnh Select cho từng lựa chọn
Phương pháp ưa thích được lựa chọn là sử dụng:
$start: vị trí record bắt đầu của trang hiện tại
$prev: vị trí bắt đầu cho trang liền trước trang hiện tại (link PREV)
$next: vị trí bắt đầu cho trang liền sau trang hiện tại (link NEXT)
208
Môn Các Hệ Thống Mã Nguồn Mở
Phân Trang Dữ Liệu (tt)
Trong ứng dụng này, ta có 4 module:
Connect.inc có chức năng kết nối đến CSDL, sử dụng các hàm:
mysql_connect() và msql_select_db()
Trong lập trình CSDL, module này cần thiết kế tốt và lưu dưới một file .inc riêng, trang nào cần thì include vào
Init.inc có chức năng khởi tạo các biến chung để điều khiển link
Test.php là trang chính, có chức năng hiển thị nội dung trang với các record bắt đầu từ $start đến ($start+$pagesize-1), bao gồm Connect.inc, Init.inc và Link.inc
Link.inc có chức năng tạo ra các liên kết dạng Prev 1 2 3 4 Next
Trong nhiều chương trình, LTV xây dựng hẵn một Class để truy cập CSDL. Sinh viên xem trong phần Bài đọc thêm PHP trên website của giảng viên về nội dung này.
209
Môn Các Hệ Thống Mã Nguồn Mở
Phân Trang Dữ Liệu (tt)
Tệp Connect.inc
connecttodb($servername,$dbname,$dbusername,$dbpassword);
function connectdb($svn,$dbn,$dbu,$db){ global $con; //$con sẽ dùng trong một số câu lệnh msql_ $con=mysql_connect ("$svn","$dbu","$dbp"); if(!$con){die(“Không thể kết nối đến MySQL Server");} mysql_select_db("$dbn",$con) or die (“Không thể mở CSDL, lý do: ".mysql_error()); } ?>
210
Môn Các Hệ Thống Mã Nguồn Mở
Phân Trang Dữ Liệu (tt)
Tệp Init.inc
$pagesize=15; // Mỗi trang hiển thị 15 record, trừ trang cuối có thế ít hơn
$start=$_GET['start'];
$start=($start-0); // chuyển $start thành số tự nhiên
//Ban dau khong GET nen $start="" =>($start-0)=0;
$back = $start - $pagesize;
$next = $start + $pagesize;
$query="select * from Student";
$result=mysql_query($query);
$totalRecords=mysql_num_rows($result); // Total records of recordset
echo "Total records $totalRecords
";
?>
211
Môn Các Hệ Thống Mã Nguồn Mở
Phân Trang Dữ Liệu (tt) Tệp Test.php
mysql_query("SET NAMES 'utf8'"); $query="select * from Student limit $start,$pagesize"; $result=mysql_query($query);
echo $i." ".$row[1]."
"; $i++;}
$i=1; while($row = mysql_fetch_array($result)){
include("link.inc");
mysql_close($link); ?>
212
Môn Các Hệ Thống Mã Nguồn Mở
Phân Trang Dữ Liệu (tt)
Tệp Link.inc "; if($totalRecords > $pagesize ){
if($back >=0)
{echo "Prev"; }
$i=0; // theo dõi số thứ tự các record $j=1; // theo số thứ tự của trang để tạo liên kết
for($i=0;$i < $totalRecords;$i+=$pagesize){
if($i <> $start){echo " $j "; } else { echo $j;} $j=$j+1;
}
if($next < $totalRecords)
{echo "Next";}
} ?>
213
HỎI ĐÁP ?
Môn Các Hệ Thống Mã Nguồn Mở
214
Chương 7:
Môn Các Hệ Thống Mã Nguồn Mở
MÔ HÌNH PHP MVC
22/03/2016
215
Môn Các Hệ Thống Mã Nguồn Mở
Nội Dung
1. Khái niệm về kiến trúc phần mềm 2. Tổng quan về kiến trúc 3 lớp 3. Tổng quan về kiến trúc MVC 4. So sánh MVC và 3 lớp 5. Xây dựng website PHP MVC đơn giản 6. Framework MVC cho website PHP
216
Môn Các Hệ Thống Mã Nguồn Mở
Khái niệm về kiến trúc phần mềm
“Kiến trúc phần mềm của một chương trình hoặc hệ
thống tính toán là cấu trúc hoặc các cấu trúc của hệ
thống đó, gồm các thành phần của phần mềm, các thuộc
tính có thể trông thấy được từ bên ngoài của các thành
phần này, và các mối quan hệ giữa chúng.”
Phát triển phần mềm theo một kiến trúc nhất định sẽ giúp
cho việc quản lý hệ thống được tốt hơn và tận dụng tài
nguyên của hệ thống hiệu quả hơn. Đồng thời cũng dễ
bảo trì và mở rộng.
217
Môn Các Hệ Thống Mã Nguồn Mở
Tổng quan về mô hình 3 lớp
Để dễ quản lý các thành phần của hệ thống, cũng
như không bị ảnh hưởng bởi các thay đổi, người ta
hay nhóm các thành phần có cùng chức năng lại với
nhau và phân chia trách nhiệm cho từng nhóm để
công việc không bị chồng chéo và ảnh hưởng lẫn
nhau. Một trong những mô hình lập trình như vậy đó
là Mô hình 3 lớp (Three Layers).
218
Môn Các Hệ Thống Mã Nguồn Mở
Các thành phần trong 3-Layer
Mô hình 3 lớp được cấu thành từ: Presentation Layers, Business Logic Layers, và Data Access Layers.
219
Môn Các Hệ Thống Mã Nguồn Mở
Cách vận hành của mô hình
Đối với 3-Layer, yêu cầu được xử lý tuần tự qua các layer như hình. - Đầu tiên User giao tiếp với Presentation Layers (GUI) để gửi đi thông tin và yêu cầu. Tại layer này, các thông tin sẽ được kiểm tra, nếu OK chúng sẽ được chuyển xuống Business Logic Layer (BLL). - Tại BLL, các thông tin sẽ được nhào nặn, tính toán theo đúng yêu cầu đã gửi, nếu không cần đến Database thì BLL sẽ gửi trả kết quả về GUI, ngược lại nó sẽ đẩy dữ liệu (thông tin đã xử lý) xuống Data Access Layer (DAL). - DAL sẽ thao tác với Database và trả kết quả về cho BLL, BLL kiểm tra và gửi nó lên GUI để hiển thị cho người dùng. - Một khi gặp lỗi (các trường hợp không đúng dữ liệu) thì đang ở layer nào thì quăng lên trên layer cao hơn nó 1 bậc cho tới GUI thì sẽ quăng ra cho người dùng biết - Các dữ liệu được trung chuyển giữa các Layer thông qua một đối tượng gọi là Data Transfer Object (DTO), đơn giản đây chỉ là các Class đại diện cho các đối tượng được lưu trữ trong Database.
Tổ chức mô hình 3-Layer Có rất nhiều cách đặt tên cho các thành phần của 3 lớp như: Cách 1: GUI, BUS, DAL Cách 2: GUI, BLL, DAO, DTO Cách 3: Presentation, BLL, DAL
220
Môn Các Hệ Thống Mã Nguồn Mở
Tổng quan mô hình MVC
• MVC là một mô hình trong phát triển phần mềm chuyên
giành cho website.
221
Môn Các Hệ Thống Mã Nguồn Mở
Các Thành Phần Trong MVC
• Trong kiến trúc này, hệ thống được chia thành 3 tầng tương
ứng đúng với tên gọi của nó (Model – View – Controller). Ở đó nhiệm vụ cụ thể của các tầng được phân chia như sau:
1. Model (Tầng dữ liệu): là một đối tượng hoặc một tập hợp các đối tượng biểu diễn cho phần dữ liệu của chương trình. Nó được giao nhiệm vụ cung cấp dữ liệu cho cơ sở dữ liệu và lưu dữ liệu vào các kho chứa dữ liệu. Tất cả các nghiệp vụ logic được thực thi ở Model. Dữ liệu vào từ người dùng sẽ thông qua View đến Controller và được kiểm tra ở Model trước khi lưu vào cơ sở dữ liệu. Việc truy xuất, xác nhận, và lưu dữ liệu là một phần của Model
222
Môn Các Hệ Thống Mã Nguồn Mở
Các Thành Phần Trong MVC
• 2. View (Tầng giao diện): là phần giao diện với người
dùng, bao gồm việc hiện dữ liệu ra màn hình, cung cấp các menu, nút bấm, hộp đối thoại, chọn lựa …, để người dùng có thể thêm, xóa. sửa, tìm kiếm và làm các thao tác khác đối với dữ liệu trong hệ thống.. Thông thường, các thông tin cần hiển thị được lấy từ thành phần Models.
3. Controller (Tầng điều khiển): là phần điều khiển của ứng dụng, điều hướng các nhiệm vụ (task) đến đúng phương thức (method) có chức năng xử lý nhiệm vụ đó. Nó chịu trách nhiệm xử lý các tác động về mặt giao diện, các thao tác đối với models, và cuối cùng là chọn một view thích hợp để hiển thị ra màn hình.
223
Môn Các Hệ Thống Mã Nguồn Mở
Ưu – nhược điểm
• 1. Ưu điểm:
Phát triển phần mềm: Có tính chuyên nghiệp hóa, có thể chia cho nhiều nhóm được đào tạo nhiều kỹ năng khác nhau, từ thiết kế mỹ thuật cho đến lập trình đến tổ chức database. Giúp phát triển ứng dụng nhanh, đơn giản, dễ nâng cấp.. Bảo trì: Với các lớp được phân chia theo như đã nói, thì các thành phần của một hệ thống dễ được thay đổi, nhưng sự thay đổi có thể được cô lập trong từng lớp, hoặc chỉ ảnh hưởng đến lớp ngay gần kề của nó, chứ không phát tán náo loạn trong cả chương trình. Mở rộng: Với các lớp được chia theo ba lớp như đã nói, việc thêm chức năng vào cho từng lớp sẽ dễ dàng hơn là phân chia theo cách khác. 2. Nhược điểm: Đối với dự án nhỏ việc áp dụng mô hình MC gây cồng kềnh, tốn thời gian trong quá trình phát triể. Tốn thời gian trung chuyển dữ liệu của các tầng
224
Môn Các Hệ Thống Mã Nguồn Mở
So sánh MVC và 3 lớp • 1. Điểm giống:
Tách rời programming core/business logic ra khỏi những phụ thuộc về tài nguyên và môi trường. Presentation Layer (PL) thể hiện giống như chức năng của View và Controller. Business Layer (BL) và Data Access Layer (DL) thể hiện giống như chức năng của Model. Như thế nhìn ở góc độ này, thì MVC tương đương với 3-layer (tất nhiên có chồng chéo như hình vẽ)
225
Môn Các Hệ Thống Mã Nguồn Mở
So sánh MVC và 3 lớp
Trong mô hình 3 lớp, quá trình đi theo chiều dọc, bắt đầu từ PL, sang
2. Điểm khác:
BL, rồi tới DL, và từ DL, chạy ngược lại BL rồi quay ra lại PL.
chuyển cho Controller cập nhật vào Model, rồi sau đó dữ liệu trong
Còn trong mô hình MVC, dữ liệu được nhận bởi View, View sẽ
Model sẽ được đưa lại cho View mà không thông qua Controller, do
vậy luồng xử lý này có hình tam giác.
226
Xây dựng website PHP MVC đơn giản
• Xây dựng website bookstore theo mô hình MVC
• B1 : Xây dựng cấu trúc Website như sau
• Thư mục controller chứa các thành phần điều kiển của ứng dụng • Thư mục model chứa các lớp đối tượng dữ liệu • Thư mục view chứa các thành phần giao diện • Index.php là trang chủ của website
Môn Các Hệ Thống Mã Nguồn Mở
227
Xây dựng website PHP MVC đơn giản
• B2 : Xây dựng các đối tượng dữ liệu
• File Book.php chứa khai báo lớp dữ liệu Book
class Book{
public $title; public $author; public $description; public function __construct($title, $author, $des) {
$this->title = $title; $this->author = $author; $this->description = $des;
}
}
?>
Môn Các Hệ Thống Mã Nguồn Mở
228
Xây dựng website PHP MVC đơn giản
• B2 : Xây dựng các đối tượng dữ liệu
• File Database.php chứa các thao tác kết nối CSDL để lấy dữ liệu, ở đây
để thao tác đơn, ví dụ chỉ demo có một mảng dữ liệu cho trước.
Môn Các Hệ Thống Mã Nguồn Mở
229
Xây dựng website PHP MVC đơn giản
• B3 : Xây dựng các đối tượng view
• File booklist.php để xem danh sách book
Môn Các Hệ Thống Mã Nguồn Mở
230
Xây dựng website PHP MVC đơn giản
• B3 : Xây dựng các đối tượng view
• File viewbook.php để xem một cuốn sách
Môn Các Hệ Thống Mã Nguồn Mở
231
Xây dựng website PHP MVC đơn giản
• B4 : Xây dựng các đối tượng controller
• File controller.php điều khiển các luồng truy cập, • Khi Website có nhiều đối tượng dữ liệu, thì các controller sẽ được đặt tên theo từng loại dữ liệu. (vd : BookController, AuthorController…)
Môn Các Hệ Thống Mã Nguồn Mở
232
Xây dựng website PHP MVC đơn giản
• B5 : Xây dựng trang chủ của website
Môn Các Hệ Thống Mã Nguồn Mở
233
Xây dựng website PHP MVC đơn giản
• B6 : Thực Thi Website
Môn Các Hệ Thống Mã Nguồn Mở
234
Xây dựng website PHP MVC đơn giản
• B6 : Thực Thi Website
Môn Các Hệ Thống Mã Nguồn Mở
235
Môn Các Hệ Thống Mã Nguồn Mở
Framework PHP MVC cơ bản • Framework (FW) là một kiến trúc nền tảng để phát triển
phần mềm.
• FW cung cấp các chức năng chung, phổ biến và có thể tái sử dụng cho các lập trình viên để phát triển các giải pháp, các phần mềm khác nhau.
• FW giúp các lập trình viên không phải xây dựng hệ thống từ đầu, tiết kiệm thời gian trong quá trình phát triển phần mềm.
• Có nhiều Framework có sẵn như : .NET FW, Zend FW,
Spring FW,… • Để sử dụng tốt một Framework cần nhiều thời gian. • Có thể xây dựng một Framework riêng để đỡ mất thời gian huấn
luyện và FW gọn nhẹ.
236
Môn Các Hệ Thống Mã Nguồn Mở
Framework PHP MVC cơ bản • Các bước xây dựng Framework MVC đơn giản cho
website PHP như sau : • Bước 1 : Xây dựng cấu trúc thư mục FW
application – code chỉ định cho ứng dụng config – cấu hình Database db – sao lưu dữ liệu library – chứa framework public – Các file hình ảnh cho ứng dụng scripts –Các script nhúng tmp – dữ liệu tạm
237
Môn Các Hệ Thống Mã Nguồn Mở
Framework MVC cho website PHP • Lưu ý :
• 1. Các bảng trong mySQL sẽ là chữ thường và số nhiều. Ví dụ :
products, books, customers… Các cột mã sẽ có mẫu : tênbảng_id. Ví
dụ : Product_id,….
2. Các lớp model sẽ là số ít và in hoa chữ đầu. Ví dụ : Product, Book,
Customer…
3. Các lớp Controller thêm chữ Controller sau Model (có s). Ví dụ :
BooksController, CustomersController…
4. Các giao diện View sẽ được chứa trong thư mục của từng Model,
tên thư mục là chữ thường số nhiều, và mỗi view sẽ có tên tùy vào
hành động trong Controller. Ví dụ : books\view.php, books\viewall.php,
books\buy.php…
238
Môn Các Hệ Thống Mã Nguồn Mở
Framework MVC cho website PHP
• Mô hình hoạt động
239
Môn Các Hệ Thống Mã Nguồn Mở
Framework MVC cho website PHP
• Bước 2 : Tạo file .htaccess trong thư mục gốc để chuyển
tất cả các request đến thư mục public.
public/
[L]
^$ (.*) public/$1
[L]
RewriteEngine on
RewriteRule
RewriteRule
240
Môn Các Hệ Thống Mã Nguồn Mở
Framework MVC cho website PHP
• Bước 3 : Tạo file .htaccess trong thư mục public để
chuyển tất cả các request đến file public/index.php để xử
lý theo mẫu : public/index.php?url=PATHNAME
(PATHNAME chính là đường dẫn được người dùng gõ)
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
241
Môn Các Hệ Thống Mã Nguồn Mở
Framework MVC cho website PHP
• Bước 4 : Tạo file index.php trong thư mục public để định
nghĩa các hằng và gọi file bootstrap.php
define('DS', DIRECTORY_SEPARATOR);
define('ROOT', dirname(dirname(__FILE__)));
$url = $_GET['url'];
require_once (ROOT . DS . 'library' . DS .
'bootstrap.php');
?>
242
Môn Các Hệ Thống Mã Nguồn Mở
Framework MVC cho website PHP
• Bước 5 : Tạo file bootstrap.php trong thư mục library. File
này sẽ gọi các file cấu hình và các file khác.
require_once (ROOT . DS . 'config' . DS .
'config.php');
require_once (ROOT . DS . 'config' . DS .
'routing.php');
require_once (ROOT . DS . 'library' . DS .
'shared.php'); ?>
243
Môn Các Hệ Thống Mã Nguồn Mở
Framework MVC cho website PHP
• Bước 6 : Tạo file config.php và routing.php trong thư mục
config
244
Môn Các Hệ Thống Mã Nguồn Mở
Framework MVC cho website PHP
• Bước 6 : Tạo file config.php và routing.php trong thư mục
config
$routing = array(
'/admin\/(.*?)\/(.*?)\/(.*)/' =>
'admin/\1_\2/\3' ); //…thêm một số routing cần thiết $default['controller'] = 'homes'; $default['action'] = 'index'; ?>
245
Môn Các Hệ Thống Mã Nguồn Mở
Framework MVC cho website PHP • Bước 7 : Tạo file shared.php, đây là file chính sẽ phân
tích request và gọi controller tương ứng
/** Main Call Function **/ function callHook() {
global $url; $urlArray = array(); $urlArray = explode("/",$url); $controller = $urlArray[0]; array_shift($urlArray); $action = $urlArray[0]; array_shift($urlArray); $queryString = $urlArray; $controllerName = $controller; $controller = ucwords($controller); $model = rtrim($controller, 's'); $controller .= 'Controller'; $dispatch = new $controller($model,$controllerName,$action); if ((int)method_exists($controller, $action)) {
call_user_func_array(array($dispatch,$action),$queryString);
} else {
/* Error Generation Code Here */
}
246
} callHook();
Môn Các Hệ Thống Mã Nguồn Mở
Framework MVC cho website PHP • Bước 7 : trong file shared.php còn chứa hàm __autoload từ
động tìm kiếm khai báo lớp khi có 1 đối tượng được tạo
function __autoload($className) {
if (file_exists(ROOT . DS . 'library' . DS . strtolower($className) . '.class.php')) {
require_once(ROOT . DS . 'library' . DS . strtolower($className) .
'.class.php');
} else if (file_exists(ROOT . DS . 'application' . DS . 'controllers' . DS .
strtolower($className) . '.php')) {
require_once(ROOT . DS . 'application' . DS . 'controllers' . DS .
strtolower($className) . '.php');
} else if (file_exists(ROOT . DS . 'application' . DS . 'models' . DS .
strtolower($className) . '.php')) {
require_once(ROOT . DS . 'application' . DS . 'models' . DS .
strtolower($className) . '.php');
} else {
/* Error Generation Code Here */ echo "Can not load class {$className}.";
}
}
247
Môn Các Hệ Thống Mã Nguồn Mở
Framework MVC cho website PHP • Bước 8 : tiếp theo ta sẽ xây dựng các đối tượng trong mô hình MVC. Các controller sẽ được kế thừa từ một lớp Controller gốc được chứa trong file library/controller.php
class Controller {
protected $_model; protected $_controller; protected $_action; protected $_template; function __construct($model, $controller, $action) { $this->_controller = $controller; $this->_action = $action; $this->_model = $model; $this->_template = new Template($controller,$action);
} function set($name,$value) {$this->_template->set($name,$value); }
function __destruct() {
$this->_template->render();
}
}
248
Môn Các Hệ Thống Mã Nguồn Mở
Framework MVC cho website PHP • Bước 8 : trong Controller có gọi lớp Template là lớp thực hiện việc
render nội dung với view tương ứng
class Template {
protected $variables = array(); protected $_controller; //tacgias protected $_action; //viewall function __construct($controller,$action) {
$this->_controller = $controller; $this->_action = $action;
} function set($name,$value) {
$this->variables[$name] = $value;
} function render() { ….
}
}
249
Môn Các Hệ Thống Mã Nguồn Mở
Framework MVC cho website PHP • Bước 8 : các lớp Controller theo từng ứng dụng. Ví dụ : TacgiasController (trong thư mục application/controllers)
class TacgiasController extends Controller {
function view($id = null,$name = null) {
$model = new $this->_model();
$this->set('title','Tác giả : '.$name.' - Book Online App');
$this->set('datatable',$model->select($id));
}
function viewall() {
$model = new $this->_model();
$this->set('title','Danh sách tác giả - Book Online App');
$this->set('datatable',$model->selectAll());
}
}
250
Môn Các Hệ Thống Mã Nguồn Mở
Framework MVC cho website PHP • Bước 8 : các view giao diện, ví dụ : viewall.php (trong thư mục
application/views/tacgias/viewall.php)
">
251
Môn Các Hệ Thống Mã Nguồn Mở
Framework MVC cho website PHP • Bước 8 : trong lớp TacgiasController có gọi tạo lớp Tacgia (lớp model) trong thư mục application/models/tacgia.php. Các lớp model thực chất là lớp kết nối CSDL để lấy dữ liệu theo từng câu truy vấn.
class Tacgia extends Model {
}
?>
252
Môn Các Hệ Thống Mã Nguồn Mở
Framework MVC cho website PHP • Bước 8 : lớp Model cha (trong library)
class Model extends SQLQuery {
protected $_model;
function __construct() {
$this-
>connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
$this->_model = get_class($this); //$this->_table = strtolower($this->_model)."s"; $this->_table = strtolower($this->_model);
}
function __destruct() {
$this->disconnect();
}
}
253
Môn Các Hệ Thống Mã Nguồn Mở
Framework MVC cho website PHP • Bước 8 : lớp SqlQuery gốc (trong library)
class SQLQuery {
protected $_dbHandle;
protected $_result;
function connect($address, $account, $pwd, $name) { }
function disconnect() { }
function selectAll() { }
function select($id) { }
function query($query, $singleResult = 0) {
}
}
254
Môn Các Hệ Thống Mã Nguồn Mở
Framework MVC cho website PHP • Bước 9 : Gọi ứng dựng theo
mẫu • http://domain.com/controller/actio
n/query
255
HỎI ĐÁP ?
Môn Các Hệ Thống Mã Nguồn Mở