Tag: php

เซ็ต virtual host ใน xampp

หลังจากลง xampp แล้ว ถ้าเราต้องการเพิ่ม virtual host โดยให้ทำงานแบบแยกพอร์ท เราสามารถแก้ไขไฟล์ htconf ได้ โดยเพิ่ม

บอกว่าจะใช้พอร์ทไหนโดยเขียน จากตัวอย่างบอกว่าจะใช้พอร์ท 8001

Listen 8001

จากนั้นตั้งชื่อ host และบอกว่าไฟล์เก็บไว้ที่ไหน

<VirtualHost localhost:8001>
DocumentRoot “e:\www\test”
</VirtualHost>

เสร็จแล้วให้ทำการ save และทำการ restart apache โดยการกด stop และ start ใน xampp control panel

หลังจากเริ่ม apache ใหม่แล้ว ให้ทดลองเปิด browser แล้วพิมพ์ localhost:8001

ถ้าหากไม่มีปัญหาก็จะสามารถใช้งานไฟล์ที่อยู่ใน directory ได้ ถ้าหากเกิด error 403 แสดงว่าไม่ได้ตั้งให้ apache ใช้งาน directory อื่นได้ ให้เราไปเซ็ตค่าที่

<Directory />
AllowOverride none
Require all denied
</Directory>

เปลี่ยนเป็น

<Directory />
AllowOverride all
Require all granted
</Directory>

เท่านี้ก็จะสามารถเรียก directory ใดๆ จากในเครื่องได้แล้ว

ค่า IPN ที่ได้จาก paypal

เก็บค่าไว้ดูเฉยๆ ครับ ถึงแม้ว่า Paypal จะมี REST API ออกมาแล้ว แต่ถ้าทำบนเว็บ ผมก็ยังชอบ Classic API มากกว่า อย่างน้อยมัน Redirect ไปที่ Paypal เลย ทำให้ดูเหมือนว่าเราจ่ายเงินกับ Paypal จริงๆ ทีนี้ตอนส่งค่ากลับ เราควรจะส่งค่าไปที่ IPN เพื่อทดสอบว่าที่เราจ่ายเงินไปเมื่อกี้ผ่านหรือไม่ลักษณะก็ประมาณในรูปนี้

รายละเอียดเพิ่มเติม อ่านได้จากตรงนี้เลย

https://developer.paypal.com/docs/classic/ipn/gs_IPN/

ค่าที่ส่งมาก็ตามนี้เลย

Array ( [0] => mc_gross=10.74 [1] => protection_eligibility=Ineligible [2] => payer_id=7AKYXA62JHJ28 [3] => tax=0.00 [4] => payment_date=01%3A26%3A48+Jun+29%2C+2014+PDT [5] => payment_status=Completed [6] => charset=windows-1252 [7] => first_name=POP [8] => mc_fee=0.61 [9] => notify_version=3.8 [10] => custom=1%2C+popcm82%40gmail.com [11] => payer_status=verified [12] => business=shikimasan-facilitator%40gmail.com [13] => quantity=1 [14] => payer_email=popcm82%40gmail.com [15] => verify_sign=An5ns1Kso7MWUdW4ErQKJJJ4qi4-AZ7COGevOZwhzP.I7xXBZluVjWBi [16] => txn_id=90604886TJ142822G [17] => payment_type=instant [18] => last_name=EYE [19] => receiver_email=shikimasan-facilitator%40gmail.com [20] => payment_fee=0.61 [21] => receiver_id=E6DSF6LCZKA6Y [22] => txn_type=web_accept [23] => item_name=SBOBET222+registeration [24] => mc_currency=USD [25] => item_number= [26] => residence_country=US [27] => test_ipn=1 [28] => handling_amount=0.00 [29] => transaction_subject=1%2C+popcm82%40gmail.com [30] => payment_gross=10.74 [31] => shipping=0.00 [32] => merchant_return_link=click+here [33] => auth=AAPg-EApVQ6-.mrEUuFjCtr5Ab7MQlltZSL.791sCcItxm-uIk5xClVtjyHWodt9XDb.0c29pZH9bjdstlxW8xQ ) The response from IPN was: INVALID

Digitalocean VPS ดีๆ ของฟรีมีในโลก

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

