Fungsi passthru() PHP: Eksekusi Perintah Sistem dan Output Langsung

Definisi dan Fungsi passthru()

passthru() adalah fungsi bawaan PHP yang digunakan untuk mengeksekusi perintah eksternal pada sistem operasi server dan mengirimkan output mentah (raw output) secara langsung ke browser atau output buffer. Berbeda dengan exec() yang menyimpan output ke dalam array, passthru() sangat efisien untuk menjalankan perintah yang menghasilkan data biner atau teks panjang yang perlu ditampilkan segera, seperti gambar atau stream data.

Sintaks Dasar

void passthru ( string $command [, int &$return_var ] )
  • $command: Perintah sistem yang ingin dijalankan.
  • $return_var: (Opsional) Variabel untuk menyimpan status kode keluar (exit status) dari perintah tersebut.

Tabel Perbandingan Fungsi Eksekusi Sistem

FungsiOutputReturn ValueKegunaan Utama
passthru()Langsung ke browserStatus kodeOutput biner/stream
exec()Array (baris terakhir)Baris terakhirManipulasi data teks
system()Langsung ke browserStatus kodeEksekusi perintah umum
shell_exec()String lengkapOutput lengkapMenangkap output ke variabel

Implementasi Teknis

Berikut adalah contoh penggunaan passthru() untuk menjalankan perintah sistem ls -la pada lingkungan Linux/Unix:

<?php
// Menjalankan perintah ls -la
$command = 'ls -la';
$return_var = 0;

echo "<pre>";
passthru($command, $return_var);
echo "</pre>";

if ($return_var === 0) {
    echo "Perintah berhasil dijalankan.";
} else {
    echo "Perintah gagal dengan kode: " . $return_var;
}
?>

Poin Penting Keamanan

Penggunaan passthru() memiliki risiko keamanan tinggi jika input dari pengguna tidak disanitasi. Penyerang dapat melakukan Command Injection. Selalu gunakan escapeshellarg() untuk membungkus argumen perintah guna mencegah eksekusi perintah berbahaya.

Troubleshooting Lapangan

  1. Permission Denied: Pastikan user web server (seperti www-data) memiliki hak akses untuk menjalankan perintah tersebut.
  2. Safe Mode/Disabled Functions: Periksa file php.ini pada bagian disable_functions. Pastikan passthru tidak masuk dalam daftar fungsi yang dilarang.
  3. Path Environment: Gunakan path absolut (misal: /usr/bin/git bukan hanya git) untuk menghindari kegagalan eksekusi karena perbedaan variabel lingkungan PATH.