Thứ Sáu, 4 tháng 10, 2013

Nên học PHP, JAVA hay ASP.NET


HỌC PHP- 3 NGÔN NGỮ LẬP TRÌNH PHỔ BIẾN HIỆN NAY


Hôm nay chúng ta sẽ cùng nhau tìm hiểu về
"3 NGÔN NGỮ LẬP TRÌNH PHỔ BIẾN HIỆN NAY"

Bất kì ai khi quan tâm đến lập trình đều biết rằng hiện nay có 3 ngôn ngữ lập trình chính đó là PHP, Java và.NET.

Nhưng các bạn đã bao giờ tự hỏi trong 3 ngôn ngữ lập trình này, ngôn ngữ nào là ngôn ngữ lập trình tốt nhất, mình nên chọn theo học ngôn ngữ lập trình nào?

Trên thực tế trong 3 ngôn ngữ lập trình này thì không có ngôn ngữ lập trình nào là tốt nhất cả. vì mỗi một ngôn ngữ lập trình đó lại có những ưu điểm và nhược điểm riêng.

Chúng ta sẽ cùng nhau đi tìm hiểu về ưu và nhược điểm của 3 ngôn ngữ lập trình này!

1. Ưu điểm
Ngôn ngữ Java:



* Dùng mã nguồn mở (có thể chạy trên Apache hoặc IIS) + Mã nguồn rõ ràng, mã nguồn tách biệt với giao diệnHTML.
* Chạy chậm hơn PHP & ASP.NET nhưng có thể cải thiện bằng hardware
* Visual Studio có thể sinh mã, tiết kiệm thời gian viết code.
* Dễ học khi đã biết HTML, C + Có thể dùng PHP, Ruby… để GUI.
* Dựa vào XAMP + Tomcat plugin (dễ cấu hình).
* Đi cặp Oracle.
* Hoạt động trên Linux, có thể trên IIS – Windows!
* Nếu ko có Java Studio thì xài Eclipse, NetBean … viết code!


Ngôn ngữ PHP

Học PHP, Lập trình PHP

* Dùng mã nguồn mở (có thể chạy trên Apache hoặc IIS).
* Phổ biến hơn ASP (có thể thấy dựa vào số website dùng PHP).
* Dễ học khi đã biết HTML, C.
* Dựa vào XAMP (dễ cấu hình).
* Nhiều hệ thống CMS miễn phí dùng.
* Đi cặp với mySQL (cũng dễ ).
* Hoạt động trên Linux, có thể trên IIS – Windows nhưng .. hiếm!

Ngôn ngữ.NET

* Mã nguồn rõ ràng, trong .NET 2.0, mã nguồn tách biệt với giao diện HTML.
* Chạy nhanh hơn PHP!
* Visual Studio có thể sinh mã, tiết kiệm thời gian viết code.
* Có thể dùng C#, VB hoặc Managed C++.
* Đi cặp MSSQL, Oracle.

2. Nhược điểm.
Ngôn ngữ Java:
* Tốc độ hơi chậm.
* Config nhiều , dễ làm beginet …Giữa PHP và .NET
Ngôn ngữ PHP* Mã nguồn ko đẹp?
* Chỉ chạy trên ứng dụng web.

Ngôn ngữ .NET* Ko thể chạy trên Linux (mặc dù đã có thể nhưng thiết nghĩ ứng dụng lớn sẽ có sơ xuất?!)
* Nếu ko có Visual Studio thì khó viết code
* Ứng dụng tìm kiếm, tuy nhiên vẫn ko có cơ sở chắc chắn!

Qua việc phân tích ưu nhược điểm của cả 3 ngôn ngữ lập trình, hi vọng các bạn sẽ không còn băn khoăn và có thể lựa chọn cho mình một ngôn ngữ lập trình phù hợp nhất với bạn.

Những lỗi thường gặp khi học PHP&MySQL



PHP là một ngôn ngữ lập trình mã nguồn mở đáp ứng cho sự phát triển web và sử dụng song song với mã HTML. Ngôn ngữ lập trình PHP có cách thức viết gẫn gũi với C và PERL , tuy nhiên PHP viết dễ dàng , không cầu kỳ như C hoặc PERL với cách đặt biến dễ chịu và tất cả kiến thức về học php cơ bản sẽ có trong giáo trình dạy thiết kế web bằng php.
+ DẠNG TRUYỀN BIẾN:

Khi lập trình ta thường thấy nhiều lỗi do cách thức truyền biến ra IE hoặc Netcape do form . Khi submit một form nào đó , các biến trong form có thể truy xuất ra , và được sử dụng như là biến toàn cục ( global ) , $_POST , $_GET , $_VAR … .NGoài cách đưa biến từ form còn có session và cookies .
Mỗi con đường truyền biến bao giờ cũng có cái lợi và các hại của nó . Ở đây xin đề cập đến vấn đề tác hại của nó.

Khi một lập trình viên được đào tạo lập trình với ngôn ngữ PHP nếu không cẩn thận sử dụng biến có thể dẫn đến nhiều sự nguy hiểm khác nhau .

