Creating Web Services With PHP

วันนี้ค้นหาวิธีการสร้าง Web Services โดย PHP ขอ bookmark รวมลิ้งค์ไว้ตรงนี้ก่อน

http://webservices.xml.com/pub/a/ws/2004/03/24/phpws.html?page=1
http://talks.php.net/index.php/Web+Services
XML and PHP. Part 1: Using The WDDX Functions
PHP and Web Distributed Data eXchange (WDDX)
http://talks.php.net/show/oscon-webservices/1
Transforming XML with PHP
PHP to XML:

http://www.ibiblio.org/xml/slides/sd2000west/xmlandjava/208.html
Hands On: Inside the Tricky PHP-to-XML Project
WDDX:
Web Distributed Data Exchange, or WDDX, is a free, open XML-based technology that allows Web applications created with any platform to easily exchange data with one another over the Web

Basic specs to know
• XML: http://www.w3.org/XML
• XML Namespaces: http://www.w3.org/TR/REC-xml-names
• XML Schemas: http://www.w3.org/XML/Schema
• WDDX: http://www.openwddx.org/
• REST: http://internet.conveyor.com/RESTwiki/moin.cgi/FrontPage
• XML-RPC: http://www.xmlrpc.com/
• SOAP: http://www.w3.org/TR/soap
• WSDL: http://www.w3.org/TR/wsdl
• Web Services Activity: http://www.w3.org/2002/ws/
Transfer XML with PHP: http://www.xml.com/pub/a/2003/06/18/php-xml.html

Apache + PHP + Raid fail

เมื่อวานผมจะ upgrade PHP เป็น 4.3.10 แต่สังเกตเห็นว่า Apache ก็น่าจะ upgrade เป็นเวอร์ชันใหม่ด้วย ก็เลยทำมันซะทีเดียวพร้อมๆ กัน 3 เครื่อง หลังจาก upgrade เสร็จ ก็ตรวจดูความเรียบร้อยต่างๆ ผมคิดว่าก็น่าจะปกติ ไม่มีปัญหาอะไร

แต่ผลปรากฎว่า ช่วงค่ำๆ ของวันนี้เครื่องอืดผิดปกติ ผมเข้าไปดูก็พบว่า load ของเครื่องปาเข้าไปร้อยกว่าๆ ร้อยกว่าๆ จริงๆ นะครับ ผมเริ่มจากการตรวจสอบเจ้า Apache server ก่อนอื่น และก็พบว่าคงเป็นเจ้า apache นี่แหละที่เป็นตัวปัญหา ผมพยายามหยุด process ก็ไม่ได้ kill process ก็ไม่ได้ ลองอยู่หลายรอบ สุดท้ายก็ต้องสั่ง reboot ผลที่ได้ก็คือสั่ง reboot ก็ไม่ได้เช่นกัน

และด้วยความจำเป็น ผมก็เลยต้องใช้ดัชนีนิ้วชี้กดปุ่ม reset เครื่องก็ทำการ reset ตัวเอง พอเข้ามาถึงช่วงจังหวะของการตรวจสอบ raid harddisk ก็ปรากฎว่า เสียงดังปี๊บๆๆ ต่อเนื่องไม่หยุด และไฟสีแดงก็ปรากฎขึ้นที่ harddisk ตัวหนึ่ง เป็นการบอกว่า harddisk ตัวหนึ่งของ raid5 มีปัญหาเสียแล้ว

ผมคิดว่า เมื่อ harddisk ตัวหนึ่งเสียไป ตัวที่เหลือก็น่าจะทำงานได้ แต่ก็ไม่วายใจเสีย เพราะถ้าเกิดอะไรขึ้นมาก็คงเป็นเรื่องใหญ่เลย ท้ายที่สุดแล้วเครื่องก็ทำงานได้ตามปกติ แต่ก็มีเสียงปี๊บเตือนอยู่ตลอดเวลา ตามที่เข้าใจเจ้า harddisk ตัวที่เสียน่าจะถูก gen ขึ้นมาใหม่จากตัวที่เหลือได้ แต่ยังไม่เคยลองทำมาก่อน ถ้าจะลองก็คงต้องทำการ backup ข้อมูลที่มีอยู่ทั้งหมดก่อน ถ้าผิดพลาดก็คงต้องลง server ใหม่ทั้งหมด เรื่องยาวเลยทีนี้

ผมต้องลงอะไรใหม่บ้าง ลองนั่งคิดๆ ดู
– Mail server, IMAP, POP3
– Web server
– Database server
– DNS server
– FTP server
– SSHD
– NTP
พวก application ก็จะมี
– Webmail
– Mailing list
และสุดท้ายก็คงต้องนั่งทำ hardening อีก
ดูๆ ไปก็ไม่เยอะเท่าไหร่นะ -_-” backup แล้ว copy config เก่ามาใช้ก็น่าจะช่วยทุ่นเวลาลงไปได้อีก คิดไปคิดมาก็ดีเหมือนกันจะได้ถือโอกาส upgrade OS ซะเลย

