ข้อแตกต่างระหว่าง exec, shell_exec, system และ passthru
คำสั่ง exec(), shell_exec(), system() และ passthru() ของ PHP ทำหน้าที่ในการสั่งให้โปรแกรมภายนอก ทำงานได้เหมือนๆกัน แต่ข้อแตกต่างของแต่ละคำสั่งมีอยู่เล็กน้อยครับ
ข้อมูลที่ละเอียกว่านี้ผมแนะนำให้อ่านที่เว็บของ PHP นะครับและโดยทั่วไปแล้ว Server มักปิดการใช้งานฟังก์ชั่นในกลุ่มนี้ เนื่องจากฟังก์ชั่นเหล่านี้สามารถประมวลผลไฟล์ที่อาจก่อให้เกิดปัญหากับ Server ได้อย่างร้ายแรง
คุณสามารถดูว่าฟังก์ชั่นเหล่านี้ถูกปิดการทำงานหรือไม่ โดยดูที่
- exec(): ประมวลผลคำสั่งและส่งกลับข้อความเฉพาะบรรทัดสุดท้าย ที่เป็นผลลัพท์จากแอพพลิเคชั่นที่เรียกใช้ในรูปแบบข้อความ
- shell_exec(): ประมวลผลคำสั่งและส่งกลับข้อความทั้งหมด ที่เป็นผลลัพท์จากแอพพลิเคชั่นที่เรียกใช้ในรูปแบบข้อความ ยกตัวอย่างเช่น การเรียกใช้โปรแกรมภายนอก เพื่ออ่านไฟล์ข้อมูล ที่ PHP ไม่รองรับเป็นต้น
- system(): ประมวลผลคำสั่งและส่งกลับข้อความเฉพาะบรรทัดสุดท้าย ที่เป็นผลลัพท์จากแอพพลิเคชั่นที่เรียกใช้ในรูปแบบข้อความ และ พยายามจะล้างข้อมูลที่ส่งกลับ หลังจากส่งค่ากลับเรียบร้อยแล้วในแต่ละบรรทัด
- passthru(): ฟังก์ชั่นนี้จะทำงานคล้ายๆกับ exec() ต่างกันที่จะไม่ส่งค่ากลับมายัง output แต่จะส่งข้อมูลกลับไปยัง Browser โดยตรงในรูปแบบไบนารี่ ซึ่งเราสามารถใช้ประโยชน์ได้เช่น การเรียกใช้โปรแกรมภายนอกเพื่อสร้างรูปภาพ และโปรแกรมส่งกลับรูปภาพเพื่อแสดงผลบน Browser ได้โดยตรง
ข้อมูลที่ละเอียกว่านี้ผมแนะนำให้อ่านที่เว็บของ PHP นะครับและโดยทั่วไปแล้ว Server มักปิดการใช้งานฟังก์ชั่นในกลุ่มนี้ เนื่องจากฟังก์ชั่นเหล่านี้สามารถประมวลผลไฟล์ที่อาจก่อให้เกิดปัญหากับ Server ได้อย่างร้ายแรง
คุณสามารถดูว่าฟังก์ชั่นเหล่านี้ถูกปิดการทำงานหรือไม่ โดยดูที่
disable_functions ใน phpinfo() ครับ