Các thức truyền biến được xem là nguy hiểm nhất là dạng truyền biến trên bar address của các chương trình duyệt web . Khi đó kẻ tấn công có thể lợi dụng những sơ hở này để khai thác và nguy hiểm là SQL injection .
Ví dụ . Khi bạn sử dụng các biến trực tiếp trên address bar để dùng cho các mệnh đề logic , thì thường dễ bị vượt qua .
Code ví dụ :

if ($hello) echo "hello";


Code trên cho thấy nếu tồn tạn biến $hello rồi sẽ thực thi . Vậy vấn đề chỉ cần cho nó tồn tại . Vì thế ta nên kiểm tra biến với một giá trị nào đó , xác định thì lỗi có thể được thông qua ( nhưng nếu source của bạn đã được tham khảo thì điều này coi như vô nghĩa – Sẽ được nói sau tại mục PHP exploit local ) .
Submit form với hình thức GET , thì các biến trong form sẽ được truyền trực tiếp lên address bar và nếu sử dụng biến toàn cục đó liên quan đến Uncode thì … hiệu quả sẽ giảm đi . Chẳng hạn bạn tạo một form như sau :

<form name="test" action="" method=GET>
<input name="key" type=text>
<input type=submit value="Test">
</form>


Xin được nói sơ về SQL injection với cách truyền biến này .
Ví dụ :

$a = MySQL_query("SELECT * FROM user $osd");

Nếu $osd trên address lộ ra như vậy : ORDER by id DESC Thì ta có thể thay thế biến osd với một giá trị khác là code PHP chẳng hạn . Vậy là chẳng khác nào tạo điều kiện cho kẻ tấn công thực hiện những hành động chết người . Ví dụ :

$osd="); MySQL_query("INSERT INTO user .....");
KHi bạn nhập ttext với dạng unicode thì khi truyền trên address bar các ký tự sẽ không còn chính xác nữa . Vậy làm cách nào khắc phục .
Vâng ! Có khá nhiều cách , bạn có thể cookies , session hay hidden biến đó.

Về vấn đề đặt biến dạng hidden trong form HTML . Lợi thì có lợi nhưng hại vẫn có .
Ví dụ :
Nếu bạn đặt một biến hidden nào đó dùng để check hoặc cho một mệnh đề logic thực thi thì khả năng bảo mật sẽ không còn , chỉ cần view source trong CT duyệt web là lộ nguyên si . Và khi kẻ tấn công có thể tạo ra các biến đó thì … việc check mệnh đề coi như vô nghĩa .

Và khi cho phép nhận thông tin từ các input để đưa vào CSDL rồi chuyển tải ra website , nếu không lọc những thẻ HTML cho phép thực thi JAVAscript cũng nguy hiểm khôn lường : Tận dụng để nhúng ccác loại sâu bọ , Các đoạn mã chôm thông tin ( cross site Scripting )
SỬ DỤNG BIẾN TỪ COOKIES .

Cookies rất hiệu quả để chứa những thông tin , nhưng lạm dụng nó quá có thể dẫn đến nguy hiểm . Nếu một lập trình viên set cookies các thông tin về một tài khoản nào đó thì … chỉ cần xem cookies là xong . Cách khắc phục là mã hóa nó hết .
Thứ 2 . Ví dụ một cookies sau đây:

userid=11
passhash="helloall"


Vấn đề ở đây là về việc chứa thông tin không cần thiết là password của tài khoản. Dù mã hóa hay không mã hóa vẫn nguy hiểm . Nếu mã hóa dạng thông thường như dạng base64 , crypt … vẫn dịch ngược được và dạng MD5 thì vẫn có thể Brute Force .
Vậy cookies những gì cần thiết không nên chứa những thông tin mang tính bảo mật .
Đó là những lỗi cơ bản , vỉ thời gian có hạn , nên chỉ nêu một vài lỗi như thế .
SAFE MODE PHP AND MYSQL LOCAL EXPLOIT ( LOCAL EXPLOIT)

Đây là một lỗi bảo mật nguy hiểm nhất . Nói nôm na là kỹ thuật khai thác thông tin từ host chung server .
Ví dụ khi bạn có host ở server ABC và kẻ tấn công cũng có host chung server và chung ổ đĩa với bạn thì hết sức nguy hiểm .
Kẻ tấn công có thể làm mọi việc thì theo độ bảo mật của server đó . cụ thể như : xem source ( tìm lỗi bảo mật của lập trình ) ,xem thông tin tài khoảng host của bạn ( username , password , email ) , chiếm server , by pass server ……

Xin được nói sơ về lỗi này:

Chỉ cần 1 vài backdoor trên server là nguy hiểm không lường . Khi cơ sở dữ liệu của bạn dùng MySQL để lộ password , user của database thì việc sinh sát CDSL đó hoàn toàn có thể thực thi ( DROP , QUERY , INSERT … ) , và đặc biệt nguy hiểm đối với các server dùng Cpanel để quản lý hosting cho mỗi tài khoản . Một số Cpanel tạo db có info trùng với tài khoải login và Cpanel , FTP , Webmail , POP3 … , và chỉ một vài thủ thật nhỏ của kẻ tấn công thì website của bạn có thể thuộc quyền kiểm soát của hắn với đầy đủ quyền hạn .