เรื่องของ PEAR

PEAR ย่อมาจาก PHP Extension and Application Repository เป็นที่เก็บรวบรวม component ของ PHP ที่ใช้กันบ่อยๆ และมีประโยชน์ ซึ่งผมได้นำมาลองใช้งานแล้วก็ช่วยให้เขียนโปรแกรมได้สะดวกและรวดเร็วขึ้นมากๆ เลย คิดว่าคงจะหยิบขึ้นมาเขียนสักวัน

บทความแนะนำเกี่ยวกับ PEAR

Getting Started with PEAR – PHP’s Low Hanging Fruit
PEAR Website
ฟังก์ชันที่ผมใช้งานอยู่ในตอนนี้

Date()
ใช้หาวันและเวลาปัจจุบันในรูปแบบต่างๆ
$date->getDate( $format_constant = DATE_FORMAT_ISO )
(รายละเอียดการใช้งาน http://www.modem-help.co.uk/help/diary20040326.html)

Text_Password()
ใช้สำหรับสร้าง password ขึ้นมาในรูปแบบต่างๆ
http://pear.php.net/manual/en/package.text.text-password.php

PHP5 ออกมาแล้ว

PHP 5.0.0 Released! php.net ปล่อย PHP5 final release ออกมาวันที่ 13 ก.ค. ที่ผ่านมา Adam Trachtehberg ซึ่งเป็นหนึ่งในผู้แต่งหนังสือ PHP Cookbook ได้เขียนบทความเกี่ยวกับ PHP5 ไว้ที่นี่

Why PHP 5 Rocks! by Adam Trachtenberg — Adam Trachtenberg provides a quick tour around PHP 5, highlighting seven of his favorite new features. These features (including better support for OOP, bundled SQLite, iterators, and more cool stuff) will allow your PHP 5 code to be more concise, more elegant, and more flexible than ever. Adam is the author of the upcoming Upgrading to PHP 5.

ในขณะเดียวกันเดือนนี้หนังสือใหม่ของเขาชื่อ Upgrading to PHP 5 ก็จะวางแผนในเดือนก.ค.นี้ด้วย

รออีกสักพัก ผมก็คงจะทดลองใช้ PHP5 เช่นกัน ว่าแต่จะอดใจไหวมั๊ยน้อออ

PHP5 กับ MySQL bug?

หลังจากที่ผมได้ทำการติดตั้ง Apache 2.0.50 กับ PHP5 ไปแล้ว ทุกอย่างก็เหมือนจะทำงานได้ดีจนกระทั่ง ผมจะเพิ่ม extension ของ php_mysql.dll เพื่อให้ PHP สามารถติดต่อกับ MySQL ได้ ปรากฎว่าทำยังไงก็ไม่สามารถเพิ่ม mysql extension ได้ และจะเกิดข้อความ error แบบตัวอย่างข้างล่างนี้แหละ ซึ่งทำให้งง เพราะไฟล์มันก็อยู่ถูกที่แล้ว ลองกี่ทีๆ ก็เหมือนกัน

ข้อความเขียนไว้ว่า
PHP Startup: Unable to load dynamic library ‘d:program filesphpextphp_mysql.dll’ – The specified module could not be found.

เลยลองเข้าไปหาดูในเว็บ พบว่ามีคนโวยวายไว้ที่นี่เหมือนกัน http://bugs.php.net/bug.php?id=29224

ผมลองทำตามที่เขาเขียนไว้ แต่ก็ไม่ได้ผล ก็เลยลองใหม่ สิ่งที่ผมทำก็คือ
1. แก้ไข php.ini ให้เรียก module mysql ด้วยคำสั่ง
extension=php_mysql.dll

2. copy ไฟล์ libmysql.dll ไปไว้ที่ d:/windows/system32/

3. อย่าลืม restart Apache Web Server ใหม่

ปรากฎว่าคราวนี้ได้ผลแฮะ!

แล้วผมก็เจอคำตอบที่ FAQ ของ PHP ที่นี่ เจ้าตัว MySQL client libaries ไม่ได้ถูก bundle มากับ PHP5 นี่เอง นอกจากนี้ยังแนะนำให้ใช้ MySQLi แทนด้วย เพราะเนื่องจากว่าเจ้า MySQL extension ตัวที่มากับ PHP5 นั้นไม่ได้สนับสนุนฟังก์ชันต่างๆ ของ MySQL ในเวอร์ชันที่มากกว่า 4.1.0 ด้วย

งั้นผมลองเปลี่ยนมาใช้ MySQLi ดีกว่า วิธีการก็คือ
1. comment MySQL ซะ ด้วยการเติม ; ไปข้างหน้า
;extension=php_mysql.dll

2. เรียก module MySQLi ด้วยการเพิ่มคำสั่ง
extension=php_mysqli.dll

3. copy ไฟล์ libmysqli.dll ไปไว้ที่ d:/windows/system32/

4. อย่าลืม restart Apache Web Server ใหม่