ข้อแตกต่างระหว่าง exec, shell_exec, system และ passthru

คำสั่ง exec(), shell_exec(), system() และ passthru() ของ PHP ทำหน้าที่ในการสั่งให้โปรแกรมภายนอก ทำงานได้เหมือนๆกัน แต่ข้อแตกต่างของแต่ละคำสั่งมีอยู่เล็กน้อยครับ

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

ข้อมูลที่ละเอียกว่านี้ผมแนะนำให้อ่านที่เว็บของ PHP นะครับและโดยทั่วไปแล้ว Server มักปิดการใช้งานฟังก์ชั่นในกลุ่มนี้ เนื่องจากฟังก์ชั่นเหล่านี้สามารถประมวลผลไฟล์ที่อาจก่อให้เกิดปัญหากับ Server ได้อย่างร้ายแรง

คุณสามารถดูว่าฟังก์ชั่นเหล่านี้ถูกปิดการทำงานหรือไม่ โดยดูที่ disable_functions ใน phpinfo() ครับ
ผู้เขียน goragod โพสต์เมื่อ 19 พ.ย. 2553 เปิดดู 17,192 ป้ายกำกับ PHP
^