สำหรับคนที่ต้องการจะสร้าง website สักเว็บหนึ่ง ตอนนี้ก็มีผู้ให้บริการอยู่หลายที่เลย ราคาตั้งแต่หลักร้อยต่อเดือนไปจนถึงหลักพัน แต่ยิ่งเว็ปไซต์ของเราโตขึ้นมากเท่าไหร่ เราก็ต้องการทรัพยากรจากเซิร์ฟเวอร์มากขึ้นเท่านั้น จนบางครั้งเราอาจถูกเชิญออกจากเซิร์ฟเวอร์โดยที่ไม่รู้ตัว ส่วนตัวก็เคยโดนมาแล้วจาก โฮสจรเข้

ทางออกของปัญหาก็มีอยู่ ซึ่งก็แล้วแต่งบประมาณในกระเป๋าของเรา ถ้างบไม่เยอะก็เช่า VPS เอา ถ้ายังไม่พอก็เช่าเป็น Dedicade ไปเลย แต่ถ้าอยากได้แรงสุดๆ อันนี้ก็ต้องซื้อเครื่องแล้วเอาไปตั้งเองเลย แต่ละแบบก็มีข้อดีข้อเสียต่างกันไป

สำหรับ VPS ตอนนี้ก็น่าจะเป็นทางเลือกสำหรับคนที่มีงบน้อย ซึ่งผมก็ไปเจอของ digitalocean ที่ราคาแค่ 5USD / เดือน หรือ 0.007 / ชั้วโมง แถมเป็นแบบกลุ่มเมฆด้วย VPS ราคาถูก แบบนี้เหมาะที่จะเอาไว้ลองเล่น นอกจากนั้น ยังให้ใช้งานได้ฟรี 3 ชั่วโมงแรก ขั้นตอนการติดตั้งก็ไม่ยุ่งยากด้วย ของดีแบบนี้จะพลาดได้ยังไง แบบนี้ก็ต้องลองกันหน่อยละ Continue reading

PDO Connection Class

เขียนเมื่อ 2008-07-23 16:33:10 +0700

ปกติผมจะเขียนโปรแกรมติดต่อฐานข้อมูลโดยฝัง query string เข้าไปในโค๊ดเลย ซึ่งมันก็ง่าย แต่ยากตอนจะเปลี่ยนฐานข้อมูล ก็เลยเขียน class ขึ้นมาเอง แต่ก็ยังติดที่ต้องเขียน method สำหรับแต่ละฐานข้อมูลอยู่ดี ซึ่งฐานข้อมูลบางแบบ ผมไม่ค่อยได้ใช้ (pg sql) หรือไม่เคยใช้เลย (posix, odbc) แต่ก็จำเป็นต้องรู้ไว้บ้างว่าเขียนติดต่อยังไง

หลังจากมาเขียน PHP แบบ OO (แต่ก็ไม่เต็มรูปแบบ) ก็มีคนแนะนำว่า ทำไมไม่ลองใช้ PDO ล่ะ? แรกๆ ก็ไม่ได้สนใจ แต่พอมาจับงานที่ต้องเขียนให้ติดต่อทั้ง PG SQL, MySQL, SQLite แล้วเจอปัญหาเดิมอีก คือ เปลี่ยนฐานข้อมูลลำบาก จะไล่แก้โค๊ดให้หมด ก็บ้าไปแล้ว ก็เลยนึกถึุง PDO ขึ้นมา ลองเล่น ลองลูบ ลองคลำ มันอยู่ 2 อาทิตย์กว่าๆ ก็ได้ Class ส่วนตัวออกมา อิอิ สบายเลย จะเปลี่ยนฐานข้อมูล ก็แก้แค่ไฟล์คอนฟิก Continue reading

Timestamp แบบเลขกลมๆ

ปกติเวลาผมเขียนโปรแกรมที่เกี่ยวกับเวลา ผมจะใช้ timestamp ในการคำนวนเสมอๆ เพราะอยากเพิ่มจำนวน วัน เดือน ปี หรือหาค่าออกมาเป็นวันที่ เดือน หรือ ปี มันทำได้ง่ายมากๆ โดยเฉพาะใน php จะมีฟังก์ชั่น date อยู่แล้วทำให้คำนวนทุกอย่างได้อย่างง่ายดาย แต่ทุกๆ ครั้งที่จะทำการเพิ่มค่าต่างๆ ผมก็ต้องมานั่งคำนวนวินาที นาที ชั่วโมง วัน… เองใหม่หมด และต้องทำทุกๆ ครั้ง แบบว่าเป็นปลาทองไปเสียแล้วจำอะไรได้ไม่เยอะละ

