ThaiSEOBoard.com

ไทย เสียว บอร์ด => Tutorial (ห้ามตั้งคำถามห้องนี้) => ข้อความที่เริ่มโดย: ball6847 ที่ 17 เมษายน 2009, 12:40:15



หัวข้อ: เคยมั้ย แกะสคริปท์แล้วมึนตึ๊บ มาลองนี่ดีกว่า => Windows Grep
เริ่มหัวข้อโดย: ball6847 ที่ 17 เมษายน 2009, 12:40:15
ใครที่หัดเขียนโปรแกรมด้วยวิธีแนวๆเดียวกับผม คือหัดจากการแกะ Sourcecode สคริปท์ทั่วๆำไป (ที่เปิดเผย source นะ เหอๆ)

ปัญหาที่เจอเวลาจะแกะคือ เวลาเจอสคริปท์ใหญ่ๆอย่างพวก CMS จะถึงกับมึนตึ๊บ เพราะสคริปท์พวกนี้จะเขียนโปรแกรมเป็น OOP แยกเป็นส่วนๆ แล้วค่อยเรียกมาใช้เพื่อให้สคริปท์ไม่รก อ่านง่าย แต่ปัญหาของคนของโมคือ หาต้นตอของ function หรือ class ไม่เจอ (มัน include มาจากไฟล์ไหนของมันวะ  >:( )

บางฟังก์ชั่น พี่แกใช้ชื่อแบบ self explained มาก อย่าง wordpress มีฟังก์ชั่น __() , _e() , _p() , _n() , _c()
โอ้ว (อุทานอย่างสถุนว่า "กุจะบ้า!! ไรของมันวะ!!") จะตรัสรู้ได้มั้ยเนี่ยว่าฟังก์ชั่นพวกนี้มันไว้ทำอะไร

ครั้นจะหาต้นตอก็งงเหลือกินว่ามัน include มาจากไฟล์ไหน

วันนี้ผมมีวิธีหาแระ ด้วยโปรแกรมนี้เลย Windows Grep (จริงๆแล้ว grep เป็น commandline utility ของ unix)

ที่นี่เลย => http://www.wingrep.com/

โปรแกรมนี้เอาไว้ Search , Replace ไฟล์ได้ทั้งแบบ match word หรือ regular expression แบบทีเดียวหลายๆไฟล์ เพราะฉนั้นถ้าเอามาหัดแกะสคริปท์ควรมีพื้น regular expression มาบ้างนะคับ

เริ่มแรกตามจุดประสงค์ของเราคือเอามาช่วยแกะสคริปท์ แต่ว่า grep ไม่มี syntax hightlighter ให้นะ เพราะงั้นเราต้องใช้มันร่วมกับ text editor ตัวอื่น ในที่นี้ผมใช้ editplus ผมก็จะตั้งให้มันทำงานร่วมกับ editplus ด้วย

โดยเข้าไปที่ Options => Preferences เลือกที่แท็บ Editor แล้วใส่ Command เข้าไปแบบนี้คับ

(http://upload.tarad.com/images/153524grep-editplus-preferences.png)

ทีนี้พอเวลาเราค้นหาแล้วให้จะได้ให้มันเปิดไฟล์ที่ match ด้วย editplus แล้วให้เลือก cursor ไปที่ บรรทัดที่เจอทันที เราจะเข้าถึงข้อมูลได้ทันทีเลยคับ

ทีนี้มามาลองค้นหาง่ายๆ ผมจะลองกับ wordpress นะครับ
โดยโจทย์ของผมคือ ผมต้องการหาทุก function ที่มีอยู่ใน wordpress ก็จะเริ่มแบบนี้ครับ

เลือกที่เมนู Search => Search... หรือกด ctrl+f หรือคลิ้กที่รูปไฟฉาย วิธีไหนก้ได้แล้วแต่สะดวกคับ

ผมก็ใส่ regex ที่ช่อง search string แล้วเลือก Normal(Regular Expresion)
regex ผมใส่อันนี้

function [a-z_][a-z0-9_]+\s*\(.*\)

แล้วก็ไม่ติ้กช่อง match case นะ

ช่อง File Specification ผมกรองเอาเฉพาะ *.php ใครคิดว่ามีพวก *.inc ก็ใส่ *.* ไปเลยมันจะค้นทุกนามสกุล
ช่อง Folder ผมใส่ที่อยู่ของ wordpress ในเครื่องผมเลย

(http://upload.tarad.com/images/809019grep-search-function.png)

ได้ตามนี้ก็คลิ้ก OK เลย
รอแปปนึง รายชื่อทุกฟังก์ชั่นใน wordpress ก็จะปรากฏต่อหน้าเราในบัดดล พร้อมทั้งที่อยู่ไฟล์ และบันทัดที่เจอ

(http://upload.tarad.com/images/546529grep-search-function-result.png)

ลองคลิ้กที่ข้อความที่หาเจอมันก็จะเปิดไฟล์นั้นด้วย editplus แล้วไปที่บรรทัดนั้นทันที

(http://upload.tarad.com/images/584543open-result-file-in-editplus.png)

อ้อ มันเป็นอย่างงี้นี่เอง

หวังว่าคงเป็นประโยชน์นะครับ


หัวข้อ: Re: เคยมั้ย แกะสคริปท์แล้วมึนตึ๊บ มาลองนี่ดีกว่า => Windows Grep
เริ่มหัวข้อโดย: smapan ที่ 17 เมษายน 2009, 12:50:41
ปรกติใช้ editplus แล้ว search > find in files... แค่นี้เองครับ  :P

ขอบคุณครับสำหรับความรู้ใหม่


หัวข้อ: Re: เคยมั้ย แกะสคริปท์แล้วมึนตึ๊บ มาลองนี่ดีกว่า => Windows Grep
เริ่มหัวข้อโดย: kero ที่ 17 เมษายน 2009, 12:59:01
ปรกติใช้ editplus แล้ว search > find in files... แค่นี้เองครับ  :P

ขอบคุณครับสำหรับความรู้ใหม่

เหมือนผมเลย  :P  เห็นพวกที่เขียนโปรแกรมบน unix เขา grep กันง่ายๆมานานแล้ว


หัวข้อ: Re: เคยมั้ย แกะสคริปท์แล้วมึนตึ๊บ มาลองนี่ดีกว่า => Windows Grep
เริ่มหัวข้อโดย: ball6847 ที่ 17 เมษายน 2009, 13:20:02
ปรกติใช้ editplus แล้ว search > find in files... แค่นี้เองครับ  :P

ขอบคุณครับสำหรับความรู้ใหม่

เออ จริงด้วยแฮะ  ;D ;D

จะทำให้ยากทำมัยวะเนี่ยเรา ก๊ากกก  ;D ;D


หัวข้อ: Re: เคยมั้ย แกะสคริปท์แล้วมึนตึ๊บ มาลองนี่ดีกว่า => Windows Grep
เริ่มหัวข้อโดย: ioff ที่ 17 เมษายน 2009, 13:27:47
 :)  เป็นอีก 1 วิธีมาเสอนกันไง ค่ะ


หัวข้อ: Re: เคยมั้ย แกะสคริปท์แล้วมึนตึ๊บ มาลองนี่ดีกว่า => Windows Grep
เริ่มหัวข้อโดย: Newbies ที่ 17 เมษายน 2009, 14:20:28
เคยมึนๆ เหมือนกัน เวลาแกะ
แต่เดี๋ยวนี้อยากแกะอะไร ก็ใช้ php xref เอา เอาทั้งสคริบมาทำในเครื่องเลย มันจะ gen cross reference file ให้หมด หาอะไรก็เจอ รู้หมดอยู่ตรงไหน ทำอะไร

ตัวอย่าง
http://xref.fergcorp.com/trunk/nav.html?index.html