Nếu PHP chạy trên Linux thì việc soi server tìm thông tin chỉ là việc đơn giản nhưng cũng tuỳ theo độ bảo mật của server đó. Tình hình hiện nay một số Công ty VN hosting sử dụngPHP và MySQL trên Linux cũng rất nhiều và việc bảo mật còn khá sơ sài . Vì vậy phát triển Thương mại điện tử muốn an toàn trước hết phải bảo mật cơ sỡ dữ liệu một cách an toàn .
Ngoài cách trên , còn có lỗi bảo mật của Web server : Apache , mức độ tận dụng cũng rất cao với lôĩ này : Apache chunk-ed Vul .

Nguyên nhân xảy ra lỗi này :

- Safe mode : được mở
- Các thư mục chưa được set quyền .
- Chưa setting cho php.ini kỹ .
- PHP cho phép set php.ini bất kỳ .
- MySQL cho phép truy xuất vào cơ sỡ dữ liệu với host chung : localhost
DỮ LIỆU TỪ FORM HTML

Như ta thường biết , để đưa bất cứ dữ liệu từ người sử dụng vào CSDL ta đều thông qua dạng truyền biến form HTML , gồm nhiều dạng và nhiều cách khác nhau .
Vì thế lỗi cũng rất nhiều nếu ta không kịp ngăn chặn , có thể dẫn đến những hậu quả khó lường.
Dù truyền biến dạng POST , GET thì lỗi vẫn có . Và lỗi nghiêm trọng là dùng các biến ẩn để so sánh hoặc thực thi một mệnh đề logic nào đó .
Ví dụ bạn làm 1 biến ẩn như password , email … thì kẻ tấn công có thể view source của bạn , thay đổi các trường và thay đổi luôn action . Vì thế nếu lỗi thì kẻ tấn công có thể tấn công trực tiếp từ những lỗi này với vài thủ thuật nêu trên .
Cách khắc phục : Không đặt những biến ẩn với mục đích so sánh hay thực thi mệnh đề logic .
Nếu bạn lập trình đưa trực tiếp các biến vào thẳng CSDL mà không thông qua một bước kiểm tra nào đó thì nguy hiểm .
Các nguy hiểm có thể xảy ra :
- Cross site scripting
- SQL injection
- Buffer overflow in MySQL
Vì vậy bước kiểm tra các biến vào hết sức quan trọng .
Cách khắc phục :
- Cross site scripting : Để khắc phục lỗi này , bạn nên xử lý biến vào theo kiểu chặn các tag HTML các hàm PHP hổ trợ làm việc đó : str_replace , strip_tags , htmlspecialchars , htmlentities … ( tham khảo thêm về các hàm sử lý chuỗi ) để xử lý các tag như <> chuyển sang mã HTML hay thêm ký tự nào vào , …. , thay thế các text như onmouseover , onload …
- SQL injection : các biến đưa vào thường nguy hiểm nếu “dính” dấu ‘ , “” hoặc # , vì thế cách khắc phục cũng như trên hoặc thêm hàm addslashes .
- Buffer overflow in MySQL : cái này thường nghiêm trọng , khi bạn đưa biến vào CSDL mà không chống flood thì kẻ tấn công cò thể fresh trình duyệt web hoặc dùng những script tấn côngf từ server , host hay localhost khác , làm tràn server . Khiến tắt nghẽn … và server có thể cắt host bạn như chơi . Cách khắc phục , so sánh biến nhập vào trùng hay thơi gian … nói chung có nhiều cách để làm việc này , hiệu quả và nhanh thì dùng hàm header sau khi submit . ( Nếu bạn lập trình dùng hàm MySQL_fetch_array , cũng dễ bị tràn server , lý do gôm dữ liệu vào mảng nếu nhiều record thì thế nào … vì thế bạn có thể chuyển qua dùng MySQL_result , nó lấy dữ liệu theo filed và column )
Lưu ý về dạng upload file : cái này cũng quan trọng không kém , vì thế bạn phải kiểm tra dạng file gì khi được upload vì không sẽ có thể làm host của bạn dính backdoor .

Thứ Tư, 2 tháng 10, 2013

PHP Framework


Khái quát về PHP Framework

Có lẽ thành ngữ Framework không xa lạ gì đối với những bạn đã từng học PHP, và không ít người đã từng thắc mắc nó là cái gì. Framework giống như 1 thư viện mã lệnh được xây dựng sẵn để chúng ta sử dụng. Cộng đồng các developer PHP được chia làm hai: một là những người sử dụng PHP thông thường và hai là những người dùng frameworks. Một Framework tốt thì vấn đề bảo mật cần được cải thiện, tạo một website dễ dàng nâng cấp , giảm thời gian xây dựng Web và các ứng dụng Web

