Một vài nét riêng mà không được đề cập đến ở đây:
- Với exec(), bạn có thể vượt qua một biến param tùy chọn mà sẽ nhận được một mảng của dòng đầu ra. Trong một số trường hợp, điều này có thể tiết kiệm thời gian, đặc biệt nếu đầu ra của các lệnh đã được bảng.
Hãy so sánh:
exec('ls', $out);
var_dump($out);
// Look an array
$out = shell_exec('ls');
var_dump($out);
// Look -- a string with newlines in it
Ngược lại, nếu đầu ra của lệnh là xml hoặc json, sau đó có mỗi dòng như một phần của một mảng không phải là những gì bạn muốn, vì bạn sẽ cần phải đăng -quá trình đầu vào vào một số hình thức khác, vì vậy trong trường hợp đó sử dụng shell_exec.
Cũng đáng để chỉ ra rằng shell_exec là bí danh cho toán tử ngược, đối với những người được sử dụng để * nix.
$out = `ls`;
var_dump($out);
exec cũng hỗ trợ một tham số bổ sung mà sẽ cung cấp mã trở về từ lệnh thực hiện:
exec('ls', $out, $status);
if (0 === $status) {
var_dump($out);
} else {
echo "Command failed with status: $status";
}
Như đã đề cập trong trang hướng dẫn shell_exec, khi bạn thực sự cần một mã trở về từ lệnh là thực hiện, bạn không có lựa chọn nào khác ngoài việc sử dụng exec.
ví dụ tốt để xem sự khác biệt là thử các lệnh sau: 'date',' whoami', 'ifconfig',' netstat'. –
Ngoài ra còn có các chức năng khác: system(), passthru()… xem [câu hỏi liên quan] này (https://stackoverflow.com/questions/732832/php-exec-vs-system-vs-passthru), và đặc biệt [câu trả lời này] (https://stackoverflow.com/questions/732832/php-exec-vs-system-vs-passthru#21016100). –
Có thể trùng lặp của [PHP exec() vs system() vs passthru()] (https://stackoverflow.com/questions/732832/php-exec-vs-system-vs-passthru) – jww