Trong thời đại ngày nay, website đã phát triển như một công cụ để trao đổi thông tin, mua bán trên trên mọi lĩnh vực. Sự ra đời của các ngôn ngữ lập trình khiến cho việc thiết kế lên một website cũng không còn quá khó khăn. Có rất nhiều ngôn ngữ được sử dụng để tạo ra một trang web đáp ứng được nhu cầu của người sử dụng. PHP (Personal Home Page) là một trong số đó, là kịch bản trên phía trình chủ (Sever Scipt) cho phép chúng ta xây dựng trang web trên cơ sở dữ liệu. Với nhiều ưu điểm nổi bật mà PHP được rất nhiều người sử dụng. PHP giúp thiết kế web dễ dàng hơn, chi phí hơn, do đó sẽ tiết kiệm nhiều hơn cho việc thiết kế web so với các ngôn ngữ khác như Perl, CGI, ASP. Cùng với sự hình thành của Internet, sự ra đời và phát triển của hệ thống website đã làm cải thiện và phong phú hơn cho xã hội hiện nay. Với xu thế đó, xây dựng website trở thành một hành động “cần được xem xét” đối với lập trình viên. Khác với mô hình lập trình Desktop thông thường, lập trình trên môi trường web chủ yếu dựa vào mô hình ClientServer và giao thức HTTP để làm việc. Hiện tại, có khá nhiều ngôn ngữ cho phép chúng ta lập trình web như Java, .NET, PHP, Perl, Python, Ruby on Rails…mỗi ngôn ngữ đều có những ưu và khuyết điểm riêng. Nội dung của đề tài này sẽ đi vào một số điểm nổi bật của PHP và một số nhân tố khiến PHP ngày càng trở nên phổ biến như ngày nay. Với PHP, bạn có thể viết ra nhiều kiểu ứng dụng có mô hình tương tác khác nhau như thông qua website (HTTP Request – Response), thông qua Command Line Interface – CLI (Shell, Batch processing…), Web Service (SOAP, REST…), thông qua ứng dụng Desktop (PHPGTK)…. Giống như các công nghệ web khác, PHP là một ngôn ngữ phía Server, có nghĩa là code của bạn sẽ được triển khai và thực thi trên Server. Mới ra đời gần 15 năm nhưng PHP đã có sự phát triển nhanh chóng và chóng mặt. Có thể chỉ ra đây một số ứng dụng nổi tiếng viết bằng PHP như: Yahoo, Facebook, Wikipedia, Digg, Joomla, WordPress…Sự phổ biến của PHP trong xây dựng web đã làm cho ngày càng nhiều website triển khai bằng PHP. Một số dạng web tiêu biểu có thể viết bằng PHP là : Social Network, Message Board (Forum, Guestbook, Blog…), CMS (Content Management System), ECommerce, Multimedia (Image Gallery, Music, Video…), Web Mail, IM (Instant Message), Office tools… PHP đựa trên cú pháp của ngôn ngữ lập trình C, chính vì vậy khi làm việc với PHP bạn phải là người có kiến thức về ngôn ngữ lập trình C, C++, Visual C. Nếu bạn xây dựng ứng dụng PHP có kết nối cơ sở dữ liệu Mysql, SQL, Server hay Oracal là điều cần thiết. Khi người dùng gọi trang PHP, web Server triệu gọi PHP Engine để thông dịch trang PHP và trả kết quả cho người dùng. Với sự giúp đỡ và hướng dẫn của thầy giáo, Thạc sỹ Nguyễn Thế Bình với đề tài : “ Tìm hiểu ngôn ngữ lập trình PHP và các ứng dụng của ngôn ngữ lập trình PHP”.
Trang 1MỤC LỤC
LỜI MỞ ĐẦU 3
-CHƯƠNG I: TÌM HIỂU VỀ LỊCH SỬ PHÁT TRIỂN CỦA NGÔN NGỮ LẬP TRÌNH PHP 5
-1.1 N HỮNG KHÁI NIỆM CƠ BẢN VỀ NGÔN NGỮ PHP 5
-1.2 L ỊCH SỬ PHÁT TRIỂN CỦA NGÔN NGỮ PHP: 6
-M ỘT SỐ ƯU , NHƯỢC ĐIỂM CỦA NGÔN NGỮ PHP 10
-1.3 A PPSERV N ETWORK 14
-CHƯƠNG II: SO SÁNH NGÔN NGỮ PHP VÀ MỘT SỐ NGÔN NGỮ KHÁC 24
-2.1 S O SÁNH PHP VÀ ASP.N ET : 24
-2.2 S O SÁNH PHP VÀ P YTHON 27
-2.3 S O SÁNH PHP VÀ HTML: 29
CHƯƠNG III: CÚ PHÁP TRONG PHP 32
-3.1 C ẤU TRÚC CƠ BẢN 32
-3.2 X UẤT GIÁ TRỊ RA TRÌNH DUYỆT : 33
-3.3 B IẾN 33
-3.4 H ẰNG 38
-3.5 C HUỖI 39
-3.6 K IỂU DỮ LIỆU 48
-3.7 P HÉP TOÁN TRONG PHP 56
-3.8 P HÁT BIỂU CÓ ĐIỀU KIỆN 62
-3.9 L ÀM VIỆC VỚI MẢNG DỮ LIỆU 70
-3.10 K IỂU D ATETIME 76
-CHƯƠNG IV: CÁC ỨNG DỤNG CỦA NGÔN NGỮ LẬP TRÌNH PHP- 78 -4.1 PHP-N UKE 78
Trang 2-4.2 N UKE V IET 79
-4.3 J OOMLA 84
-4.4 PHPBB 87
-4.5 SMF 90
-4.6 M Y BB 93
-4.7 P RESTASHOP 97
-4.8 M AGENTO 99
-4.9 C ODE I GNITER 100
-4.10 Z END 103
-CHƯƠNG V: SỰ HƯỞNG ỨNG PHP Ở VIỆT NAM VÀ ĐÓNG GÓP CỦA NGƯỜI VIỆT ĐỐI VỚI PHP THẾ GIỚI 104
-5.1 S Ự HƯỞNG ỨNG PHP Ở V IỆT N AM 104
-5.2 Đ ÓNG GÓP CỦA NGƯỜI V IỆT VỚI CỘNG ĐỒNG PHP THẾ GIỚI 109
KẾT LUẬN 112
TÀI LIỆU THAM KHẢO: 114
Trang 3-L I M Đ U ỜI MỞ ĐẦU Ở ĐẦU ẦU
Trong thời đại ngày nay, website đã phát triển như một công cụ để trao đổi thôngtin, mua bán trên trên mọi lĩnh vực Sự ra đời của các ngôn ngữ lập trình khiến cho việc thiết kế lên một website cũng không còn quá khó khăn Có rất nhiều ngôn ngữ được sử dụng để tạo ra một trang web đáp ứng được nhu cầu của người sử dụng PHP (Personal Home Page) là một trong số đó, là kịch bản trên phía trình chủ (Sever Scipt) cho phép chúng ta xây dựng trang web trên cơ sở dữ liệu Với nhiều ưu điểm nổi bật mà PHP được rất nhiều người sử dụng PHP giúpthiết kế web dễ dàng hơn, chi phí hơn, do đó sẽ tiết kiệm nhiều hơn cho việc thiết kế web so với các ngôn ngữ khác như Perl, CGI, ASP
Cùng với sự hình thành của Internet, sự ra đời và phát triển của hệ thống
website đã làm cải thiện và phong phú hơn cho xã hội hiện nay Với xu thế đó, xây dựng website trở thành một hành động “cần được xem xét” đối với lập trình viên
Khác với mô hình lập trình Desktop thông thường, lập trình trên môi trường webchủ yếu dựa vào mô hình Client-Server và giao thức HTTP để làm việc Hiện tại,
có khá nhiều ngôn ngữ cho phép chúng ta lập trình web như Java, NET, PHP, Perl, Python, Ruby on Rails…mỗi ngôn ngữ đều có những ưu và khuyết điểm riêng Nội dung của đề tài này sẽ đi vào một số điểm nổi bật của PHP và một số nhân tố khiến PHP ngày càng trở nên phổ biến như ngày nay
Với PHP, bạn có thể viết ra nhiều kiểu ứng dụng có mô hình tương tác khác nhau như thông qua website (HTTP Request – Response), thông qua Command Line Interface – CLI (Shell, Batch processing…), Web Service (SOAP,
Trang 4REST…), thông qua ứng dụng Desktop (PHP-GTK)… Giống như các công nghệ web khác, PHP là một ngôn ngữ phía Server, có nghĩa là code của bạn sẽ được triển khai và thực thi trên Server.
Mới ra đời gần 15 năm nhưng PHP đã có sự phát triển nhanh chóng và chóng mặt Có thể chỉ ra đây một số ứng dụng nổi tiếng viết bằng PHP như: Yahoo, Facebook, Wikipedia, Digg, Joomla, WordPress…Sự phổ biến của PHP trong xây dựng web đã làm cho ngày càng nhiều website triển khai bằng PHP Một số dạng web tiêu biểu có thể viết bằng PHP là : Social Network, Message Board (Forum, Guestbook, Blog…), CMS (Content Management System), E-
Commerce, Multimedia (Image Gallery, Music, Video…), Web Mail, IM
(Instant Message), Office tools…
PHP đựa trên cú pháp của ngôn ngữ lập trình C, chính vì vậy khi làm việc với PHP bạn phải là người có kiến thức về ngôn ngữ lập trình C, C++, Visual C Nếubạn xây dựng ứng dụng PHP có kết nối cơ sở dữ liệu Mysql, SQL, Server hay Oracal là điều cần thiết
Khi người dùng gọi trang PHP, web Server triệu gọi PHP Engine để thông dịch trang PHP và trả kết quả cho người dùng
Với sự giúp đỡ và hướng dẫn của thầy giáo, Thạc sỹ Nguyễn Thế Bình với đề tài: “ Tìm hiểu ngôn ngữ lập trình PHP và các ứng dụng của ngôn ngữ lập trình PHP”
Trang 5CHƯƠNG I: TÌM HIỂU VỀ LỊCH SỬ PHÁT TRIỂN
CỦA NGÔN NGỮ LẬP TRÌNH PHP
1.1 Những khái niệm cơ bản về ngôn ngữ PHP
a Khái niệm HTML:
- HTML (HyperText Markup Language) là ngôn ngữ để xây dựng trang web, nó
mô tả cách thức một trang web hiển thị như thế nào trong một trình duyệt
HTML là một ngôn ngữ mô tả tài liệu, được hình thành từ ngôn ngữ mô tả tổng quát SGML (Standard Generalized Markup Language) do hãng IBM đề xướng
từ năm 1960 HTML không phải là một ngôn ngữ lập trình, nó cung cấp các chỉ thị định dạng để phục vụ cho việc trình bày văn bản và các đối tượng khác như hình ảnh, video, các plug in…
- Là một ngôn ngữ đánh dấu được thiết kế ra để tạo nên các trang web với các mẩu thông tin được trình bày trên World Wide Web HTML được định nghĩa như là một ứng dụng đơn giản của SGML và được sử dụng trong các tổ chức cầnđến các yêu cầu xuất bản phức tạp HTML đã trở thành một chuẩn Internet do tổ chức World Wide Web Consortium (W3C) duy trì Phiên bản chính thức mới nhất của HTML là HTML 4.01 (1999) Sau đó, các nhà phát triển đã thay thế nó bằng XHTML Hiện nay, HTML đang được phát triển tiếp với phiên
bản HTML5 hứa hẹn mang lại diện mạo mới cho Web
Bằng cách dùng HTML động hoặc Ajax, lập trình viên có thể được tạo ra và xử
lý bởi số lượng lớn các công cụ, từ một chương trình soạn thảo văn bản đơn giản – có thể gõ vào ngay từ những dòng đầu tiên – cho đến những công cụ xuất bản WYSIWYG phức tạp
- HTML không phải là ngôn ngữ lập trình, nó là ngôn ngữ trình bày
Trang 7nguồn của PHP/FI cho mọi người xem, sử dụng cũng như sửa các lỗi có trong nóđồng thời cải tiến mã nguồn.
- PHP/FI, viết tắt từ "Personal Home Page/Forms Interpreter", bao gồm một số các chức năng cơ bản cho PHP như ta đã biết đến chúng ngày nay Nó có các biến kiểu như Perl, thông dịch tự động các biến của form và cú pháp HTML nhúng Cú pháp này giống như của Perl, mặc dù hạn chế hơn nhiều, đơn giản và
có phần thiếu nhất quán
- Vào năm 1997, PHP/FI 2.0, lần viết lại thứ hai của phiên bản C, đã thu hút được hàng ngàn người sử dụng trên toàn thế giới với xấp xỉ 50.000 tên miền đã được ghi nhận là có cài đặt nó, chiếm khoảng 1% số tên miền có trên mạng Internet Tuy đã có tới hàng nghìn người tham gia đóng góp vào việc tu chỉnh mãnguồn của dự án này thì vào thời đó nó vẫn chủ yếu chỉ là dự án của một người
- PHP/FI 2.0 được chính thức công bố vào tháng 11 năm 1997, sau một thời giankhá dài chỉ được công bố dưới dạng các bản beta Nhưng không lâu sau đó, nó
đã được thay thế bởi các bản alpha đầu tiên của PHP 3.0
tử mà họ đang xúc tiến trong một dự án của trường đại học Trong một nỗ lực hợp tác và bắt đầu xây dựng dựa trên cơ sở người dùng đã có của PHP/FI, Andi, Rasmus và Zeev đã quyết định hợp tác và công bố PHP 3.0 như là phiên bản thế
hệ kế tiếp của PHP/FI 2.0, và chấm dứt phát triển PHP/FI 2.0
Trang 8- Một trong những sức mạnh lớn nhất của PHP 3.0 là các tính năng mở rộng mạnh mẽ của nó Ngoài khả năng cung cấp cho người dùng cuối một cơ sở hạ tầng chặt chẽ dùng cho nhiều cơ sở dữ liệu, giao thức và API khác nhau, các tínhnăng mở rộng của PHP 3.0 đã thu hút rất nhiều nhà phát triển tham gia và đề xuất các mô đun mở rộng mới Hoàn toàn có thể kết luận được rằng đây chính là điểm mấu chốt dẫn đến thành công vang dội của PHP 3.0 Các tính năng khác được giới thiệu trong PHP 3.0 gồm có hỗ trợ cú pháp hướng đối tượng và nhiều
cú pháp ngôn ngữ nhất quán khác
- Ngôn ngữ hoàn toàn mới đã được công bố dưới một cái tên mới, xóa bỏ mối liên hệ với việc sử dụng vào mục đích cá nhân hạn hẹp mà cái tên PHP/FI 2.0 gợi nhắc Nó đã được đặt tên ngắn gọn là 'PHP', một kiểu viết tắt hồi quy của
Trang 9- Một động cơ mới, có tên 'Zend Engine' (ghép từ các chữ đầu trong tên của Zeev
và Andi), đã đáp ứng được các nhu cầu thiết kế này một cách thành công, và lần đầu tiên được giới thiệu vào giữa năm 1999 PHP 4.0, dựa trên động cơ này, và
đi kèm với hàng loạt các tính năng mới bổ sung, đã chính thức được công bố vàotháng 5 năm 2000, gần 2 năm sau khi bản PHP 3.0 ra đời Ngoài tốc độ xử lý được cải thiện rất nhiều, PHP 4.0 đem đến các tính năng chủ yếu khác gồm có sự
hỗ trợ nhiều máy chủ Web hơn, hỗ trợ phiên làm việc HTTP, tạo bộ đệm thông tin đầu ra, nhiều cách xử lý thông tin người sử dụng nhập vào bảo mật hơn và cung cấp một vài các cấu trúc ngôn ngữ mới
- Với PHP 4, số nhà phát triển dùng PHP đã lên đến hàng trăm nghìn và hàng triệu site đã công bố cài đặt PHP, chiếm khoảng 20% số tên miền trên
mạng Internet
- Nhóm phát triển PHP cũng đã lên tới con số hàng nghìn người và nhiều nghìn người khác tham gia vào các dự án có liên quan đến PHP như PEAR, PECL và tài liệu kĩ thuật cho PHP
d PHP 5:
- Sự thành công hết sức to lớn của PHP 4.0 đã không làm cho nhóm phát triển PHP tự mãn Cộng đồng PHP đã nhanh chóng giúp họ nhận ra những yếu kém của PHP 4 đặc biệt với khả năng hỗ trợ lập trình hướng đối tượng (OOP), xử
lý XML, không hỗ trợ giao thức máy khách mới của MySQL 4.1 và 5.0, hỗ trợ dịch vụ web yếu Những điểm này chính là mục đích để Zeev và Andi viết Zend Engine 2.0, lõi của PHP 5.0 Một thảo luận trên Slashdot đã cho thấy việc phát triển PHP 5.0 có thể đã bắt đầu vào thời điểm tháng 12 năm 2002 nhưng những bài phỏng vấn Zeev liên quan đến phiên bản này thì đã có mặt trên
mạng Internet vào khoảng tháng 7 năm 2002 Ngày 29 tháng 6 năm 2003, PHP 5Beta 1 đã chính thức được công bố để cộng đồng kiểm nghiệm Đó cũng là phiên
Trang 10bản đầu tiên của Zend Engine 2.0 Phiên bản Beta 2 sau đó đã ra mắt vào tháng
10 năm 2003 với sự xuất hiện của hai tính năng rất được chờ
đợi: Iterators, Reflection nhưng namespaces một tính năng gây tranh cãi khác đã
bị loại khỏi mã nguồn Ngày 21 tháng 12 năm 2003: PHP 5 Beta 3 đã được công
bố để kiểm tra với việc phân phối kèm với Tidy, bỏ hỗ trợ Windows 95, khả năng gọi các hàm PHP bên trong XSLT, sửa chữa nhiều lỗi và thêm khá nhiều hàm mới PHP 5 bản chính thức đã ra mắt ngày 13 tháng 7 năm 2004 sau một chuỗi khá dài các bản kiểm tra thử bao gồm Beta 4, RC 1, RC2, RC3 Mặc dù coi đây là phiên bản sản xuất đầu tiên nhưng PHP 5.0 vẫn còn một số lỗi trong
đó đáng kể là lỗi xác thực HTTP
- Ngày 14 tháng 7 năm 2005, PHP 5.1 Beta 3 được PHP Team công bố đánh dấu
sự chín muồi mới của PHP với sự có mặt của PDO, một nỗ lực trong việc tạo ra một hệ thống API nhất quán trong việc truy cập cơ sở dữ liệu và thực hiện các câu truy vấn Ngoài ra, trong PHP 5.1, các nhà phát triển PHP tiếp tục có những cải tiến trong nhân Zend Engine 2, nâng cấp mô đun PCRE lên bản PCRE 5.0 cùng những tính năng và cải tiến mới trong SOAP, streams và SPL
e PHP 6:
- Hiện nay phiên bản tiếp theo của PHP đang được phát triển, PHP 6 bản sử dụngthử đã có thể được download tại địa chỉ http://snaps.php.net Phiên bản PHP 6 được kỳ vọng sẽ lấp đầy những khiếm khuyết của PHP ở phiên bản hiện tại, ví dụ: hỗ trợ namespace (hiện tại các nhà phát triển vẫn chưa công bố rõ ràng về vấn đề này); hỗ trợ Unicode; sử dụng PDO làm API chuẩn cho việc truy cập cơ
sở dữ liệu, các API cũ sẽ bị đưa ra thành thư viện PECL
1.3 Một số ưu, nhược điểm của ngôn ngữ PHP
a Ưu điểm:
Trang 11Theo báo cáo về việc sử dụng ngôn ngữ PHP tháng 4 năm 2006 của Netcraft thì trên 20 triệu tên miền trên trang web sử dụng ngôn ngữ PHP TIOBE đã xuất bảnmột mục lục chỉ thị cộng đồng lập trình được cộng đồng phát triển web phát triểnbằng nhiều ngôn ngữ Chỉ mục này cho thấy rằng xét về tính phổ biến ngôn ngữ PHP đứng thứ 4 trong số các ngôn ngữ được các nhà phát triển web sử dụng, lên hạng từ vị trí thứ 5 tại thời điểm năm 2005 Vì thế ngôn ngữ PHP rõ ràng đang ngày càng được sử dụng nhiều và với PHP 5.0 thì lại càng nhận được sự ủng hộ
từ các nhà phát triển web và những người sử dụng cuối cùng Không có dấu hiệunào cho thấy ngôn ngữ này đang xuống dốc cả
Một số ưu điểm của ngôn ngữ PHP:
- Mã nguồn mở
Như các bạn cũng biết PHP là một sản phẩm mã nguồn mở (Open-source) nên việc cài đặt và tùy biến PHP là miễn phí và tự do Vì có ưu thế nguồn mởnên PHP có thể được cài đặt trên hầu hết các Web Server thông dụng hiện nay như Apache, IIS…
- Thư viện phong phú
Trang 12Ngoài sự hỗ trợ của cộng đồng, thư viện script PHP cũng rất phong phú và
đa dạng Từ những cái rất nhỏ như chỉ là 1 đoạn code, 1 hàm (PHP.net…) cho tới những cái lớn hơn như Framework (Zend, CakePHP, CogeIgniter, Symfony…) ứng dụng hoàn chỉnh (Joomla, WordPress, PhpBB…) Với thư viện code phong phú, việc học tập và ứng dụng PHP trở nên rất dễ dàng và nhanh chóng Đây cũng chính là đặc điểm khiến PHP trở nên khá nổi bật và cũng là nguyên nhân vì sao ngày càng có nhiều người sử dụng PHP để phát triển web
- Hỗ trợ kết nối nhiều hệ cơ sở dữ liệu
Nhu cầu xây dựng web có sử dụng cơ sở dữ liệu là một nhu cầu tất yếu và PHP cũng đáp ứng rất tốt nhu cầu này Với việc tích hợp sẵn nhiều Database Client trong PHP đã làm cho ứng dụng PHP dễ dàng kết nối tới các hệ cơ sở
dữ liệu thông dụng Việc cập nhật và nâng cấp các Database Client đơn giản chỉ là việc thay thế các Extension của PHP để phù hợp với hệ cơ sở dữ liệu màPHP sẽ làm việc Một số hệ cơ sở dữ liệu thông dụng mà PHP có thể làm việclà: MySQL, MS SQL, Oracle, Cassandra…
- Lập trình hướng đối tượng
Ngày nay, khái niệm lập trình hướng đối tượng (OOP) đã không còn xa lạ
với lập trình viên Với khả năng và lợi ích của mô hình lập trình này nên nhiều ngôn ngữ đã triển khai để hỗ trợ OOP Từ phiên bản PHP 5, PHP đã cókhả năng hỗ trợ hầu hết các đặc điểm nổi bật của lập trình hướng đối tượng như là Inheritance, Abstraction, Encapsulation, Polymorphism, Interface, Autoload… Với việc ngày càng có nhiều Framework và ứng dụng PHP viết bằng mô hình OOP nên lập trình viên tiếp cận và mở rộng các ứng dụng này trở nên dễ dàng và nhanh chóng
Trang 13- Tính bảo mật
Bản thân PHP là mã nguồn mỡ và cộng đồng phát triển rất tích cực nên có thể nói PHP khá là an toàn PHP cũng cung cấp nhiều cơ chế cho phép bạn triển khai tính bảo mật cho ứng dụng của mình như session, các hàm filter dữliệu, kỹ thuật ép kiểu, thư viện PDO (PHP Data Object) để tương tác với cơ
sở dữ liệu an toàn hơn Kết hợp với các kỹ thuật bảo mật ở các tầng khác thì ứng dụng PHP sẽ trở nên chắc chắn hơn và đảm bảo hoạt động cho website
- Khả năng mở rộng cho PHP
Bằng việc xây dựng trên nền ngôn ngữ C và là mã nguồn mở nên khả năng
mở rộng cho ứng dụng PHP có thể nói là không có giới hạn.Với thư viện phong phú và khả năng mở rộng lớn, ứng dụng PHP có thể tương tác với hầuhết các loại ứng dụng phổ biến như xử lý hình ảnh, nén dữ liệu, mã hóa, thao tác file PDF, Office, Email, Streaming… Bạn hoàn toàn có thể tự xây dựng cho mình các Extension để tối ưu, bổ sung các chức năng cho PHP cũng như tối ưu luôn Core của PHP để phục vụ cho các mục đích mở rộng website của mình
b Nhược điểm:
- Trong những năm qua, PHP có tính phổ biến và sức ảnh hưởng rộng rãi với các
chủ website chưa có kinh nghiệm Do đó các ứng dụng được mã hóa bằng ngôn ngữ PHP trở thành mục tiêu của những kẻ phạm tội máy tính (hacker) Những nguy hại này được phóng đại lên do tính phổ biến của ngôn ngữ PHP khi phát triển hiện ra những nguy hại này lan nhanh chóng từ máy chủ tới máy khác qua các cuộc tấn công tự động để tìm kiếm những ảnh hưởng nguy hại này Các nguyhại và những cuộc tấn công để lại hậu quả vẫn là vấn đề nhức nhối đối với các
Trang 14chủ website đang cố bảo vệ máy chủ của mình khỏi bị tấn công hay đột nhập bởicác phần tử xấu.
- Ngoài những ảnh hưởng nguy hại trên, PHP cũng có những chức năng như hàmfopen(), lệnh include() và hàm exec() mà bản than chúng là công cụ lớn cho quá trình xây dựng các ứng dụng động Tuy nhiên, khi viết mã hóa phù hợp, vẫn xuấthiện những thiếu xót mà những chức năng trên, có thể bị lạm dụng, cho phép kẻ xâm hại máy tính và những thứ vẫn thường xem là kẻ tấn công ở mức thấp hoạt động các cuộc tấn công DOS, những sell PHP, download những khám phá và thực hiện mưu đồ mã hóa hiểm ác từ máy chủ của bạn mà có thể đã tương đối bảo mật Bản chất lí thú và tách rời sự phát triển với PHP mà hoạt động rất tốt là
lí do tương tự để PHP trở thành công cụ phổ biến cho mục đích xấu
- Việc cài đặt mặc định của PHP thì khá độc lập và có thể sử dụng một vài ứng dụng tweaking để bảo mật Tuy nhiên PHP chỉ thực sự đưa ra lựa chọn mô hình
an toàn mà khóa việc cài đặt PHP và hạn chế người dùng sử dụng hầu hết chức năng Đây là một xác nhận khó cho các máy chủ chung muốn cho phép máy khách hoạt động linh hoạt và kiểm soát mã (code) của máy chủ Vì thế bạn phải
có những giải pháp tiếp cận khác nhau để đảm bảo bảo mật
Trang 15hiện nay đã lên 11 thứ tiếng Trong tương lai trang web sẽ cung cấp cho các ngôn ngữ trên thế giới
b Gói dịch vụ của AppServ
Apache, PHP: Đây là 2 môi trường để chạy website ứng dụng PHP
MySQL database server: Hệ cơ sở dữ liệu được ứng dụng phổ biến với PHPphpMyadmin: Công cụ để quản lý MySQL database
Tất cả các gói tải về từ phát hành Binary chính thức AppServ mục tiêu chỉ cần thực hiện dễ dàng để thiết lập Chúng tôi không cung cấp bất cứ điều gì khác hơngói chính thức phát hành nhị phân Bởi vì chúng tôi nghĩ rằng Release nhị phân chính thức làm việc tốt hơn so với biên dịch nhị phân cá nhân hoặc của bên thứ ba
AppServ chỉ có cấu hình đặc biệt khi cài đặt, Apache cấu hình httpd.conf,
MySQL cấu hình my.ini, PHP cấu hình php.ini AppServ có thể bảo lãnh bất kỳ gói từ AppServ có thể làm việc ổn định như chính thức của Apache, PHP,
MySQL phát hành
Mục tiêu của AppServ Chỉ cần Dễ dàng cài đặt Bạn có thể thiết lập máy chủ web, máy chủ cơ sở dữ liệu trong 1 minute.For một số AppServ câu hỏi có thể được sản xuất Web Server hoặc cơ sở dữ liệu Chúng tôi có thể cho bạn Có! 100% có thể làm cho AppServ để cung cấp Production Server Tuy nhiên, hệ điều hành Windows là không đủ tốt cho tải nặng trên web hoặc cơ sở dữ liệu server.Windows OS kiến trúc sử dụng bộ nhớ nhiều hơn và sử dụng CPU, chúng tôi khuyên bạn nên sử dụng Linux / Unix hệ điều hành để phục vụ tải nặng của công việc Bởi vì Linux / Unix hệ điều hành có tốc độ nhanh hơn và sử dụng ít
bộ nhớ và CPU Nếu bạn so sánh nhấn khi sử dụng hệ điều hành Windows và
Trang 16Windows có thể xử lý 1000 người sử dụng mỗi thứ hai, nhưng Linux / Unix hệ điều hành có thể xử lý hơn 1000 người sử dụng mỗi giây và ăn một ít bộ nhớ và CPU.
c Cài đặt PHP, Apache, MYSQL, phpMyadmin
Trước hết bạn vào trang chủ của AppServ để download AppServ Các bạn có thể
truy cập và download tại http://www.appservnetwork.com/ Sau đây là từng
bước cài đặt AppServ:
Bước 1: Kích hoạt file appserv-win32-2.5.10.exe để bắt đầu cài đặt:
Bước 2: Chọn Next Để tiếp tục bước tiếp theo bạn phải đồng ý với Điều lệ sử dụng AppServ, nháy vào I Agree để tiếp tục:
Trang 17Bước 3: Chọn thư mục cài đặt Thư mục cài đặt AppServ được mặc định là ổ C Nếu cần chuyển bạn có thể nháy vào Browse… để thay đổi thư mục cài đặt Bạn
có thể yên tâm cài vào ổ C vì AppServ không bị xóa khi nâng cấp hay cài lại Windows Chọn Next để tiếp tục
Trang 18Bước 4: Chọn các phần mềm để cài đặt Nếu bạn chỉ cần cài một trong số 4 phầnmềm của AppServ thì bỏ dấu tick vào các phần không cài đặt, nếu cài lần đầu thìtốt nhất bạn nên giữ nguyên Chọn Next để tiếp tục
Bước 5: Đặt cấu hình cho Apache:
- Server Name: Tên của server sẽ chạy Apache, bạn điền localhost
- Admin Email: thông tin của host sẽ gởi tới mail này, nó cũng không quan
trọng, bạn có thể đánh mail bất kỳ hoặc bỏ qua
- HTTP Port: thông số này được mặc định là 80, khi HTTP Port là 80 thì bạn
không cần phải khai báo nó theo sau server
Trang 19Bước 6: Đặt cấu hình MySQL:
- Root password: Đặt mật khẩu cho MySQL Database, mật khẩu này do bạn tự đặt, username được mặc định là root
- Charecter Sets: Ngôn ngữ cho Database, bạn chọn UTF-8 Unicode để có thể
đánh được tiếng Việt với Unikey
- Old Password: Nháy vào đây nếu bạn có lỗi khi lập trình với phiên bản cũ của
PHP hoặc lỗi “Client does not support authentication protocol requested by server; consider upgrading MySQL client”
- Enable InnoDB: Nháy vào đây nếu bạn sử dụng InnoDB, tốt nhất bạn nên để
trống
Trang 20Thời gian cài đặt AppServ rất nhanh, chỉ khoảng 1 phút là hoàn thành
Trang 21Bước 7: Hoàn thành cài đặt: Bạn có thể dùng luôn khi nháy Finish
Một số lưu ý sau khi cài đặt
Sau khi cài đặt bạn có thể check xem việc cài đặt của mình đã hoàn tất chưa bằng cách bật trình duyệt web và gõ http://localhost/, khi đã hiện ra màn hình như thế này là việc cài đặt đã thành công
Trang 22Để làm việc với phpMyAdmin, bạn gõ lên trình duyệt
http://localhost/phpMyAdmin/ hoặc ấn trực tiếp trên trang http://localhost/ Đăngnhập với username mặc định là root và mật khẩu là mật khẩu bạn đã khai báo khinãy rồi nháy Log In
Nếu khi đánh localhost mà báo lỗi không tìm thấy trang, thì đó là do Apache chưa được khởi động Bạn có thể vào Start –> gõ trong ô tìm kiếm “Services” ùi
ấn Enter Tìm Apache2.2 chọn Start Nếu không thể chạy Apache thì tức là có
ứng dụng đang chạy trên HTTP Port 80 (ví dụ Skype), bạn nên tắt hết các ứng
Trang 23dụng trước khi chạy Apache, sau khi khởi động xong thì khởi động lại các ứng dụng khác cũng được Sau này khi cần khởi động lại Apache bạn cũng có thể sử dụng phương pháp này
Thêm một điều nữa là bản mới nhất AppServ6.0 có một số lỗi mà khi cài đặt xong vào được localhost nhưng không thể truy cập phpMyAdmin, bạn có thể khắc phục bằng cách như sau:
Các bạn hãy vào thư mục cài đặt và mở file theo như đường dẫn
Trang 24CHƯƠNG II: SO SÁNH NGÔN NGỮ PHP VÀ MỘT SỐ
NGÔN NGỮ KHÁC
2.1 So sánh PHP và ASP.Net:
Để so sánh PHP với ASP.NET ở trên diện rộng hơn chúng ta nên so sánh giải pháp LAMP (Linux + Apache + MySQL + PHP hay Python) với ASP.Net + SQL Server (hay Oracle) Dĩ nhiên mọi so sánh đều không thể toàn diện và từng giải pháp đều có những "nơi" mà giải pháp kia không thể bằng được Dưới đây lànhững so sánh có tính tổng quát nhất
a Thị Phần:
- Theo thống kê mới nhất, hiện nay PHP chiếm 36.1%, ASP.Net chiếm 54.4%, tuy nhiên tốc độ tăng trưởng của PHP nhanh hơn đáng kể so với ASP.Net (các giải pháp web trên Java đang bị sụt giảm thị phần)
Điều này phản ánh xu thế chuyển sang các nền tảng mã nguồn mở với hai mục đích:
+ Giảm giá thành phát triển
+ Không phụ thuộc vào các "tay chơi" lớn như Microsoft hay Sun
b Kỹ Thuật:
- Theo đánh giá chung, các giải pháp của Microsoft rất tốt ở cấp Enterprise (cái này thì chỉ có J2EE sánh được) Xin đừng nhầm lẫn giữa khái niệm Enterprise với website có nhiều người truy cập, ở đây nói về độ phức tạp của các dịch vụ,
Trang 25độ tin cậy, tính khả chuyển… những tiêu chuẩn mà chỉ khi thiết kế các ứng dụngphục vụ cho các tập đoàn lớn thì chúng ta mới đụng tới Tuy nhiên đi kèm với nócũng là sự phức tạp và tốn kém tài nguyên.
- PHP rất thích hợp hơn cho những nhóm phát triển nhỏ, cho cách phát triển kiểuagile, nghĩa là có thời gian phát triển và đưa vào sử dụng nhanh Nhưng điều nàykhông có nghĩa là PHP dành cho những website có ít người sử dụng, rất nhiều website có hàng triệu người sử dụng hàng ngày làm trên PHP
c Ngôn ngữ lập trình, nhân lực phát triển:
- ASP.Net, nói chính xác hơn là C# hay VB.Net, là ngôn ngữ lập trình hướng đốituợng được thiết kế tốt, thừa hưởng rất nhiều thế mạnh của Java ASP.Net cũng
có bộ công cụ phát triển hạng nhất: Visual Studio.Net Nhưng giá phải trả là tài nguyên và thời gian học Để tạo một trang web đơn giản bằng ASP.Net khá dễ, nhưng để hiều sâu sắc cho những vần đề phức tạp hơn lại là cả một quá trình
- PHP là một ngôn ngữ được sinh ra với mục đích duy nhất là để dùng lập trình Web: giản dị và dễ hiểu Mãi đến PHP 5, lập trình hướng đối tượng mới được đưa vào tương đối đầy đủ Công cụ phát triển (IDE) cho PHP không có cái nào sánh được VS nhưng hiện nay nếu dùng Eclipse plug-in cũng có thể nói đạt 8/10 (theo sở thích riêng thì tôi ưa dùng Eclipse hơn VS)
- Một vấn đề nữa là PHP thường nhúng mã logic chương trình vào trang web (embedded scripts) còn ASP.Net tách rời phần hiển thị và logic rất rõ ràng
(chúng ta nói tới kiến trúc MVC: Modal –View - Controller) Thực tế, bạn hoàn toàn có thể thực hiện được MVC trong PHP (nhất là PHP 5) nếu thiết kế đúng bài bản hay dùng các framework như Smarty, PHPCake…
- Vấn đề nhân lực, vì các LTV ASP.Net thích hợp cho các nhóm phát triển lớn nên khó tìm ra nhân lực cho các dự án nhỏ (đấy là trên thế giới, ở VN thì có thể
là ngược lại!!!)
Trang 26d Chi Phí:
- Rõ ràng là phát triển bằng ASP.Net tốn kém hơn nhiều so với PHP Bạn phải trả cho SQL Server, Windows Server, Visual Studio, MSDN và hỗ trợ kỹ thuật cao hơn nhiều so với LAMP là của cộng đồng mã nguồn mở Dù rằng ở VN chúng ta thường dùng phần mềm “chùa” nhưng nếu tạo một ứng dụng thương mại nghiêm túc thì chi phí bản quyền trả cho M$ là rất lớn
- Ngược lai, chi phí sở hữu tổng cộng (Total ownership cost) của LAMP lại có thể cao hơn nhất là khi bạn quản trị nhiều server Linux lớn do thiếu các chuyên gia giỏi về Linux Đây là vấn đề gây tranh cãi, trong khi Microsoft khẳng định chi phí cho Windows rẻ hơn thì một số nghiên cứu lại cho kết quả ngược lại
e Tốc độ:
- Có khá nhiều tranh cãi về tốc độ của LAMP hay của ASP.Net + SQL Server cao hơn Cái này còn tùy vào cấu hình, đặc thù của ứng dụng Nhìn chung về mặtweb server, Linux “có tiếng” hơn Windows Server về tốc độ (Google, Yahoo đều dùng Linux server cho các dịch vụ của mình và tôi không dám phàn nàn gì
về tốc độ cả!) Theo một số người, PHP script nhanh hơn ASP.Net script (như C#, VB.Net) trong các tác vụ thông thường và tốn ít bộ nhớ hơn, tuy nhiên điều này cũng còn nhiều tranh cãi!
- Về database server, MySQL có tốc độ rất tốt (đặc biệt là kiểu MyISAM) nhưngthiếu một số tính năng cao cấp như stored procedure, trigger (phiên bản MySQL
5 có hỗ trợ các tính năng này nhưng còn yếu và có bug) Bài viết này sẽ giúp bạn
có so sánh nhiều mặt hơn giữa MySQL và SQL Server
f Bảo mật và Virus:
- Khỏi cần phải nói, Linux luôn có tiếng tốt về bảo mật và cũng ít bị các loại virus nhắm vào Nhưng để cho trang web của bạn thực sự bảo mật thì lại là vấn
Trang 27đề thiết kế và lập trình, cả PHP và ASP.Net đều có những lỗ hổng có thể khai thác.
g Cộng đồng phát triển và mã nguồn:
- Nói chung bạn có thể nhận đựơc nhiều mã nguồn và sự giúp đỡ từ cộng đồng
mã nguồn mở như PHP miễn là bạn có kỹ năng “Search” tốt Ngược lại MSDN đựơc đầu tư công phu và rất hữu ích giúp cho việc tìm kiếm nhanh chóng hơn Một vài website như Codeproject.com cũng có rất nhiều mã nguồn ASP.Net giá trị
- Dễ học (so với Java, C hay Perl)
- Dễ mở rộng (so với Java, C++)
- Rất khả chuyển, chạy được trên nhiều nền tảng mã không phải biên dịch lại (tấtnhiên rồi) hay sửa code
b Khác nhau:
+ PHP kế thừa các curly braces để đánh dấu code block của C và dấu $ của Perl.+ Các câu lệnh switch và vòng lặp do while
+ Toán tử gán, increment và decrement (++ và –-)
+ Toán tử ternary operator/statement ( ? : )
Trang 28+ Trong Python 2.5 có câu lệnh if else có tác dụng tương tự (“X if C else Y”)+ Array rất mạnh, dùng cho cả list và dict.
+ Tham chiếu ‘$a =& $b’ tức là khi biến $b thay đổi, thì biến $a cũng thay đổi.+ Có cả private, protected và public access modifier cho cả phương thức và thuộc tính
+ Dùng cả abstract và final modifiers cho cả class và method + Có interface
+ $this là đối tượng mặc định , và không cần truyền ngược self để định nghĩa method như Python (với Python chỗ này hơi chuối để định nghĩa test là method của một lớp cần định nghĩa: def test(self)
+ Hỗ trợ code trên nhiều dòng (với Python phải thêm dấu \ vào cuối dòng nếu muốn)
- Python:
+ Ngôn ngữ sử dụng với các mục đích chung (Python có thể dùng để lập trình hầu hết mọi thứ, trong khi PHP chỉ dùng để lập trình web hay console Tất nhiên
có thể làm được việc khác nhưng không đáng kể)
+ Sử dụng indentation (thụt vào đầu dòng và dòng mới) thay thế cho các dấu curly braces để đánh dấu các code block (Tất nhiên là trông đẹp hơn, nhưng không thân thiện với HTML template cho Web)
+ Có namespace và module (PHP 5.3 mới có namespace)
+ Truyền biến cho hàm hiệu quả hơn PHP nhờ cặp key=value, hỗ trợ tốt hơn chogiá trị mặc định của biến truyền vào hàm
+ Cho phép đa thừa kế (không biết là hay hay là dở nữa)
+ Introspection tốt hơn PHP Reflection
+ Mọi thứ từ biến tới đối tượng đều có kiểu tham chiếu
Trang 29+ Có web server, application server riêng, 100% viết bằng Python.
+ Có lambdas và các hàm hỗ trợ để xây dựng hàm (PHP có create_function và closure)
+ Cached byte-code (PHP cũng có nhưng không tốt bằng)
+ Unicode được hỗ trợ tốt hơn
+ Kiểm soát lỗi ngoại lệ tốt hơn
+ Chạy nhanh hơn PHP (đúng là nhanh hơn nhưng ngốn CPU và Ram khủng khiếp)
2.3 So sánh PHP và HTML:
a HTML:
Một trang HTML có phần mở rộng là html, ví dụ như exemple.html
Giải thích hoạt động của nó bằng sơ đồ sau :
1: demande de la page: xin xem trang web
2: envoi de la page: gửi cho xem trang web
Trang 301: demande de la page: xin xem trang web
2: génération de la page: phát sinh trang web
3: envoi de la page: gửi cho xem trang web
Các bước hoạt động như sau :
- Bước 1: Client
- Bước 2: Ở đây, một bước rất quan trọng, server không gửi trang web tới client ngay lập tức, mà nó phát sinh ra trang web trước ! Như vậy client không thể nào đọc được trang php có gì trong đó (chỉ có server đọc được thôi), client chỉ đọc được những trang HTML thôi ! Việc của server rất đơn giản : nó biến đổi trang php thành trang html để client có thể đọc được !
- Bước 3: Cuối cùng, sau khi đã tạo xong trang HTML, giờ này nó chỉ có mã HTML bên trong thôi, rồi gửi tới client Mã PHP bao gồm những cấu trúc lệnh ! Giống như những dòng lệnh mà mình viết trong lập trình vậy (chẳng hạn như lập
Trang 31trình C, C++, Java, Python,…) Nó yêu cầu server cho biết giờ, số người khách vào thăm,… Nói ngắn gọn : PHP ra lệnh cho server ! Điều mà HTML không làmđược Đừng quên rằng trang PHP cũng có chứa mã HTML nữa, nhưng mà serverkhông đụng đến, nó chỉ khoái chỗ nào có PHP thôi ! Rồi nhận lệnh mà PHP sai bảo, rồi biến tất cả thành HTML !
Trang 32CHƯƠNG III: CÚ PHÁP TRONG PHP
Trang 333.2 Xuất giá trị ra trình duyệt:
Để xuất dữ liệu ra trình duyệt chúng ta có những dòng cú pháp sau :
+ echo ("Thông tin");
+ Printf ("Thông tin");
Thông tin bao gồm : biến, chuỗi, hoặc lệnh HTML …
Nễu giữa hai chuỗi muốn liên kết với nhau ta sử dụng dấu "."
3.3 Biến
a Biến trong PHP.
Biến được xem là vùng nhớ dữ liệu tạm thời Và giá trị có thể thay đổi được Biến được bắt đầu bằng ký hiệu "$" Và theo sau chúng là 1 từ, 1 cụm từ nhưng phải viết liền hoặc có gạch dưới
1 biến được xem là hợp lệ khi nó thỏa các yếu tố :
Trang 34+ Tên của biến phải bắt đầu bằng dấu gạch dưới và theo sau là các ký tự, số hay dấu gạch dưới.
+ Tên của biến không được phép trùng với các từ khóa của PHP
Trong PHP để sử dụng 1 biến chúng ta thường phải khai báo trước, tuy nhiên đốivới các lập trình viên khi sử dụng họ thường xử lý cùng một lúc các công việc, nghĩa là vừa khái báo vừa gán dữ liệu cho biến
Bản thân biến cũng có thể gãn cho các kiểu dữ liệu khác Và tùy theo ý định của người lập trình mong muốn trên chúng
Xuất phát từ những điều ở trên, khai báo biến trong PHP như sau:
$variablename [=initial value];
$licount=0;
$lsSQL=”Select * from tblusers where active=1”;
$nameTypes = array("first", "last", "company");
Trang 35<?php
$sotrang=10;
$record=5;
$check = true;
$strSQL="select * from tblCustomers";
$myarr = array("first", "last", "company");
Ví dụ, chúng ta có biến $a khai báo ngoài hàm nhưng khi vào trong hàm thì biến
$ được khai bào lại, biến này có tầm vực bên trong hàm Tương tự như vậy, khi biến $i khai báo trong hàm thì chỉ có tầm vực bên trong hàm cho dù chúng được khai báo lại như bên ngoài
Trang 36Ngoài ra, đê sử dụng biến toàn cục trong ham, bạn phải sử dụng từ khóa
global, khi đó biến toàn cục sẽ có hiệu lực bên trong hàm Ví dụ khai báo biến
$a bên gnoaif hàm, sau đó bên trong ham Test bạn sử dụng từ khóa global cho
Trang 37biết $a, khi đó biến $a sẽ được sử dụng và giá trị đó có hiệu lực ngay sau khi
ra khỏi hàm chứ không giống như trường hợp trong ví dụ scope.php
Trang 38define("MAXSIZE", 100);
Cũng giống với biến hằng được xem là hợp lệ thì chúng phải đáp ứng 1 số yếu tố:
+ Hằng không có dấu "$" ở trước tên
+ Hằng có thể truy cập bất cứ vị trí nào trong mã lệnh
+ Hằng chỉ được phép gán giá trị duy nhất 1 lần
+ Hằng thường viết bằng chữ in để phân biệt với biến
Ví dụ :
b Kiểm tra hằng.
Trang 39Khi sử dụng hằng, mà hằng chưa tôn tại thì bạn sử dụng hàm defined như sau:
if(defined("pi")) echo "<br>pi:=".pi;
else echo "<br>pi not defined";
if(defined("hrs")) echo "<br>hrs:=".hrs;
else echo "<br>hrs not defined";
} Test();
?>
</BODY>
</HTML>
Trang 40a Khái niệm chuỗi.
Chuỗi là một nhóm các kỹ tự, số, khoảng trắng, dấu ngắt được đặt trong các dấu nháy
PHP là kịch bản được xem là tốt nhất cho xử lý chuỗi, bằng cách sử dụng hàm
xử lý chuỗi, bạn có thể thực hiện các ý định của mình khi tương tác cơ sở dữ liệu, tập tin hay dữ liệu khác