PHP Framework là cái gì nhỉ?
PHP là của thế giới ngôn ngữ kịch bản phổ biến nhất vì nhiều lý do khác nhau vì ứng dụng linh hoạt, dễ dàng sử dụng, và nhiều thứ khác nữa – nhưng thường lần code trong PHP, hoặc ngôn ngữ nào cho rằng vấn đề, có thể nhận được khá đơn điệu và lặp đi lặp lại. Đó là nơi mà một PHP framework có thể giúp đỡ các nhà phát triển dự án tốt hơn.
PHP frameworks đơn giản hóa việc phát triển các ứng dụng web viết bằng PHP bằng cách cung cấp một cấu trúc cơ bản mà có thể xây dựng các ứng dụng web. Nói cách khác, PHP frameworks giúp thúc đẩy phát triển ứng dụng nhanh chóng (RAD), trong đó tiết kiệm thời gian, giúp xây dựng các ứng dụng ổn định hơn, và giảm số lượng mã lặp đi lặp lại cho các nhà phát triển. PHP frameworks cũng có thể giúp người mới bắt đầu để xây dựng các ứng dụng ổn định hơn bằng cách bảo đảm sự tương tác cơ sở dữ liệu phù hợp và mã hóa trên lớp thuyết trình. Điều này cho phép bạn dành nhiều thời gian hơn việc tạo ra các ứng dụng web trên thực tế, thay vì dành thời gian viết mã lặp đi lặp lại.

Ý tưởng chung đằng sau hoạt động của một PHP framework là được gọi là Model View Controller (MVC). MVC là một mô hình kiến trúc trong chương trình mà cô lập logic kinh doanh từ các giao diện người dùng, cho phép một đến được sửa đổi riêng với khác (còn gọi là tách mối quan tâm). Với MVC, Model dùng để chỉ dữ liệu, xem đề cập đến lớp thuyết trình, và điều khiển các ứng dụng hoặc logic kinh doanh. Về cơ bản, MVC phá vỡ quá trình phát triển của một ứng dụng, do đó bạn có thể làm việc trên các yếu tố cá nhân, trong khi những người khác không bị ảnh hưởng. Về cơ bản, điều này làm cho coding trong PHP nhanh hơn và ít phức tạp.

Và tại sao chúng ta phải sử dụng PHP Framework?
Các nhà phát triển sử dụng PHP frameworks cho nhiều lý do khác nhau, nhưng một số lý do cơ bản nhất và dễ hiểu nhất là tiết kiệm thời gian phát triển ứng dụng web PHP. Dùng lại mã qua các dự án tương tự sẽ tiết kiệm được rất nhiều các nhà phát triển một số lượng đáng kể về thời gian và nỗ lực trong dự án. PHP frameworks cung cấp mô-đun trước được xây dựng để thực hiện nhiệm vụ tẻ nhạt mã hóa, do đó, các nhà phát triển có thể dành nhiều thời gian của họ vào việc phát triển các ứng dụng thực tế hơn là tái xây dựng nền tảng với nhau và mỗi dự án.

Ổn định là một lý do phần lớn nhà phát triển sử dụng frameworks. Trong khi đơn giản là một trong những giá trị lớn nhất của PHP, và là lý do nhiều người thích sử dụng ngôn ngữ kịch bản này, sử dụng khá dễ dàng, đặc biệt là cho người mới bắt đầu, để viết mã xấu và thậm chí không nhận ra nó. Với các ứng dụng PHP sẽ thường xuyên nhầm lẫn mà vẫn làm việc, nhưng vô tình hay cố ý bạn có thể đã mở ra một lỗ hổng lớn trong quá trình viết mã của bạn có thể dễ bị tấn công. Điều quan trọng là hãy nhớ rằng PHP là một ngôn ngữ rất khoan dung, do đó thậm chí còn quan trọng hơn để đảm bảo to tie up nào rỗi trong mã hóa của bạn – ngay cả khi ứng dụng có vẻ là làm việc đúng cách.

Nói tóm lại, sự sẵn có của các PHP frameworks một điều tuyệt vời. Bạn thậm chí có thể tạo riêng cho bạn, mặc dù các nhà phát triển nhiều bầu chọn từ bất frameworks nổi tiếng nhất do sự phổ biến của chúng, hỗ trợ rộng lớn, và các diễn đàn/cộng đồng cho phép bạn tương tác với các nhà phát triển khác, những người sử dụng cùng một frameworks. Lưu ý, bạn nên luôn luôn kiểm tra dự án đầu tiên của bạn để quyết định xem bạn có nên sử dụng một frameworks hay không. Một số câu hỏi bạn nên hỏi bản thân bạn là: nó sẽ giúp bạn tiết kiệm, và bất kỳ ai khác có thể sử dụng nó, thời gian và công sức? Ứng dụng sẽ hoạt động tốt hơn? Nó sẽ cải thiện sự ổn định? Nếu bạn có thể có câu trả lời bất kỳ câu hỏi nào, một PHP frameworks có thể là câu trả lời đúng cho rằng dự án cụ thể.

