Apa yang dilakukan oleh php exec?

Posting ini membahas cara mengeksekusi perintah shell melalui PHP. Kemampuan untuk mengeksekusi perintah shell adalah fitur yang kuat dan harus digunakan dengan hati-hati. Dengan demikian, tidak semua penyedia hosting mengizinkan Anda menjalankan perintah shell

Tahukah Anda bahwa Anda dapat menonaktifkan fungsi PHP di file php.ini?. ini menggunakan  direktif? . "Kesalahan fatal. Kesalahan yang tidak tertangkap. Panggil ke fungsi yang tidak terdefinisi Shell_exec()”

Fungsi PHP untuk mengeksekusi perintah shell adalah. shell_exec(),  exec() atau sistem(). Fungsi-fungsi ini sangat mirip tetapi memiliki sedikit perbedaan. Mari lihat

Daftar isi

shell_exec(). rangkaian

Fungsi shell_exec() mengembalikan string atau nilai NULL. String yang dikembalikan akan berisi output dari perintah yang Anda jalankan. Namun, fungsi shell_exec() akan mengembalikan NULL jika terjadi kesalahan. Anda juga dapat mengharapkan nilai NULL jika perintah tidak menghasilkan keluaran

Perintah ini membutuhkan parameter berikut

  • $cmd – Mengharapkan nilai string yang berisi perintah yang ingin Anda jalankan
Selanjutnya, mari kita lihat bagaimana Anda dapat menggunakan fungsi shell_exec() untuk mengembalikan daftar direktori mesin Linux

<?
//List the folders using ls
echo shell_exec("ls / -ltr");

Ini akan menampilkan yang berikut ini

total 2097248 drwxr-xr-x 2 root root 4096 Apr 26 19:07 opt drwxr-xr-x 2 root root 4096 Apr 26 19:07 media drwxr-xr-x 2 root root 4096 Apr 26 19:07 lib64 lrwxrwxrwx 1 root root ….
_

exec(string $cmd, array &$output = null, int &$resultCode = null). rangkaian. Salah

Fungsi exec() mengembalikan baris terakhir dari perintah yang dieksekusi sebagai string. Namun, perintah ini juga dapat mengembalikan FALSE jika terjadi kesalahan

Perintah ini membutuhkan parameter berikut

  • $cmd – Mengharapkan nilai string yang berisi perintah yang ingin Anda jalankan
  • &$output – Merupakan parameter opsional yang mengharapkan variabel array. Fungsi exec() akan memperbarui variabel dengan setiap baris output dari perintah. Ruang kosong tambahan, seperti \n, tidak disertakan dalam larik ini. Juga, exec() akan ditambahkan ke akhir array jika array sudah berisi item
  • &$resultCode – Merupakan parameter opsional yang mengharapkan variabel integer. Fungsi exec() akan memperbarui variabel dengan status keluar dari perintah yang dieksekusi

Simbol & berarti bahwa nilai variabel akan diperbarui ketika berubah di dalam fungsi. Dengan kata lain, variabel dilewatkan dengan referensi

Selanjutnya, mari kita lihat bagaimana Anda dapat menggunakan fungsi exec() untuk mengembalikan informasi memori dari mesin Linux

<?php
$output=null;
$resultCode=null;
//get the memory info of a Ubuntu machine
exec('free', $output, $resultCode);
echo "Returned with status $resultCode and output:\n";
print_r($output);

Ini akan menampilkan yang berikut ini

Returned with status 0 and output:
Array
(
    [0] =>               total        used        free      shared  buff/cache   available
    [1] => Mem:       16351256     9143564      283052      282788     6924640     6661072
    [2] => Swap:       2097148      279644     1817504
)

sistem(string $cmd, int &$resultCode = null). rangkaian. Salah

Fungsi system() mirip dengan fungsi exec(). Namun itu akan menampilkan output secara langsung (tanpa menggunakan echo() atau print())

Perintah ini membutuhkan parameter berikut

  • $cmd – Mengharapkan nilai string yang berisi perintah yang ingin Anda jalankan
  • &$resultCode – Merupakan parameter opsional yang mengharapkan variabel integer. Fungsi exec() kemudian akan memperbarui variabel dengan status keluar dari perintah yang dieksekusi

Terakhir, mari kita lihat bagaimana perintah sistem digunakan menggunakan contoh exec() dari atas

<?php
$resultCode=null;
//get the memory info of a Ubuntu machine
system('free', $resultCode);
echo "Returned with status $resultCode and output:\n";
_

Ini akan menampilkan yang berikut ini

              total        used        free      shared  buff/cache   available
Mem:       16351256     9246984      238044      307576     6866228     6531868
Swap:       2097148      285036     1812112
Returned with status 0 and output:

Membungkus

Sangat mudah untuk mengeksekusi perintah shell di PHP. Selain itu, fungsi shell_exec(),  exec() atau system() tidak boleh dinonaktifkan di php. file ini

Anda mungkin juga tertarik

  • Cara melihat kesalahan shell_exec() di PHP
  • Uji kode PHP Anda sebagai pengguna www-data
  • Cara mengirimkan array asosiatif dengan HTML & PHP
  • Cara menggunakan fungsi dalam Bash Scripting
  • Dasar-Dasar Pembuatan Skrip Bash
Diperbarui
  • 27-07-2021 – Menambahkan informasi tentang menonaktifkan fungsi di php. di dalam

Sumber

  • http. //php. net/manual/en/fungsi. shell-exec. php
  • http. //php. net/manual/en/fungsi. eksekusi. php
  • https. // www. php. net/manual/en/fungsi. sistem. php


Tentang Penulis

Tim redaksi Anto sangat menyukai cloud seperti Anda. Setiap anggota tim redaksi Anto adalah pakar Cloud di bidangnya masing-masing. Anto Online sangat bangga membantu sesama penggemar Cloud. Beri tahu kami jika Anda memiliki ide bagus untuk topik berikutnya. Hubungi Anto Online jika ingin berkontribusi

Apakah aman menggunakan exec di PHP?

Fungsi exec seaman yang Anda buat . Selama Anda menggunakan fungsi pelolosan yang tepat seperti yang ditunjukkan di sini, Anda akan baik-baik saja. Meskipun memungkinkan untuk membuat perintah skrip aman, vektor serangan yang umum adalah mengunggah skrip berbahaya dan menggunakan exec dan fungsi serupa untuk meretas server.

Apa perbedaan antara sistem () dan exec di PHP?

exec() adalah untuk memanggil perintah sistem, dan mungkin menangani sendiri hasilnya. system() adalah untuk mengeksekusi perintah sistem dan segera menampilkan output - mungkin teks . passthru() adalah untuk mengeksekusi perintah sistem yang Anda inginkan dari pengembalian mentah - mungkin sesuatu yang biner.

Apa perbedaan antara shell dan exec di PHP?

Shell_exec mengembalikan semua aliran keluaran sebagai string. exec mengembalikan baris terakhir dari output secara default, tetapi dapat memberikan semua output sebagai array yang ditentukan sebagai parameter kedua . Jika Anda memerlukan nilai keluar DAN semua keluaran, Anda mungkin masih lebih baik menggunakan "exec" daripada "Shell_exec".

Apa output dari perintah exec di PHP?

Fungsi exec() menjalankan program eksternal, ditentukan dalam parameter pertama. Itu mengirim kembali baris terakhir yang dikeluarkan dari program itu sebagai nilai kembaliannya , tidak seperti passthru() , yang mencetak semua keluaran yang dihasilkan program.