Trong PHP, exec(), system(), và passthru() là ba hàm được sử dụng để thực thi các lệnh hệ thống từ mã PHP. Tuy nhiên, chúng có những cách hoạt động và mục đích khác nhau. Dưới đây là sự khác biệt giữa chúng:

1. exec()

  • Chức năng: Thực thi một lệnh hệ thống và trả về kết quả của lệnh đó.
  • Giá trị trả về: Trả về giá trị cuối cùng của lệnh (mã trạng thái), cho biết liệu lệnh có thành công hay không. Bạn cũng có thể lấy kết quả của lệnh bằng cách sử dụng tham số thứ hai.
  • Sử dụng: Thích hợp khi bạn cần thực hiện một lệnh và chỉ cần xử lý đầu ra mà không cần in ra ngay lập tức.

Ví dụ:

$output = [];
$return_var = 0;
exec('ls -l', $output, $return_var);

echo "Mã trạng thái: $return_varn";
echo "Kết quả:n" . implode("n", $output);

2. system()

  • Chức năng: Thực thi một lệnh hệ thống và in kết quả ra trực tiếp.
  • Giá trị trả về: Trả về giá trị cuối cùng của lệnh (mã trạng thái) và in đầu ra ra màn hình (standard output).
  • Sử dụng: Thích hợp khi bạn muốn hiển thị đầu ra của lệnh ngay lập tức.

Ví dụ:

$return_var = 0;
$result = system('ls -l', $return_var);

echo "Mã trạng thái: $return_varn";

3. passthru()

  • Chức năng: Thực thi một lệnh hệ thống và in kết quả ra trực tiếp mà không xử lý nó như một chuỗi (dành cho các lệnh xuất ra nhị phân hoặc có định dạng phức tạp).
  • Giá trị trả về: Trả về giá trị cuối cùng của lệnh (mã trạng thái) và in đầu ra ra màn hình.
  • Sử dụng: Thích hợp khi bạn cần hiển thị đầu ra nhị phân, chẳng hạn như hình ảnh hoặc âm thanh.

Ví dụ:

$return_var = 0;
passthru('ls -l', $return_var);

echo "Mã trạng thái: $return_varn";

Tóm tắt

HàmĐầu raGiá trị trả vềSử dụng tốt nhất
exec()Lưu vào biếnMã trạng tháiKhi cần lấy kết quả mà không cần in ngay lập tức
system()In ra màn hìnhMã trạng tháiKhi muốn hiển thị đầu ra ngay lập tức
passthru()In ra màn hìnhMã trạng tháiKhi hiển thị đầu ra nhị phân hoặc phức tạp

Kết luận

Mỗi hàm có ưu điểm và cách sử dụng riêng. Việc lựa chọn hàm nào phụ thuộc vào nhu cầu của bạn trong việc xử lý và hiển thị đầu ra từ lệnh hệ thống.