10/10/2018, 11:45

Cách khám phá, đọc hiểu một mã nguồn PHP

Tự nói một chút về kinh nghiệm, tôi có tìm hiểu một số mã nguồn, ví dụ như Wordpress, và có thời gian training cho nhóm CodeAndMore của anh tiendx2002 ( http://www.ddth.com/showthread.php/325883 )

Sau đây là kinh nghiệm của cá nhân tôi, nếu bạn nào có kinh nghiệm tốt hơn, hoặc kinh nghiệm khác, thì chia sẻ nhé.

A. Để khám phá một mã nguồn mới, chúng ta cần

1- Có kiến thức PHP & MySQL cơ bản
2- Tự bạn đã code được một trang web đơn giản (có thể là 2, 3 bảng, mỗi bảng vài trường), sử dụng PHP thuần (không dùng framework)
3- Nên biết một chút về OOP (lập trình hướng đối tượng) và MVC (tìm đọc vài ví dụ nhỏ về 2 cái đó, nếu muốn HIỂU MỘT CHÚT thì không khó lắm)

B. Các bước đọc hiểu:

1- Đừng có đọc code ngay, hãy cài đặt nó lên
2- Xem xét và ghi lại trạng thái ban đầu của database
3- Sử dụng nó một thời gian
4- Xem xét các thay đổi ở admin (đổi cấu hình, thêm bài ...) ảnh hưởng đến database ra sao
5- Theo dõi cách các file gọi nhau thế nào. Bắt đầu từ file index.php, lần dần dần theo include, required ... để hiểu cách làm của tác giả (cần biết chút về OOP, MVC)
6- Đọc chức năng các hàm (đọc được bao nhiêu thì đọc, không cần nhớ, vì nó sẽ có thể có vài trăm đến vài ngàn hàm, nhớ không xuể, nhớ được chừng nào thì nhớ thôi, nói chung cái gì gặp nhiều thì tự nó nhớ, hãy để mọi việc tự nhiên)
7- Download các ví dụ về theme, plugin ....
8- Tìm cách thay đổi các ví dụ
9- Chế ra các theme, plugin đơn giản (càng đơn giản càng tốt, vài dòng là ok nhất) dựa vào các ví dụ đó
10- Sử dụng các công cụ search in files (Notepad++ cũng có, mà search hơi chậm) để tìm các hàm được dùng ở những đâu
11- Sử dụng các công cụ debug như: các hàm có sẵn của PHP (var_dump, echo, print_r), các công cụ debug mạnh hơn chút (kint, xDebug... tôi khá thích Kint) để xuất ra và theo dõi các biến
12- Tham gia các cộng đồng có liên quan đến mã nguồn đó để hỏi khi cần
13- Đọc tài liệu liên quan đến mã nguồn đó (thường mã nguồn nào cũng có tài liệu cả), nên nhớ là lúc này mới đọc chứ ko phải là vừa vớ được mã nguồn là đọc tài liệu luôn.
14- Tiếp tục search, debug và viết các plugin phức tạp hơn, trong quá trình đó bạn cũng sẽ hiểu về Core hơn

C. Qua quá trình trên, bạn sẽ hiểu được:

1- Database của mã nguồn đó có những bảng gì, trường gì (và cái nào là chính, là quan trọng)
Các file trong mã nguồn gọi nhau (require, include) ra sao
2- Những biến nào là quan trọng
3- Cơ chế hook, theme, plugin của mã nguồn đó thế nào
4- Lần tìm hiểu mã nguồn đầu tiên sẽ khá vất vả (có thể mất vài tháng, và đôi khi để thay đổi chút xíu, ví dụ thêm 1 chữ vào 1 chỗ bạn muốn, có thể mất cả ngày), nhưng lần tìm hiểu sau sẽ đơn giản hơn và bạn càng kinh nghiệm thì việc tìm hiểu các mã nguồn mới sẽ càng nhanh.

D. Tôi gợi ý vài mã nguồn mà bạn có thể tìm hiểu:

1- Frameworks: CodeIgniter, Yii, Zend ...
2- Apps: Wordpress, Drupal, Joomla, ...

Việc tìm hiểu một mã nguồn mới khá tốn thời gian, nên hãy cân nhắc, nếu bạn đặc biệt có hứng thú và/hoặc tương lai mã nguồn đó có ứng dụng thì mới tìm hiểu

E. Bạn chọn cái gì thì phụ thuộc vào:

1- Trình độ của bạn hiện tại: đã biết gì rồi?
2- Nhu cầu của bạn hiện tại: đang cần làm gì?
3- Hứng thú của bạn: thích cái gì?
4- Nhu cầu tương lai của bạn: sẽ vào công ty nào làm? sẽ làm trong thị trường nào?

P/S: cái poll lỗi chính tả chút nhưng VBB ko cho sửa poll thì phải

Ý kiến của thienha20

1. muốn đục code thì phải xét sơ cấu trúc nó trước đã sau đó tùy vào yêu cầu mà bắt đầu đục chứ bắt down cái FW hay CMS về mà xem code nó thì xem được vài hôm thì ì ra đó. Có yêu cầu mới có động lực phá code người khác theo ý mình.

2. Đục code cái wan trọng nhất là bạn cần có 1 cái editor pro + google.

3. Nói chung trước khi đục bạn cần nắm vững cơ bản về lập trình và sql, đọc vài tài liệu về cách debug và dùng 1 số addon hỗ trợ trình duyệt trong debug. Viết web thì không chỉ đục mỗi cái ngôn ngữ server và sql, bạn cần biết đục cả html, lẫn js + css.

4. Không phải code nào nói muốn đục là đục đâu tùy code họ có hướng mở cho mà đục hay không. Viết theo kiểu hầm bà lằn của coder lơ mơ mò có mà chết đọc vài dòng tức đến chết hết muốn đọc tiếp
antipro.vn viết 13:50 ngày 10/10/2018
Theo mình thì rất khó áp dụng giống như vầy, trước khi bạn bắt đầu "đục code" vào một mã muồn PHP, bạn cần phải xác định mục tiêu của mình là gì trước.
Dĩ nhiên nếu bạn ko có mục tiêu, vậy ko cần đọc. Dựa trên mục tiêu định ra trước thì bạn sẽ dễ định hướng được phần nào cần phải đọc, phần nào ko, và khi nào thì kết thúc công việc đọc code.
Ví dụ mình không biết về Wordpress, lần đầu tiên nhận làm Wordpress plugin mình mới đầu đọc Wordpress, sau khi đọc cái requirement của khách hàng, xác định những thứ mình cần làm trước, rồi mới đâm vào wordpress coi muốn làm như thế thì cần biết cái gì. Vì thế mình chỉ cần đọcc 3-4 file của wordpress thôi, thay vì đọc lần mò ko biết đâu mà lần.

Thêm nữa, muốn đọc code thì trước tiên bạn phải code được PHP đã, để train code thì mình nghĩ nên luyện mấy bài tập C++ trước, C++ bưởi, nhưng nhiều thứ để học và cần thiết sau này.
diepnghitinh viết 13:55 ngày 10/10/2018
thông thường mình bắt đầu từ file index rồi từ đó theo dòng chảy của source code mà đoán dc ý đồ của tác giả
zmt264 viết 13:52 ngày 10/10/2018
Được gửi bởi antipro.vn

1) trước khi bạn bắt đầu "đục code" vào một mã muồn PHP, bạn cần phải xác định mục tiêu của mình là gì trước. Dĩ nhiên nếu bạn ko có mục tiêu, vậy ko cần đọc. Dựa trên mục tiêu định ra trước thì bạn sẽ dễ định hướng được phần nào cần phải đọc, phần nào ko, và khi nào thì kết thúc công việc đọc code.

