*** เนื่องจากว่าปัจจุบัน x-debug มันออกเวอร์ชั่นใหม่แล้ว และเมื่อท่านทำตามวิธีด้านล่าง ก้อปปี้ phpinfo ไปวาง มันจะบอกว่าไม่ซัพพอร์ต ให้ท่านอ่านบทความนี้ของผมอีก 1 บทความนะครับ ผมเขียนแสดงที่ดาวน์โหลดไว้ให้ท่านแล้ว แต่ใช่ว่าบทความด้านล่างนี้จะไม่มีประโยชน์และใช้ไม่ได้นะครับ มันยังใช้ได้เหมือนเดิม
http://www.select2web.com/netbean/x-debug-netbean.html

ชาวเราเหล่าผู้พัฒนาโปรแกรมด้วยภาษา PHP ยามเหลียวมองไปดูเพื่อนบ้านอย่าง asp.net มันช่างน่าน้อยเนื้อต่ำใจเสียนี่กะไร

asp.net มีเครื่องมือชั้นยอดไว้สำหรับสร้างแอพ ชุดเครื่องมือจากเฮียบิลมาพร้อมคำสั่งดีบักที่ทรงประสิทธิภาพ ทำให้การเขียนโปรแกรมเป็นไปอย่างรวดเร็ว หาที่ผิดพลาดของโปรแกรมได้ง่าย อยากให้หยุดโปรแกรมตรงไหนเพื่อตรวจสอบค่าตัวแปร ก็เพียงแค่เซ็ต break point แล้วเล่นโปรแกรมไปตามปกติ เมื่อโปรแกรมรันมาถึงจุดที่มาร์คไว้ มันก็หยุด เราก็ทำการชำแหละตัวแปร

PHP รึ เซ็งหง่าว ต้องประยุกใช้คำสั่งเอาเองเพื่อทำการดีบักโปรแกรม จนผมต้องเขียนบทความรวบรวมคำสั่งเหล่านั้นไว้ให้อ่านกันเมื่อเร็วๆนี้ คำสั่งสำหรับดีบัก PHP

แต่แล้วเมื่อผมได้เจอกับ x-debug (อันที่จริงผมเจอมันนานแล้วล่ะ แต่ไม่รู้วิธีใช้) และใช้มันร่วมกับ Netbean 7.0 ผมก็มองเห็นสวรรค์รำไร อย่างกะเด็กดมกาว

x-debug นั้นมันจะช่วยให้ Netbean 7.0 สามารถทำการดีบักโปรแกรมได้ใกล้เคียงกับ วิชวลสตูดิโอ ของทางฝั่งไมโครซอฟต์ มาดูวิธีกันเถอะครับ ผมเชื่อว่าท่านที่ใช้ Netbean 7.0 เป็นเครื่องมือพัฒนา PHP อยู่แล้ว จะต้องหลงรักเข้าเต็มปอด

วิธีการจะแบ่งออกเป็น 2 ช่วง

1. ติดตั้งไลบรารี x-debug เข้าไปเป็นส่วนหนึ่งของตัวประมวลผล PHP

2. ตั้งค่าใน Netbean 7.0 เล็กน้อย

(optional) ทดสอบดีบักโค้ด PHP

ติดตั้งไลบรารี x-debug

1. เข้าไปที่เว็บไซต์  http://xdebug.org/find-binary.php หน้านี้จะเป็นวิซาดคอยช่วยเลือกไฟล์ที่ท่านจะต้องดาวน์โหลด และให้คำแนะนำ (แต่ตอนนี้มันเป็นแค่ชองป้อนข้อมูลว่างๆ ขาวๆ) ก่อนอื่นเลยท่านจะต้องก้อปปี้ข้อความที่ได้จากคำสั่ง phpinfo() มาวางในนี้แล้วกดปุ่ม Analyse my phpinfo() output เพื่อให้มันช่วยวิเคราะห์ว่าเราควรจะต้องดาวน์โหลดไฟล์ x-debug ตัวไหน เวอร์ชั่นอะไร ไปติดตั้ง เพราะแต่ละเครื่องสภาพแวดล้อมในการพัฒนา PHP ไม่เหมือนกัน ถ้าท่านไม่รู้ว่า phpinfo() เขียนยังไง ให้ไปอ่านบทความผมที่  http://www.select2web.com/php/how-to-check-php-version.html
xdebug-01

เมื่อท่านรันคำสั่ง phpinfo() แล้วให้ ctrl+a ก้อปปี้ล่อข้อความทั้งหมดมาเลย โดยไม่ต้องสนใจว่ามันจะมีอะไรบ้างอยู่ข้างใน เอามาวางในช่องว่างๆนั่นแหละแล้วกดปุ่ม Analyse my phpinfo() output
xdebug-02