Vậy khi nào chúng ta sử dụng PHP Framework?
Đây là một câu hỏi phổ biến khá giống nhau của các nhà phát triển kinh nghiệm hay những người mới bắt đầu và thực sự không có câu trả lời xác đáng. Đối với những người mới bắt đầu, một Framework sẽ cung cấp cho bạn sự đơn giản và ổn định cho dự án, vì vậy nó là ý tưởng tốt để sử dụng PHP Frameworks bất cứ khi nào bạn có thể. Nó sẽ giúp giảm bớt hoặc loại bỏ những đoạn mã không đúng và đẩy nhanh quá trình hoàn thiện dự án web một cách khả thi nhất.
Mặc khác, nhiều nhà phát triển PHP có kinh nghiệm xem Frameworks là một công cụ “yếu” mà không hiểu làm thế nào để viết mã tốt nhất, sạch sẽ nhất và ít lỗi. Cho dù điều này có đúng hay không đi chăng nữa, nhưng thực tế của vấn đề là PHP Frameworks là một công cụ có thể được sử dụng để tiết kiệm thời gian và giúp bạn làm việc tốt hơn, coding tốt hơn thôi. Chả làm xấu bạn đâu.
Khi làm việc trên một dự án có giới hạn về thời gian, sử dung PHP Frameworks có vẻ như là một giải pháp tối ưu nhất nhằm đẩy nhanh quá trình viết mã. Vì vậy, nếu bạn đang trong thời gian khủng hoảng và cấp bách nhất của dự án đòi hỏi gấp rút về thời gian, PHP Frameworks lợi thế sẵn có bạn có thể sử dụng bất kỳ lúc nào bạn muốn. Một ví dụ khác, nên xem xét là khi bạn làm việc trên một dự án kiếm khá nhiều tiền… và giúp công việc trôi chảy kinh doanh phát đạt hơn.

Tìm thấy điều gì trong PHP Framework?
Có rất nhiều tùy chọn sẵn sàng cho bất kỳ ai có thể tìm thấy trong PHP Frameworks, và thậm chí có các tùy chọn bạn có thể tạo ra cho riêng bạn, mặc dù đó là chỉ nên dùng cho các chuyên gia PHP. Khi tìm kiếm các Frameworks tốt nhất cho nhu cầu viết code PHP của bạn, điều quan trọng cần ghi nhớ những người sử dụng hoặc sửa đổi ứng dụng của bạn từ a – z. Nếu có nhiều người sử dụng các ứng dụng, có thể sử dụng PHP Frameworks phổ biến mà các nhà phát triển khuyên dùng. Mặc khác, nếu bạn muốn xây dựng các ứng dụng web sử dụng cá nhân riêng bạn, bạn sẽ được lựa chọn bất kỳ PHP Framework nào mà bạn cảm thấy thích – cho dù có phổ biến hay không.
Có nhiều yếu tố khác nhau để lựa chọn sử dụng PHP Frameworks bao gồm: tính dễ dùng, phát triển nhanh chóng, tính phổ biếng, tính năng mạnh mẽ và hỗ trợ từ các nguồn khác như Forum. Bạn nên thử vài PHP Frameworks khi bạn mới bắt đầu biết đầu sẽ tìm thấy Framework nào phù hợp nhất với nhu cầu chính đáng của bạn. Tất cả các Frameworks hơi khác nhau có điểm mạnh và điểm yếu cũng khác nhau luôn. Ví dụ như: Zen Framework đã phiên bản V3 và có đầy đủ tính năng cộng thêm hệ thống hỗ trợ rộng rãi vì đã phát triển từ rất lâu. Ngược lại, CakePHP là một hệ Framework ra đời sau Zen Framework và cũng có hỗ trợ tốt (Tương lai sẽ tốt hơn nữa), nhưng tính dễ dùng và thân thiện với người dùng hơn.
Như bạn đã thấy, mỗi Framework có những ưu điểm khác nhau, vì vậy tốt nhất là sử dụng thử và kiểm tra lỗi để tìm ra cái nào sẽ làm việc tốt nhất cho nhu cầu phát triển của bạn. Một các tuyệt với nhất nữa là tham khảo ý kiến đồng nghiệp của bạn trong các diễn đàn hay cộng đồng phát triển của Framework mà họ đa số sử dụng. Những người đó sẽ nêu ra những ưu điểm, tính năng, tính hỗ trợ và phạm vi cộng đồng của Framework