2) Ví dụ mình không biết về Wordpress, lần đầu tiên nhận làm Wordpress plugin mình mới đầu đọc Wordpress, sau khi đọc cái requirement của khách hàng, xác định những thứ mình cần làm trước, rồi mới đâm vào wordpress coi muốn làm như thế thì cần biết cái gì. Vì thế mình chỉ cần đọcc 3-4 file của wordpress thôi, thay vì đọc lần mò ko biết đâu mà lần.

3) Thêm nữa, muốn đọc code thì trước tiên bạn phải code được PHP đã, để train code thì mình nghĩ nên luyện mấy bài tập C++ trước, C++ bưởi, nhưng nhiều thứ để học và cần thiết sau này.
Vậy là bạn đồng ý một phần với mình rồi , vì cái 3 của bạn giống ý mình nói, mình cũng đồng ý là nên biết code PHP. Các bài C, C++ bưởi là thế nào? mình chưa rõ từ "bưởi"

Về ý 2 thì chắc là bạn làm plugin đơn giản của Wordpress thôi, plugin phức tạp khéo cũng mất nửa tháng đến 1 tháng tìm hiểu đấy

Ý 1 thì đồng ý, bài viết này là dành cho các bạn muốn tìm hiểu CÀNG NHIỀU CÀNG TỐT về một mã nguồn có trước, đó chính là mục đích, còn nếu đi làm thì tùy khách hàng giao gì ta tìm hiểu những cái có liên quan.
zmt264 viết 14:00 ngày 10/10/2018
Được gửi bởi diepnghitinh
thông thường mình bắt đầu từ file index rồi từ đó theo dòng chảy của source code mà đoán dc ý đồ của tác giả
Giống bước B5 mình nói (vừa edit bài chút cho rõ hơn)
thienha20 viết 13:49 ngày 10/10/2018
muốn đục code thì phải xét sơ cấu trúc nó trước đã sau đó tùy vào yêu cầu mà bắt đầu đục chứ bắt down cái FW hay CMS về mà xem code nó thì xem được vài hôm thì ì ra đó. Có yêu cầu mới có động lực phá code người khác theo ý mình. Đục code cái wan trọng nhất là bạn cần có 1 cái editor pro + google. Nói chung trước khi đục bạn cần nắm vững cơ bản về lập trình và sql, đọc vài tài liệu về cách debug và dùng 1 số addon hỗ trợ trình duyệt trong debug. Viết web thì không chỉ đục mỗi cái ngôn ngữ server và sql, bạn cần biết đục cả html, lẫn js + css.
Không phải code nào nói muốn đục là đục đâu tùy code họ có hướng mở cho mà đục hay không. Viết theo kiểu hầm bà lằn của coder lơ mơ mò có mà chết đọc vài dòng tức đến chết hết muốn đọc tiếp .
Vô Thin viết 13:47 ngày 10/10/2018
Có cách nào xem Binary của mã nguồn PHP khi nó đang chạy thì nó được PHP Compiler biên dịch ra như thế nào không? Mình thấy có một vài hacker họ không tấn công vào mã nguồn mà mà tấn công vào mã thực thi khi có lỗi tràn bộ đệm nên muốn xem thử hình hài chúng ra làm sao nhưng chưa biết cách để đọc được các thông tin ấy.
zmt264 viết 13:48 ngày 10/10/2018
Được gửi bởi thienha20

1. muốn đục code thì phải xét sơ cấu trúc nó trước đã sau đó tùy vào yêu cầu mà bắt đầu đục chứ bắt down cái FW hay CMS về mà xem code nó thì xem được vài hôm thì ì ra đó. Có yêu cầu mới có động lực phá code người khác theo ý mình.

2. Đục code cái wan trọng nhất là bạn cần có 1 cái editor pro + google.

3. Nói chung trước khi đục bạn cần nắm vững cơ bản về lập trình và sql, đọc vài tài liệu về cách debug và dùng 1 số addon hỗ trợ trình duyệt trong debug. Viết web thì không chỉ đục mỗi cái ngôn ngữ server và sql, bạn cần biết đục cả html, lẫn js + css.

4. Không phải code nào nói muốn đục là đục đâu tùy code họ có hướng mở cho mà đục hay không. Viết theo kiểu hầm bà lằn của coder lơ mơ mò có mà chết đọc vài dòng tức đến chết hết muốn đọc tiếp .
Cơ bản là đồng ý với bạn, những ý kiến rất đáng bổ sung vào bài viết. Mà bạn có thể giới thiệu 1 số addon được ko? mình biết mỗi firePHP
Bài liên quan
0