เวิร์ดเพรสจอดำ แก้ไขอย่างไร

ความเป็นมา .. มีอยู่วันหนึ่ง ในระหว่างเสนอผลการสำรวจคนไทยให้นิสิตของผมได้รู้ถึงสถานการณ์ ว่าทักษะที่แรงงานไทยขาดแคลนมากที่สุดคืออะไร จากข้อมูลที่เคยอ่านพบจากเอกสารในหัวข้อ Productivity and investment climate survey ซึ่ง Boonlert Theeratrakul บอกว่า คนทำงานไทยขาดทักษะสำคัญ 3 เรื่องคือ 1) ภาษาอังกฤษ 2) ทักษะด้านไอที และ 3) ทักษะเชิงตัวเลข จึงจะเปิดเอกสารที่เคยโพสต์ไว้ในบล็อก “IT Blog เทคโนโลยีสารสนเทศ” ซึ่งใช้ระบบ wordpress ให้บริการ Blog เมื่อคลิกเปิด post ตามลิงค์ที่แชร์ไว้ พบว่า จอดำ (Black Screen) บนทั้ง 2 Blog sites ที่เปิดให้บริการไว้

3 เรื่องที่คนไทยขาดแคลน

หลังการสืบค้น .. เข้าไปดูในระบบ administrator พบ fatal error จากโค้ด /legacy /class-jetpack-signature . php on line 218 และแจ้งว่า Call to undefined function ctype_digit() ซึ่งปัญหานี้เกิดขึ้นกับ Blog site ทั้ง 2 ระบบบน server ตัวนี้ เมื่อนึกย้อนไปว่าก่อนหน้านี้เกิดอะไรขึ้นบ้าง พบว่า ผมได้ทำการ upgrade จากรุ่นของ php 7.3 เป็น 7.4 นั่นคือ 7.4 บนเครื่องบริการนี้ ไม่สนับสนุน ctype_digit จึงต้องหาวิธีแก้ไขต่อไป

วิธีแก้ปัญหาที่ 1
พบคำแนะนำให้ลบ folder jetpack ออกจาก plugins แล้วใช้ ftp upload เข้ามาใหม่ ซึ่งคำแนะนำนี้ใช้ได้กับ jetpack ที่หยุดการทำงาน แล้วไม่สามารถสั่ง Activate ขึ้นมาได้ ซึ่งเป็นปัญหาที่เกิดขึ้นกับ shared server ที่เป็น windows ตัวหนึ่งของผม ที่แก้ไขได้ด้วยการอัพโหลดผ่าน FTP แทนการติดตั้งผ่านระบบ admin ของ wordpress โดยตรง แต่กรณี ctype_digit นี้ ไม่สามารถแก้ไขด้วยการเปลี่ยนแฟ้มบนเครื่องบริการ

วิธีแก้ปัญหาที่ 2
พบคำแนะนำให้แก้ไข php.ini โดยมีขั้นตอนดังนี้

  1. เพิ่ม extension=ctype.so เข้า php.ini
  2. สั่ง Activate : jetpack ที่ติดตั้งอยู่ ถ้ามีปัญหา ให้ลบ folder แล้วอัพโหลดใหม่ หรือเปลี่ยนชื่อเป็นชื่ออื่น ซึ่งผมเลือกการเปลี่ยนชื่อ ทำให้เกิดการตรวจสอบในรายการ plugins ใหม่
  3. เมื่อใช้งาน jetpack ได้แล้ว อาจต้อง setup ใหม่ โดยเชื่อมกับ wordpress.com แล้วคลิก Approve
  4. บริการเบื้องต้น คือ Jetpack Stats ซึ่งยังไม่มีค่าใช้จ่าย

ปัญหานี้ เกิดจาก server ที่ให้บริการ webhosting ได้กำหนดค่า default ของ php 7.4 ว่า disabled ctype เป็นแบบ default ส่วนรุ่น 7.3 ไม่พบปัญหา เพราะ enabled เป็น default จึงต้องแก้ไขด้วยการเข้าไปแก้ไข php.ini เพื่อสั่งเรียก extension ที่ชื่อ ctype

ctype_digit function in php 7.4

เปลี่ยน php version ใน apache handlers

apache handlers

20220202 วันนี้มีเรื่องเล่า กรณีปัญหาจาก thainame . net ที่เกิดขึ้นเมื่อหลายวันก่อน คือ wordpress บน hosting ของผมตัวหนึ่ง down ไปพักหนึ่ง เพราะมีการย้ายเครื่องบริการ ตามแผน Maintainance ของผู้ให้บริการที่ผมไปเช่าเค้าอยู่ ซึ่งเข้าใจในสิ่งที่เค้าต้องทำ ต่อมามีโอกาสเข้าไปตรวจสอบเพื่อแก้ไข ได้ควานหาปัญหาจาก code ของ wordpress ว่าปัญหาเกิดจากจุดใดอยู่พักหนึ่ง หาว่าทำไมเปิด blog ขึ้นมาแล้ว ถึง redirect ไป url ที่มีชื่อ host ที่ผมไม่ได้กำหนดขึ้นมาแทนที่ ปัญหาอยู่ตรงที่ ระบบบล็อกรีไดเร็คไปยังที่อยู่ใหม่ที่ผิดพลาด ต่อมา พบตำแหน่งใน code จึงรู้ต้นเหตุว่าในระบบฐานข้อมูล ในตาราง options พบระเบียนที่เก็บข้อมูล WordPress Address (URL) และ Site Address (URL) มีค่าเปลี่ยนไป จึงใช้ phpmyadmin เข้าไปเปลี่ยนกลับให้ถูกต้อง ก็พบว่า blog กลับมาใช้งานได้ปกติ

แล้วตัวผมเองก็มีความต้องการใหม่ขึ้นมา คือ อยากอัพเกรด theme ใหม่ แต่ระบบเตือนว่ารุ่นของ php เป็น 5.6 ซึ่งเก่าแล้ว เมื่อเข้าไปเปลี่ยนเป็น php 7.4 ผ่าน php selector ใน cpanel ซึ่งเป็นตัวเลือกสูงสุดที่มีให้ใช้งานได้ แต่ถ้าจะใช้ php 8.1 ต้องเข้า upgrade แบบเสียค่าใช้จ่าย ผลการเปลี่ยนแปลงใน cpanel ไม่พบปัญหา และใน control panel แสดงเป็น 7.4 ตามที่เปลี่ยนไป แต่ปัญหาอยู่ตรงที่ เปลี่ยนเป็น 7.4 แล้วแต่ phpinfo ยังแสดง php 5.6 อยู่ นั่นหมายความว่า ผมเขียน code ด้วย php และทำงานได้ แต่ตัวแปลภาษายังเป็นรุ่น 5.6 เช่นเดิม นั่งทำใจค้นข้อมูลอยู่เกือบสัปดาห์หนึ่ง มีคนบ่นใน community ของผู้ให้บริการเหมือนผม แต่ไม่มีคำตอบที่น่าพึงพอใจ แล้ววันหนึ่งตอนที่สมองโล่งหน่อย ก็เข้าไปตรวจใน apache handlers เพียงไม่นาน พบว่า เรากำหนดได้ว่าสกุล php จะใช้ application ใด แล้วผมก็เปลี่ยนจาก 5.6 เป็น 7.4 ณ ตำแหน่งนี้ สรุปว่า ตรวจสอบด้วย phpinfo และเขียน code php พบว่าทำงานด้วย 7.4 ตามที่ต้องการแล้ว

site address

php code สำหรับติดต่อ ldap server

22 ก.ย.54 มีโอกาสเรียนรู้การเขียนโปรแกรมด้วยภาษา PHP ติดต่อกับ LDAP Server โดยมี engineer ติดตั้ง server ตัวนี้ไว้ แล้วผมมีหน้าที่เข้าไปใช้งาน ก็คิดว่าจะใช้ php (ใช้ phpinfo ตรวจแล้วพบว่า php สามารถใช้ ldap ได้) เข้าไปอ่านข้อมูลผู้ใช้ เพื่อทำ authentication ตรวจผู้ใช้งานระบบ และ code ชุดนี้เป็นตัวอย่างที่ผมใช้ติดต่อกับ ldap server การติดต่อนั้นอาจใช้ browser

พิมพ์ ldap://www.domain.com:389
/uid=BURIN_R,ou=CLERK,ou=OFFICE1,dc=domain,dc=com

ก็จะเปิดด้วยโปรแกรม Windows Contact ขึ้นมาอัตโนมัติ

<?
$host = “ldap://www.domain.com“;
$baseDn1 = ‘cn=Manager,dc=domain,dc=com‘;
$baseDn2 = ‘uid=BURIN_R,ou=CLERK,ou=OFFICE1,dc=domain,dc=com‘;
$password = “your password“;
$ldap = ldap_connect($host);
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
$b = ldap_bind($ldap,$baseDn1,$password) or die(“bind died”);
echo “<pre>bind :”;
if($b) echo “pass”; else echo “fail”;
$result = ldap_search($ldap, $baseDn2,”(cn=*)”);
$rec = ldap_get_entries($ldap,$result);
echo ldap_count_entries($ldap,$result);
echo $rec[0][“cn”][0];
echo $rec[0][“userpassword”][0];
echo $rec[0][0][0];
print_r($rec);
ldap_unbind($ldap);
?>