Các lỗi thường gặp khi sử dụng PHP Framework:
Lỗi thường xảy ra ở bất kỳ bước nào trong giai đoạn viết code, nhưng PHP frameworks trợ giúp bạn để hạn chế đáng kể những lỗi xảy ra bằng cách cung cấp bạn cách viết mã tốt nhất. Các viết mã lặp đi lặp lại có thể dẫn tới những lỗi không mong muốn.
Có nghĩa là khi sử dụng bất kỳ PHP framework nào các bạn cần phải cân nhắc kỹ lưỡng. Ví dụ như, nếu bạn là một chuyên gia viết mã PHP, bạn phải lựa chọn cho mình PHP framework tốt nhất với nhiều hỗ trợ và tối ưu nhất (Xem liệt kê bên dưới là những PHP framework phổ biến nhất hiện tại). Có rất nhiều framework hỗ trợ ít hoặc không có, mặc khắc nó được xây dựng bởi những cá nhân hạn chế về kiến thức lập trình PHP. Những kiểu PHP framework có thể gây ra lỗi các ứng dụng của bạn và tồi tệ hơn xảy ra trong mã kịch bản có thể gây ra vấn đề về lỗi bảo mật nghiêm trọng với website của bạn
Những lỗi phổ biến nhất là không đảm bảo cơ sở dữ liệu của bạn và sự tương thích của máy chủ web với Framework nào đó. Ví dụ: Seagull PHP Framework đề xuất cấu hình Webserver như sau:
PHP: PHP 4.3.0 is the minimum, later versions work fine, as do versions PHP 5.1.1 and above. Avoid anything in the 5.0.x series
MySQL: MySQL 4.0.x, 4.1.x and 5.0.x are all supported. You can also use 3.23.x.
Apache: Seagull works fine with 1.3.x and 2.x series of Apache
Nếu bạn không đáp ứng được các yêu cầu tối thiểu này, bạn sẽ không thể tận dụng tối đa hiệu suất tốt nhất của Framework mà bạn lựa chọn. Thậm chí nếu bạn là một người lập trình PHP chuyên nghiệp, bạn luôn xem trước các tài liệu hướng dẫn để xác định tính thương thích trước khi sử dụng nó.
Tương tự với những lỗi phố biến đã đề cập ở trên, không phải sau quá trình cài đặt theo khuyến cáo của PHP Framework, nó có thể làm cho bạn nhức đầu hơn khi sử dụng. Ta lấy ví dụ ở đây là Seagull PHP Framework lần nữa, Wiki Seagull là bản tóm tắt chi tiết của một số bước quan trọng mà đôi khi bạn bất cẩn dễ dàng bỏ qua. Nó sẽ làm bạn mất thời gian hơn để thiết đặt Framework và làm theo hướng dẫn cài đặt, thời giạn bạn sẽ tiết kiệm rất nhiều khi phát triển ứng dụng nếu chăm chút một ít thời gian để cài đặt chính xác nhất và đạt yêu cầu nhất.

Những PHP Framework tốt nhất và nên sử dụng:
Trong vài năm qua PHP là ngôn ngữ được lựa chọn đa số của các lập trình viên, đã có sự bùng nổ khi PHP Framework xuất hiện. Có nhiều cuộc tranh luận về những gì tốt nhất mà PHP Framework làm được và chưa làm được, vì thực tế cho thấy rằng không phải bất cứ ứng dụng nào được xây dựng bằng PHP Framework là tốt nhất và đạt yêu cầu nhất với tất cả chúng ta. Bên dưới là tổng hợp những PHP Framework tốt nhất và đáng sử dụng nhất trong thời điểm hiện nay:
The Zend Framework
The Zend Framework ra đời sau khi được cộng đồng phát triển và tích hợp phần lớn ứng dụng phong cách web 2.0. Bởi vì có rất nhiều sự hỗ trợ từ cộng đồng, Zend còn được gọi là “The PHP Company”. Nó có tính năng mạnh mẽ được xây dựng cho sự phát triển của các công ty và nó đòi hỏi có kiến thức sâu rộng về PHP.
CakePHP
CakePHP là sự lựa chọn tuyệt vời dành cho những người mới bắt đầu đến các lập trình viên PHP chuyên nghiệp. Nó hoạt động dựa theo nguyên tắc sẵn có, tập trung rất nhiều vào việc phát triển nhanh các ứng dụng, chính vì vậy CakePHP là một Framework được sử dụng để phát triển nhanh chóng các ứng dụng web. CakePHP nhanh chóng phát triển hệ thống hỗ trợ từ cộng đồng rộng lớn, khá đơn giản và khả năng mở rộng làm cho CakePHP là một trong những Framework phổ biến nhất hiện nay.
Symfony
Symfony là Framework nâng cao hơn dành cho các lập trình viên mục đích tạo ra các ứng dụng dành cho Doanh Nghiệp – Đáng chú ý nhất là Askeet và Yahoo! Bookmarks. Đây là PHP Framework nguồn mở với đầy đủ tính năng và làm tất cả, nhưng đó chính là điểm yếu của nó so với sự phát triển của các Framework. khác.
Codelgniter
Codelgniter nổi tiếng vì tính dễ sử dụng, hiệu suất cao và tốc độ nhanh. Không giống như Symfony, PHP Framework này thật lý tưởng để chia sẽ các tài khoản Hosting hoặc khi bạn muốn một Framework với. Nó cung cấp giải pháp đơn giản nhất và một thư viện các Video hướng dẫn, diễn đàn hỗ trợ, hướng dẫn người dùng và Wiki hỗ trợ cho bạn. Mới sử dụng Framework thì bạn nên cân nhắc và sử dụng thử Codelgniter.
Seagull
Seagull là một PHP Framework mới ra đời nhằm mục đích xây dựng ứng dụng web dễ dàng nhất, dòng lệnh và giao diện ứng dụng.Seagull là Framework lý tưởng cho người mới bắt đầu để nâng cao kiến thức lập trình của mình cao hơn. Đối với người mới bắt đầu, Seagulll có tính năng như một thư viện mẫu có thể được tùy chỉnh để phù hợp với nhu cầu sử dụng của bạn và cho các chuyên gia lập trình PHP, Seagull cung cấp một loạt các tùy chọn khác bao gồm các bài thực hành, các tiêu chuẩn và codebase modular để xây dựng các ứng dụng web nhanh chóng và dễ dàng. Seagull có một cộng đồng hỗ trợ rộng lớn và nhiều tài liệu tham khảo.

