msgbartop
Just another blog of mine
msgbarbottom

28 May 07 PHP-PCNTL

ช่วงนี้กำลังพัฒนาระบบให้กับที่ทำงานอย่างที่พูดถึงไปแล้วในหัวข้อก่อน เสร็จแล้วระบบนี้จะต้องสร้าง report ออกมาเป็น PDF ตอนแรกก็พยายามไปค้นๆ เจอ fpdf ซึ่งเป็นไลบรารีสำหรับสร้างเอกสารแบบ PDF โดยใช้ php แต่ลองใช้ดูสักพักก็รู้สึกว่าใช้งานยาก คือจะปรับแต่งให้ได้ดั่งใจค่อนข้างยาก (เผอิญ report ที่ต้องการ ประกอบด้วยตารางเป็นส่วนใหญ่) สุดท้ายเลยกลับมาตายรังโดยใช้ php สร้าง source สำหรับ LaTeX จากนั้นก็ใช้ pdflatex รันก็เสร็จแล้ว

ทีนี้พอทำส่วนประกอบต่างๆ เสร็จ ก็อยากจะทำเท่ห์โดยให้ pdflatex ทำงานแบบพื้นหลัง แล้วค่อยใช้ Ajax มาคอยเช็คดูว่าสร้าง pdf เสร็จหรือยัง ก็จำเป็นต้องสร้าง process ใหม่ขึ้นมาเพื่อเรียก pdflatex มาทำงาน ลองค้นดูก็พบว่า php มีกลุ่มคำสั่ง pcntl (Process Control) สำหรับควบคุม process ต่างๆ ซึ่งในนั่นจะมีคำสั่ง pcntl_fork() เอาไว้สร้าง process ลูก และ pcntl_exec(…) สำหรับกำหนดให้เรียกโปรแกรมมาทำงาน

พอใช้ก็โดนเตือนว่าไม่รู้จักคำสั่งพวกนี้ ลองหาไปหามา ก็มีคนบอกว่าต้อง enable pcntl ก่อน ใน ubuntu ไม่ได้ทำมาให้ สุดท้ายก็เลยไปพยายามสร้าง .deb ขึ้นมาใหม่เพื่อการนี้ แต่ก็ยังใช้ไม่ได้ ลองค้นดูอีกเจอว่า คำสั่งพวกนี้จะใช้ได้เฉพาะเวลาใช้ php แบบ CGI เท่านั้น ไม่สามารถใช้ได้เวลาทำงานเป็น module หนึ่งของ Apache (คิดว่าคงเพราะทำงานเป็นส่วนหนึ่งของ process ของ Apache ถ้ายอมให้ทำได้ ก็อาจจะเกิดปัญหาต่างๆ ได้ ต่างจากแบบ CGI ที่ทำงานอยู่บน process ของ php เอง)

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

Tags: ,

25 May 07 mcrypt

mcrypt เป็นโปรแกรมที่พํฒนาขึ้นเพื่อทดแทน crypt บน Unix ซึ่งใช้สำหรับเข้ารหัสไฟล์ข้อมูล พอดีตอนนี้ต้องสำรองข้อมูลจาก mysql ไปไว้ที่อื่น เลยอยากเข้ารหัสด้วย เพื่อเพิ่มความปลอดภัย ก็เลยเขียน shell script ขึ้นมาอันนึง ให้เรียก mysqldump จากนั้นก็เรียก mcrypt มาเข้ารหัส แล้วค่อยส่งไปเก็บไว้ที่อีกเครื่องหนึ่ง

วิธีใช้ mcrypt ก็ไม่ยาก เพียงแค่กำหนดขั้นตอนวิธีที่จะใช้เข้ารหัส รวมทั้งวิธีระบุกุญแจที่จะใช้ เช่น

mcrypt -a des --keymode pkdes [filename]

โปรแกรมก็จะรอให้กำหนดกุญแจที่จะใช้ ถ้ากำหนดเรียบร้อยแล้ว ก็จะเข้ารหัสให้ และได้ไฟล์ใหม่โดยเติม .nc เข้าไปข้างท้าย วิธีนี้จะใช้สำหรับ interactive เท่านั้น ถ้าเป็นกรณีที่ต้องการใช้ใน shell script ก็ต้องกำหนดให้ไปเอากุญแจมาจากไฟล์ เช่น

mcrypt -a des --keymode pkdes -f [key-file] [filename]

แต่ปัญหาที่พบก็คือขั้นตอนวิธีเข้ารหัส แต่ละอันจะมีข้อกำหนดเรื่องความยาวสูงสุดของกุญแจ ถ้ากำหนดยาวเกินไปก็จะเกิด error ขึ้น เช่น DES จะรองรับแค่ 8 ตัวอักษรเท่านั้น จึงต้องดูเรื่องนี้ประกอบด้วย โดยรายละเอียดจะมีอยู่ที่ –list-keymodes

Tags: