วันนี้จะมาพูดถึงเรื่องปัญหาเส้นผมบังภูเขาที่ผมไม่คิดว่าจะติดเป็นวันเลยจริงๆ เกี่ยวกับ linux ซึ่งผมนั้นได้มีโอกาสมาใช้ linux ubuntu เนื่องจากชีวิตไม่เคยที่จะได้ command line เลยจึงทำให้น่าสนใจมาก และหลังจากได้เขียนดูก็รู้สึกว่าเรานั้นเท่มากทีเดียวนะฮ๊าฟฟฟฟฟฟ ( เสียงจอร์นจาก ihere.tv ) เพราะว่าผมมีความรู้สึกว่าใครที่เขียน command line มันดูเท่ไม่ต้องจับเมาส์แต่สั่งการ คอมพิวเตอร์ได้เร็วกว่า คนที่ใช้เม้าส์ซะอีก อ่า… อรัมพบทมายาวเลยคลิกอ่านต่อให้ไวเลยจะได้รู้ว่าปัญหาอะไร อะฮิๆๆๆๆอย่างที่กล่าวไปในข้างต้นว่า และจั่วหัว title อย่างนั้นเพราะว่าผมหาคำตอบไม่เจอ หรือว่าด้วยสกิลการค้นหา google ของผมนั้น ติดลบหรือเปล่าจึงทำให้ไม่สามารถหาคำตอบว่าทำม๊ายยยยยยยย ทำไม มันถึงสั่ง ผ่าน exec ไม่ได้ อ่ะไหนๆก็กริ่นมาแล้วอธิบายซักหน่อย
function exec นั้นคือการสั่งเป็นคำสั่งให้รันโปรแกรมภายนอก ซึ่งหลายๆคนนั้นที่เป็นมือใหม่นั้นยังไม่ได้แตะต้องมากนักเช่นผม : ) แต่เมื่อชะตากรรมลิขิตให้เราแล้วนั้นไซร์ก็จงอย่ากลัวที่จะเรียนรู้มันซะ ถ้าคุณเป็นคนที่เคยเขียน command line มาก่อนแล้วนั้นเรื่องนี้อาจจะหมู อู๊ดๆ เลยก็เป็นได้ ตัวอย่างไม่จัดให้หรอก เพราะไม่ได้เขียน how to นะจ๊ะจะมาอธิบายปัญหาที่ติดจ๊ะ อ่ะฮิๆๆๆ #petdo ไหมล่ะ
แล้วเจ้า exec มันมาเกี่ยวอะไรกับปัญหานี้ คืออย่างนี้ครับผมต้องการใช้คำสั่ง convert และ composite ซึ่งสองตัวนี้เป็น command ใน linux ซึ่งสั่งโปรแกรม imagemagick อยากรู้จัดเต็มที่คลิก ทีนี้นั้น ถ้าปกติเราๆท่านๆที่ใช้งานก็สั่งผ่าน ternimal ( ฮู้ววววว อย่างหล่อ ! ) แต่ทีนี้้ต้องการให้หล่อกว่านั้นคือ user ที่เข้าเว็บเราสามารถ upload รูปภาพแล้วเราทำการตัด จัด วาง crop หรือย่อขยาย โดยภาพไม่แตกและลดขนาด เราอาจจะจำเป็นต้องใช้เจ้าสิ่งนี้ ซึ่งโปรเจ็คของผมนั้นต้องการ resize รูปถ้ารูปมันใหญ่ก็จัดให้มันเล็กลงหน่อยก็เท่านั้น
แต่ปัญหาที่เจอมันไม่เท่านั้นคือ ผมสามารถรันผ่าน terminal ได้อย่างหล่อมาก แต่ดันรันใช้ php ไฟล์ไม่ออกอะไรมาเลย ซึ่งความซวยมันอยู่ตรงนี้แหละ รันไงก็ไม่มีรูปออกมาติดเป็นวันหาวิธีแก้ต่างๆนาๆ ตอนแรกเข้าใจว่าคำสั่งพลาดแต่ก็ไม่พลาดเพราะลองเอาคำสั่งเดียวกันไปใส่ที่ terminal ก็รันผ่าน อ้าวเฮ้ย ! ยังไงรันนู้นผ่านแต่นี่ไม่ผ่าน ก็คิดต่อว่าสงสัยมันต้อง set chmod ที่ไฟล์ php ซึ่งก็ยังไม่ได้อยู่ดี เลยคิดไปว่าสงสัย เราคงเรียก path ของตัว convert ไม่ถูกลองทุกอย่างเท่าที่คิดได้จนในที่สุด…ก็ไม่ได้อยู่ดี = =’
และแล้ว… ผมก็ต้องใช้ตัวช่วยคือ เจ้านายผมเอง เขามาบอกว่าเนี้ยคุณลองเช็คจาก error log ของ apache สิว่ามันฟ้องไรบ้าง ไอ้เราก็งงสิ ยังไม่เคยใช้เจ้านายเลยจัดเต็มทำให้ดูเราต้องไปดูที่ไฟล์ default ซึ่งมันอยู่ที่ etc/apache2/sites-available ซึ่งในนี้จะพบไฟล์ default ให้เราเปิดไฟล์ด้วยคำสั่ง sudo gedit default เสร็จแล้วก็ดูว่ามันเก็บ log error ไว้ที่ไหนแล้วจัดการ copy ไปใส่ในคำสั่งนี้คือ sudo tail -f ตาม path ที่เก็บไฟล์ error log แล้วผมก็พบกับคำตอบที่ทำให้ผมเซง…คือ เมื่อผมรัน exec จากไฟล์เพื่อทำการ resize รูปนั้น folder ที่เก็บรูปมันดันติด permission เซงเลยครับถ้าอ่านมาแล้วไม่เข้าใจผมจะอธิบายง่ายๆคืออย่างนี้ครับ
ผมทำการสั่งให้ resize จากที่คุณๆ upload มานั่นแหละเสร็จแล้วเอาไปเก็บที่ folder ชื่อ image_uploads แต่เจ้า folder เจ้ากรรมตัวนี้มันดั๊นนนนนน ติดค่า permission จึงไม่สามารถทำการเขียนไฟล์ที่ เป็นรูปภาพที่เราทำการ resize แล้วนั้นลงไปได้แค่นั้น !!!
ดังนั้นจึงเป็นแรงบันดาลใจว่าผมควรมาเขียนเตือนตัวผมเองและคนที่พลาดแบบผมด้วยครับหวังว่าที่อ่านมาจะได้สาระไม่มากก็น้อย แต่คิดว่าน่าจะเป็นอย่างหลังนะ = =’
ปล. ทำตั้งนานเจ้านายมาที ตอบโจทย์ เลยเหอะๆ
ถ้าคุณชอบบทความในเว็บนี้ และอยากสนับสนุนเรา เพียงแค่คุณสมัครรับข่าวสารด้านล่างจะได้รับสิทธิ์พิเศษก่อนใคร เราสัญญาว่าจะส่งบทความที่เป็นประโยชน์ต่อคุณอย่างแน่นอนครับ