Kết luận:
PHP frameworks là một giải pháp tuyệt vời dành cho các nhà phát triển web tập trung nhiều kỹ năng để giảm bớt các bước lặp đi lặp lại trong quá trình viết code, đẩy nhanh quá trình phát triển và cung cấp hướng lập trình viết mã tốt nhất để xây dựng ứng dụng web. Điều này giúp các bạn phát triển các ứng dụng web phong phú, hạn chế các nguy cơ bảo mật trong các đoạn mã của bạn.
Trong khi một số lập trình viên PHP không cảm thấy cần thiết để sử dụng Framework để phát triển ứng dụng web, nhưng đó là một lợi thế cần thiết để phát triển nhanh ứng dụng đáp ứng nhu cầu của khách hàng của họ. Và đối với những người mới bắt đầu Framework có thể tăng cường khả năng học hỏi viết mã PHP tốt nhất và giảm tối thiểu lỗi xảy ra khi viết mã PHP.
Hiện nay có rất nhiều PHP Frameworks và vì thế các lập trình viên nên chắc chắn rằng có thể lựa chọn Framework tốt nhất đáp ứng nhu cầu của mình dựa theo tính năng, hỗ trợ, tốc độ phát triển, khả năng mở rộng và các tính năng khác. Một số PHP Frameworks tham khảo bao gồm: Zend Framework, CakePHP, Symfony, Codelgniter và Seagull.

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). Một vài thông tin dưới mình tìm hiểu được chia sẻ một vài đánh giá để mọi người có cái nhìn đúng hơn.

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ụ, độ tin cậy, tính khả chuyển… những tiêu chuẩn mà chỉ khi thiết kế các ứng dụng phụ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ểu agile, nghĩa là có thời gian phát triển và đưa vào sử dụng nhanh. Nhưng điều này khô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.

Chi Phí

Rõ ràng là phát triển các ứng dụng thiết kế web 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.

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ặt web 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ưng thiế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: "MySQL or SQL Server: Look beyond politics and hype when deciding which to use". Tất nhiên, PHP cũng có thể dùng với nhiều database khác, còn ASP.Net dùng với Oracle thì không có gì phải bàn về tốc độ cả.

Ý kiến riêng của tôi là bạn không cần phải băn khoăn gì về tốc độ của PHP + MySQL cho bất kỳ website nào dù lớn hay nhỏ. Vấn đề chi là thiết kế ứng dụng hiệu quả và tìm được dịch vụ hosting tốt. Điều này cũng đúng cả với ASP.Net.

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 đề của người lập trình thiết kế website, cả PHP và ASP.Net đều có những lỗ hổng có thể khai thác.

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ị.

Chúng ta thường bị “nói quá” về ngôn ngữ này hay ngôn ngữ kia tốt hơn, thực tế là cái nào tốt hơn hoàn toàn phụ thuộc vào kỹ năng của người lập trình và quản lý hệ thống. Trong khi phần lớn các website lớn của Việt Nam chọn ASP.Net thì PHP và Java lại

Thứ Tư, 14 tháng 8, 2013

Khái niệm cơ bản về Cookie và Session trong PHP

Bất kỳ một trang web nào cũng có các phiên làm việc riêng, việc này giúp website tương tác với từng user từ đó thu thập các thông tin riêng biệt và cần thiết. Để làm dc việc này ta dùng cookie và session. Bây giờ chúng ta sẽ tìm hiểu cách sử dụng của hai loại biến này.
1- Tổng quan về cookie:
Cookie là 1 đoạn dữ liệu được ghi vào đĩa cứng hoặc bộ nhớ của máy người sử dụng. Nó được trình duyệt gởi ngược lên lại server mỗi khi browser tải 1 trang web từ server.
Những thông tin được lưu trữ trong cookie hoàn toàn phụ thuộc vào website trên server. Mỗi website có thể lưu trữ những thông tin khác nhau trong cookie, ví dụ thời điểm lần cuối ta ghé thăm website, đánh dấu ta đã login hay chưa, v.v...
Cookie được tạo ra bởi website và gởi tới browser, do vậy 2 website khác nhau (cho dù cùng host trên 1 server) sẽ có 2 cookie khác nhau gởi tới browser. Ngoài ra, mỗi browser quản lý và lưu trữ cookie theo cách riêng của mình, cho nên 2 browser cùng truy cập vào 1 website sẽ nhận được 2 cookie khác nhau.