xdebug-03

2. ดาวน์โหลดไฟล์ที่เขาให้ลิ้งก์มา
xdebug-04

3. ทำตามคำแนะนำของเขาข้อสอง คือเอาไฟล์ที่ดาวน์โหลดมาไปเก็บไว้ที่ C:\AppServ\php5\ext

4. สร้างโฟลเดอร์เปล่าๆชื่อ tmp ไว้ที่ C:\AppServ

5. เปิดไฟล์ php.ini ขึ้นมา เอาคำสั่งด้านล่างไปเพิ่มบรรทัดล่างสุด มันคือเอาไปต่อท้ายนั่นแหละ

[XDebug]
; Only Zend OR (!) XDebug
zend_extension_ts = C:\AppServ\php5\ext\php_xdebug-2.1.1-5.2-vc6.dll
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
; Port number must match debugger port number in NetBeans IDE Tools > Options > PHP
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir="C:\AppServ\tmp"

แก้บรรทัด ให้เป็นไปตามคำแนะนำข้อสามของเขาด้วย

zend_extension_ts = C:\AppServ\php5\ext\php_xdebug-2.1.1-5.2-vc6.dll

6. เสร็จเรียบร้อย บันทึก แล้วก็รีสตาร์ท apache ซะ ถ้าทำไม่เป็นไปอ่านบทความนี้ วิธีรีสตาร์ท apache เพื่อความชัวให้ลองรันคำสั่ง phpinfo() ดู น่าจะเห็นว่า x-debug ติดตั้งเรียบร้อยแล้ว

ตั้งค่าใน Netbean 7.0

1. ไปที่ Tools > Options

2. ไปที่แท็บ PHP ติ๊กเครื่องหมายถูกหน้า Stop at First Line ออก เสร็จแล้ว OK ซะ เพื่อทำการบันทึก
xdebug-05

ทดสอบดีบักโค้ด PHP

1. เปิด netbean ขึ้นมา สร้างไฟล์ชื่อ test-debug.php

2. ก้อปปี้โค้ดด้านล่างไปวางในไฟล์

function WorkingDays($year, $month, $day) {
    if (!$year)
        $year = date('Y');
    if (!$month)
        $month = date('m');
    if (!$day)
        $day = date('d');
 
    //create a start and an end datetime
    $startdate = strtotime($year . '-' . $month . '-01');
    $enddate = strtotime($year . '-' . $month . '-' . $day);
    $currentdate = $startdate;
 
    while ($currentdate <= $enddate) {
        //if not Saturday or Sunday, +1
        if (!((date('D', $currentdate) == 'Sat') || (date('D', $currentdate) == 'Sun') )) {
            $return = $return + 1;
        }
        $currentdate = strtotime('+1 day', $currentdate);
    } //end date walk loop
    //return the number of working days
    return $return;
}
 
echo WorkingDays(2011,4,30);

3. ทำการเซ็ต break point โดยการคลิกลงไปที่เลขบรรทัด อยากให้โปรแกรมหยุดที่บรรทัดไหนก็ คลิกตัวเลขบรรทัดนั้น แล้วทั้งบรรทัดก็จะถูกคาดแดงไว้ ไม่ต้องห่วงโค้ดไม่ได้รับผลกระทบใดๆ
xdebug-06

4. ไปที่เมนู Debug > Debug File หรือจะกดปุ่ม Ctrl+Shift+F5 ก็ได้
โปรแกรมมันจะรันไฟล์ PHP ของเราแล้วก็มาหยุดอยู่ตรง break point

5. ลองเอาเมาส์ชี้ไปที่ตัวแปรต่างๆ มันจะขึ้นทูลทิปแสดงค่าที่อยู่ภายในให้ท่านเห็นอย่างละเอียด ทุกตัว
xdebug-07

เครื่องมือชุดนี้สำหรับการดีบัก ลองคลิกเล่นดูก็จะเข้าใจเองว่ามันทำงานยังไง
xdebug-08

ได้เครื่องมือ x-debug ไปแล้วก็อย่าดีใจจนร้องแรกแหกกระเชอ เป็นตุ๊ดแตกล่ะ อายข้างห้องเขา

**** เพิ่มเติมเมื่อ 01-02-2556
ตอนนี้ x-debug มันออกเวอร์ชั่นใหม่แล้ว แต่มันจะใช้ไม่ได้กับบางคน (ซึ่งทำตามข้างบนแล้วมันบอกอะไรสักอย่างไม่ซัพพอร์ตๆ) ผมก็เจอ ให้ไปอ่านบทความ http://www.select2web.com/netbean/x-debug-netbean.html เพิ่มเติมครับผม ผมเขียนไว้แล้ว