PHP Fatal error: Class ‘DOMDocument’ not found

PHP Fatal error:  Class ‘DOMDocument’ not found

วันนี้ลอง RoundCube พบว่ามันไม่แสดงเนื้ออีเมล ถ้าคลิกไปบนอีเมลจะมีคำว่า “Loading…” ขึ้นค้างอยู่และทำอะไรต่อไม่ได้เลย ต้องกด refresh อย่างเดียว กลับไปเช็คใน IMAP ก็แสดงเนื้ออีเมลครบถ้วนสมบูรณ์ดีเลยเพ่งประเด็นไปที่ตัว PHP หรือเว็บเซิร์ฟเวอร์ พอเข้าไปดูใน error log ของเว็บเซิร์ฟเวอร์ก็พบ error ที่น่าจะเป็นสาเหตุของปัญหานี้ ลอง Google ดูพบว่าไม่ได้ลงแพคเกจ php-xml พอทำการติดตั้ง php-xml ก็แก้ปัญหานี้ได้

[08-Sep-2014 20:14:06] PHP Fatal error: Class 'DOMDocument' not found in /opt/roundcubemail-x.x.x/program/lib/Roundcube/rcube_washtml.php on line xxx

CakePHP กับการติดต่อฐานข้อมูลด้วย Unicode

blog ช่วงหลังๆคงได้เขียนเกี่ยวกับ CakePHP กันเยอะหน่อย เพราะงานในช่วงนี้ต้องกลับมาใช้ PHP ถ้าใครเข้าใจ MVC ดีอยู่แล้วผมแนะนำตัวนี้เลย ไม่รู้จะพอๆกับ Rails หรือเปล่า แต่เท่าที่ลองใช้ก็พอใจครับ

มาเข้าเรื่องกัน ในฐานข้อมูลอย่าง MySQL นั้นเราสามารถกำหนด default character set ได้ ซึ่งถ้าเราไม่บอกมันว่าเราจะคุยกับฐานข้อมูลด้วย character encoding ตัวไหน มันก็จะใช้ค่า default นั้นล่ะ ปัญหามีอยู่ว่า MySQL ที่ลงมาให้ในแต่ละ Linux Distribution กำหนด default character encoding มาไม่เหมือนกัน อย่าง Gentoo 2008.0 นี่ใช้ UTF-8 ส่วน Debian Lenny ใช้ Latin

ใน CakePHP เราสามารถกำหนดค่า encoding ได้ว่าจะใช้แบบไหน ถ้าเราไม่กำหนดมันก็จะใช้ค่า default ของระบบ เดิมผมทดสอบระบบบน Gentoo ซึ่งไม่ได้กำหนดค่านี้ลงไป ข้อมูลภาษาไทยที่ query ก็ออกมาเรียบร้อยดี แต่พอ deploy ไปบน Debian เท่านั้นล่ะ กลายเป็นเครื่องหมาย ? หมดเลย มานั่งเปิด manual ดูอีกรอบเค้าให้ระบุลงไปใน config file app/config/database.php ด้วยครับ เพื่อความปลอดภัย

var $default = array(
    'driver' => 'mysql',
    'persistent' => false,
    'host' =>  'localhost',
    'login' => 'myuser',
    'password' => 'mypass',
    'database' => 'mydb',
    'prefix' => '',
    'encoding' => 'utf8',
);

<? or <?php

วันนี้นั่ง debug โปรแกรมที่เขียนด้วย PHP โดยใช้ CakePHP เป็น framework ผมไปเจอปัญหาว่าโปรแกรมที่เขียนมาหน้าขาววอก ไม่บอก error อะไรเลย ลองพยายามเปิด debug mode ให้เป็น debug แล้วก็ยังไม่เห็น error ทั้งจากหน้าจอและ log file ปัญหานี้เคยแก้มาแล้วทีนึงใช้เวลานานพอสมควร แต่คิดว่าคงไม่ต้องทำอะไรแล้วเลยไม่จดไว้ ผลก็เป็นแบบนี้ล่ะ เสียเวลาหลายชั่วโมงนั่งหา bug มี hint อยู่นิดนึงตรงที่ ในหน้าขาวๆนั้นเมื่อ view source  ดูจะมี code php ปรากฎอยู่ ดังนี้

<?=$content_for_layout?>

ไปนึกออกตรงที่ ใน code มีการเขียน code ภายใต้ tag แบบนี้เอาไว้ <? — codes — ?>   ซึ่ง default config ของ wamp ไม่ยอม แก้ไขได้โดยไปเปิด config ใน php.ini ตรง short_open_tag โดยจากเดิมเป็น Off ให้เป็น On แล้วก็สั่ง reload apache เป็นใช้ได้