a -Thiết lập cookie:


Để thiết lập cookie ta sử dụng cú pháp:
Setcookie("tên cookie","giá trị", thời gian sống)
Tên cookie là tên mà chúng ta đặt cho phiên làm việc.
Giá trị là thông số của tên cookie.
Ví dụ:


Setcookie("username","admin", time() +3600)
Như ví dụ trên ta thấy với tên là username và giá trị là admin, có thời gian sống là 1 giờ tính từ thời điểm thiết lập.
Chú ý: Kịch bản cookie phải đặt trên mọi giá trị trả về bao gồm thẻ HTML và lệnh echo.
Kịch bản cookie phải đặt trên mọi giá trị trả về bao gồm thẻ HTML và lệnh echo.
b - Sử dụng cookie:
Để sử dụng lại cookie vừa thiết lập, chúng ta sử dụng cú pháp:
Cú pháp: $_COOKIE["tên cookies"]
Tên cookie là tên mà chúng ta thiết lập phía trên.
Ví dụ:


Tạo trang cookie.php với nội dung sau:


<?php
setcookie("name","Trung",time() + 3600);
?>
<html>
<head>
<title>Test page 1</title></head>
<body>
<b><a href=cookie2.php>Click here</a></b>
</body>
</html>


Tiếp tục tạo trang cookie2.php với nội dung sau:


<html>
<head><title>Result Page</title></head>
<body>
<?php
echo "Ten cua ban la <b>".$_COOKIE['name']."</b>";
?>
</body>
</html>


c- Hủy Cookie:


Để hủy 1 cookie đã được tạo ta có thể dùng 1 trong 2 cách sau:
+ Cú pháp: setcookie("Tên cookie")
Gọi hàm setcookie với chỉ duy nhất tên cookie mà thôi
+ Dùng thời gian hết hạn cookie là thời điểm trong quá khứ.
Ví dụ: setcookie("name","Kenny Huy",time()-3600);
Ví dụ:


Tiếp tục tạo trang cookie3.php với nội dung sau:


<?php
setcookie("name","Trung",time()-360);
?>
<html>
<head>
<title>Test page 1</title></head>
<body>
<b><a href=cookie2.php>Click here</a></b>
</body>
</html>


2- Tổng quan về session:


Một cách khác quản lý người sử dụng là session. Session được hiểu là khoảng thời gian người sử dụng giao tiếp với 1 ứng dụng. Một session được bắt đầu khi người sử dụng truy cập vào ứng dụng lần đầu tiên, và kết thúc khi người sử dụng thoát khỏi ứng dụng. Mỗi session sẽ có được cấp một định danh (ID) khác nhau và nội dung được lưu trong thư mục thiết lập trong file php.ini (tham số session.save_path).
a- Thiết lập session:
Để thiết lập 1 session ta sử dụng cú pháp: session_start()
Đoạn code này phải được nằm trên các kịch bản HTML. Hoặc những lệnh echo, printf.
Để thiết lập 1 giá trị session, ngoài việc cho phép bắt đầu thực thi session. Chúng ta còn phải đăng ký 1 giá trị session. Để tiện cho việc gán giá trị cho session đó.
Ta có cú pháp sau: session_register("Name")

Ví dụ:


<?php
Session_start();
Session_register("username");
?>


b- Sử dụng giá trị của session:


Giống với cookie. Để sử dụng giá trị của session ta sử dụng mã lệnh sau:
Cú pháp: $_SESSION["name"]
$_SESSION["name"]
Với Name là tên mà chúng ta sử dụng hàm session_register("name") để khai báo.

Ví dụ:


Tạo trang session.php với nội dung sau:


<?php
session_start();
session_register("name");
$_SESSION["name"] = "Kenny Huy";
?>
<html>
<head>
<title>Test page 1</title></head>
<body>
<b><a href=session2.php>Click here</a></b>
</body>
</html>


Tạo trang session2.php với nội dung sau:


<?
session_start();
?>
<html>
<head><title>Result Page</title></head>
<body>
<?php
echo "Ten cua ban la <b>".$_SESSION["name"]."</b>";
?>
</body>
</html>


c- Hủy bỏ session:


Để hủy bỏ giá trị của session ta có những cách sau:
session_destroy() // Cho phép hủy bỏ toàn bộ giá trị của session
session_unset()// Cho phép hủy bỏ session .
Ví dụ:


Tạo trang session3.php với nội dung sau:


<?php
session_start();
session_destroy();
?>
<html>
<head>
<title>Test page 1</title></head>
<body>
<b><a href=session2.php>Click here</a></b>
</body>
</html>

3- Tổng Kết:


Sau bài học này chúng ta đã nắm được cách điều khiển phiên làm việc giữa cookie và session. Sử dụng chúng trong từng trường hợp cụ thể. Từ đó có thể áp dụng để viết những ứng dụng nhỏ như kiểm soát người đăng nhập, làm giỏ hàng online,…..