timestamp ของ php, mysql, unix และภาษาอื่นๆ จะนับเวลาเป็นวินาที เว้นบางภาษาเช่น javascript จะนับเป็นมิลิวินาที ซึ่งจริงๆ มันก็เท่ากันหมด แค่เอาไปหาร 1000 ก็ได้เป็น timestamp ทั่วๆ ไปแล้ว แต่รายละเอียดลึกๆ มันก็ต่างกันอยู่ดี อย่าง php จะเริ่มนับเดือน มกราคม เป็น 1 แต่ javascript จะเริ่มที่ 0 อันนี้ก็แล้วแต่ภาษาแต่ยังไง timstamp ก็จะมีค่าเท่ากันเสมอ ทำให้เราสามารถนำค่าคงที่ของแต่ละ นาที ชั่วโมง ไล่ไปเรื่อยๆ ไปคำนวนได้เสมอ Continue reading

mobile detect สำหรับ php แบบง่ายๆ

ตอนนี้มือถือหรือ tablet กำลังเป็นที่นิยมมากมาย เวลาเขียนเว๊ปส่วนใหญ่เราก็จะแยกเป็นหน้าสำหรับมือถือซึ่งเราก็ต้องทำการตรวจสอบก่อนว่าคนที่เข้ามาดูใช้มือถือหรือ tablet หรือเข้ามาจาก pc ปกติ สำหรับคนที่ตั้ง server เอง เราสามารถลงโมดูล Apache Mobile Filter แล้วไปจับที่ AMFLightDetectionFilter แทน แต่ถ้าเราเช่าพื้นที่จากคนอื่นละ ก็ไม่ยากเลย ใช้ php นี่แหละจับเอา โดยจับเอาจากตัวแปร $_SERVER[‘HTTP_USER_AGENT’] แล้วเราก็มาแยกเอาว่าเป็นอุปกรณ์มือถือหรือเปล่าจากตรงนี้ได้ Continue reading

ตารางสลับสีแบบง้าย ง่าย

ปกติเวลาเราสร้างตาราง (table) สำหรับขึ้นมาสักอันหนึ่ง แล้วเราต้องการแยกสีสำหรับแต่ละแถว เราก็อาจจะเขียนโค๊ดในการวนลูปเพื่อให้แต่ละแถวมีสีไม่เหมือนกัน แต่ถ้าหากเราไม่สามารถให้สามารถวนลูปได้ คือ server รัน php หรือ asp ไม่ได้ เราจะมีวิธีแก้ปัญหายังไงดี

ง่ายๆ เลย ก็ใส่สีในแต่ละแถวไปเลยสิ (ง่ายไหม)

<table width="300" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <th scope="col" width="33%">ช่องที่</th>
    <th scope="col" width="33%">ตัวหนังสือ</th>
    <th scope="col">ภาษาไทย</th>
  </tr>
  <tr bgcolor="#999">
    <td>1</td>
    <td>A</td>
    <td>ก</td>
  </tr>
  <tr>
    <td>2</td>
    <td>B</td>
    <td>ข</td>
  </tr>
  <tr bgcolor="#999">
    <td>3</td>
    <td>C</td>
    <td>ฃ</td>
  </tr>
  <tr>
    <td>4</td>
    <td>D</td>
    <td>ค</td>
  </tr>
  <tr bgcolor="#999">
    <td>5</td>
    <td>E</td>
    <td>ฅ</td>
  </tr>
  <tr>
    <td>6</td>
    <td>F</td>
    <td>ฆ</td>
  </tr>
  <tr bgcolor="#999">
    <td>7</td>
    <td>G</td>
    <td>ง</td>
  </tr>
  <tr>
    <td>8</td>
    <td>H</td>
    <td>จ</td>
  </tr>
  <tr bgcolor="#999">
    <td>9</td>
    <td>I</td>
    <td>ฉ</td>
  </tr>
</table>

ได้แบบนี้เลย
cmdevhub Continue reading

บทที่ 10 การติดต่อฐานข้อมูล MySQL

หลังจากบทที่แล้วเราติดตั้งฐานข้อมูล MySQL เสร็จเรียบร้อยแล้ว และทำให้ใช้งานร่วมกับ PHP ได้แล้ว ทีนี้เราจะเริ่มใช้งานมันได้ยังไง เดี๋ยวมาดูกันครับ

การติดต่อ MySQL จาก PHP จากที่เคยทำมามันก็มี 2 วิธีหลักๆ คือ ติดต่อโดยตรงโดยผ่าน Native Driver ที่มาพร้อมกับ PHP เลย กับอีกวิธีคือใช้ PDO (PHP Data Object) จริงๆ ผมไม่อยากเรียก PDO ว่าเป็น Native Driver เท่าไหร่ เพราะมันติดต่อฐานข้อมูลได้หลายแบบเหลือเกิน แต่ในเว๊ปของ MySQL บอกไว้แบบนั้นงะ

