Apa perbedaannya?
Apakah ada situasi atau alasan khusus untuk setiap fungsi? Jika ya, dapatkah Anda memberikan beberapa contoh situasi tersebut?
PHP.net mengatakan bahwa mereka digunakan untuk menjalankan program eksternal. lihat referensi Dari contoh yang saya lihat, saya tidak melihat perbedaan yang jelas.
Jika saya hanya menjalankan skrip (bash atau python), fungsi mana yang Anda rekomendasikan untuk saya gunakan?
proc_open()
danpopen()
, keduanya memungkinkan tingkat kontrol yang lebih tinggi atas proses melahirkan.Jawaban:
Mereka memiliki tujuan yang sedikit berbeda.
exec()
adalah untuk memanggil perintah sistem, dan mungkin berurusan dengan output sendiri.system()
adalah untuk menjalankan perintah sistem dan segera menampilkan output - mungkin teks.passthru()
adalah untuk mengeksekusi perintah sistem yang Anda inginkan pengembalian mentah - mungkin sesuatu biner.Bagaimanapun, saya sarankan Anda tidak menggunakan salah satunya. Mereka semua menghasilkan kode yang sangat tidak dapat diport.
sumber
izkata@izein:~$ dir -bash: dir: command not found
- FreeBSDexec
,system
,passthru
. Kode PHP bergantung pada lingkungan tempat ia beroperasi, dan banyak bug keamanan karena tidak mempertimbangkan hal ini. Berikut adalah contoh cepat: stackoverflow.com/questions/3003145/…Seperti diambil dari http://php.net/ && Chipmunkninja :
sumber
Jawaban sebelumnya sepertinya semuanya sedikit membingungkan atau tidak lengkap, jadi inilah tabel perbedaannya ...
Hal-hal misc lainnya yang perlu diperhatikan:
sumber
include
dan temanItu benar-benar semua bermuara pada bagaimana Anda ingin menangani output yang mungkin dikembalikan oleh perintah dan apakah Anda ingin skrip PHP Anda menunggu program callee selesai atau tidak.
exec
mengeksekusi perintah dan meneruskan output ke pemanggil (atau mengembalikannya dalam variabel opsional).passthru
mirip denganexec()
fungsi dalam menjalankan perintah. Fungsi ini harus digunakan sebagai penggantiexec()
atausystem()
ketika output dari perintah Unix adalah data biner yang perlu diteruskan langsung kembali ke browser.system
mengeksekusi program eksternal dan menampilkan output, tetapi hanya baris terakhir.Jika Anda perlu menjalankan perintah dan memiliki semua data dari perintah yang dikirimkan langsung kembali tanpa gangguan, gunakan
passthru()
fungsinya.sumber
Jika Anda menjalankan skrip PHP dari baris perintah,
passthru()
memiliki satu manfaat besar. Ini akan membiarkan Anda menjalankan skrip / program-program sepertivim
,dialog
, dll, membiarkan program-program kontrol menangani dan kembali ke naskah Anda hanya ketika mereka selesai.Jika Anda menggunakan
system()
atauexec()
menjalankan skrip / program tersebut, itu tidak akan berfungsi.Gotcha: Untuk beberapa alasan, Anda tidak dapat mengeksekusi
less
denganpassthru()
PHP.sumber