Saya berjuang untuk memahami perbedaan antara shell_exec()
dan exec()
...
Saya selalu terbiasa exec()
menjalankan perintah sisi server, kapan saya akan gunakan shell_exec()
?
Apakah shell_exec()
hanya singkatan untuk exec()
? Tampaknya menjadi hal yang sama dengan parameter yang lebih sedikit.
date
,whoami
,ifconfig
,netstat
.Jawaban:
shell_exec
mengembalikan semua aliran output sebagai string.exec
mengembalikan baris terakhir dari output secara default, tetapi dapat memberikan semua output sebagai array yang ditentukan sebagai parameter kedua.Lihat
sumber
exec()
[melakukan] segalanyashell_exec()
[bisa,] dan banyak lagi :) "Inilah perbedaannya. Perhatikan baris baru di bagian akhir.
Perhatikan bahwa penggunaan operator backtick identik dengan
shell_exec()
.Pembaruan: Saya benar-benar harus menjelaskan yang terakhir. Melihat jawaban ini bertahun-tahun kemudian bahkan saya tidak tahu mengapa jawaban itu kosong! Daniel menjelaskannya di atas - itu karena
exec
hanya mengembalikan baris terakhir, danifconfig
baris terakhir kebetulan kosong.sumber
2>&1
ke akhir perintah Anda untuk mengarahkan STDERR ke STDOUT jika Anda menggunakan mesin linux.shell_exec
- Jalankan perintah via shell dan kembalikan output lengkap sebagai stringexec
- Jalankan program eksternal.Perbedaannya adalah bahwa dengan
shell_exec
Anda mendapatkan output sebagai nilai balik.sumber
exec
mengembalikan baris terakhir dari output. Jika diinginkan, Anda dapat secara opsional mengirimkan array sebagai parameter kedua untuk menangkap output lengkap, dan integer sebagai parameter ketiga untuk menangkap nilai kembali dari perintah shell, yang dapat digunakan untuk pengecekan kesalahan. Kelemahan terbesarshell_exec
adalah bahwa ia mengembalikan nol jika perintah gagal ATAU jika tidak menghasilkan output, sehingga nilai kembalinya tidak dapat digunakan untuk memeriksa kesalahan.Beberapa perbedaan yang tidak disentuh di sini:
Membandingkan:
Sebaliknya, jika output dari perintah adalah xml atau json, maka memiliki setiap baris sebagai bagian dari array bukanlah apa yang Anda inginkan, karena Anda harus memposting-proses input ke dalam bentuk lain, jadi dalam hal ini gunakan shell_exec .
Perlu juga disebutkan bahwa shell_exec adalah alias untuk operator backtic, bagi mereka yang terbiasa * nix.
exec juga mendukung parameter tambahan yang akan memberikan kode kembali dari perintah yang dijalankan:
Seperti dicatat dalam halaman manual shell_exec, ketika Anda benar-benar membutuhkan kode kembali dari perintah yang dieksekusi, Anda tidak punya pilihan selain menggunakan exec.
sumber
exec
memungkinkan Anda mendapatkan kode pengembalian perintah (melalui&$return_var
parameter), sementarashell_exec
tidak memberikan cara untuk mendapatkannya.