ลำดับการทำงานของทั้งสองขั้นตอนจะคล้ายๆ กันคือ

      สร้างการเชื่อมต่อกับ MySQL
      ติดต่อกับฐานข้อมูลที่จะใช้งาน
      ปิดการเชื่อมต่อกับ MySQL

ผมจะอธิบายรายละเอียดเฉพาะแบบแรกนะครับ ส่วนแบบที่สองจะให้ตัวอย่างแล้วอธิบายนิดหน่อย เพราะถ้าเข้าใจเรื่อง OOP แล้ว PDO มันไม่ยากเลย บางทีอ่านแค่ Class กับ Method ก็เอาไปใช้งานได้แหละ อีกอย่างเซิร์ฟเวอร์ที่เราเช่าบางทีไม่เปิดใช้งาน PDO ก็มี แอบเศร้าเลย Continue reading

บทที่ 9 ติดตั้ง MySQL

หลังจาก 8 บทแรกที่ผมเขียนไว้เมื่อชาติปางก่อน ผมก็ไม่ได้เขียนอะไรเกี่ยวกับ PHP อีกเลย รวมเวลาน่าจะเกินครึ่งปีแล้วล่ะ

ถ้าเราจะเขียน PHP หรือโปรแกรมอะไรก็แล้วแต่ การเก็บข้อมูลเป็นอะไรที่สำคัญพอๆ กับ logic ของโปรแกรมเลย ถ้าหากโปรแกรมสามารถประมวลผลได้อย่างดี ทำงานได้ตรงตามความต้องการทุกอย่าง แต่ถ้าหากเราต้องการเก็บผลลัพธ์ไว้ล่ะ เมื่อก่อนตอนที่ผมเขียน C++ บน DOS จนมาถึง perl และช่วงที่เขียน PHP ใหม่ๆ วิธีการเก็บข้อมูลที่ง่ายที่สุดคือ text file นี่แหละ ซึ่งมันก็ง่ายจริงๆ fopen, fclose ก็จบ ใช้เครื่องหมาย comma คั่นระหว่างข้อมูล (field) มันก็ทำงานได้ดีกับข้อมูลจำนวนไม่มากแต่ถ้าหากข้อมูลมีจำนวนมากขึ้นล่ะ จะเริ่มมีปัญหาขึ้นมาทันทีเลยทั้งเรื่องขนาดของไฟล์ที่เก็บ ความเร็ว และการเขียนข้อมูลพร้อมๆ กันในกรณีที่ใช้ไฟล์ร่วมกัน วิธีการแก้ปัญหาที่ง่ายที่สุดคือ เปลี่ยนไปใช้ฐานข้อมูลซะ

ฟังดูเหมือนง่าย แต่มันก็ง่ายจริงๆ ข้อดีของ PHP อย่างหนึ่งคือ มันสามารถติดต่อกับฐานข้อมูลได้หลายชนิดมากๆ หรือถ้าหากไม่รู้ว่าจะใช้ฐานข้อมูลอันไหน ก็เขียน PDO ไปเลย (อันนี้ค่อยคุยกันทีหลัง) สำหรับฐานข้อมูลที่นิยมสำหรับ PHP ก็คงหนีไม่พ้น MySQL

ข้อดีของ MySQL คือ มันฟรี แล้วสามารถใช้งานได้ในหลายๆ ระบบปฎิบัติการ (multi platform) แต่ข่าวร้่ายนิดๆ หลังจากโดนซื้อโดย SUN MySQL ที่ฟรีจะเหลือแค่ Community ซึ่งความสามารถอาจน้อยกว่าตัวที่ขายกัน แต่ก็ไม่ต้องห่วง แค่นี้ก็เพียงพอแล้วจริงๆ คือ ไม่ต้องไปสนใจมันหรอก อันไหนฟรีเราก็ใช้ไปเหอะ เนอะ Continue reading

บทที่ 8 ฟังก์ชั่น

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

Function ในภาษา PHP มาอยู่ 4 ชนิดคือ

  1. ฟังก์ชั่นภายใน (invoking a function)
  2. ฟังก์ชั่นที่สร้างขึ้นมาเอง (creating a function)
  3. ฟังก์ชั่นซ้อนฟังก์ชั่น (nesting function)
  4. ฟังก์ชั่นเรียกตัวเอง (recursive function) Continue reading