Skrip shell menjalankan file php

proc_open is probably a better solution for most use cases as of PHP 7.4.  There is better control and platform independence.  If you still want to use shell_exec(), I like to wrap it with a function that allows better control.

Something like below solves some problems with background process issues on apache/php.  It also

public function sh_exec(string $cmd, string $outputfile = "", string $pidfile = "", bool $mergestderror = true, bool $bg = false) {
  $fullcmd = $cmd;
  if(strlen($outputfile) > 0) $fullcmd .= " >> " . $outputfile;
  if($mergestderror) $fullcmd .= " 2>&1";
  if($bg) {
    $fullcmd = "nohup " . $fullcmd . " &";
    if(strlen($pidfile)) $fullcmd .= " echo $! > " . $pidfile;
  } else {
    if(strlen($pidfile) > 0) $fullcmd .= "; echo $$ > " . $pidfile;
  }
  shell_exec($fullcmd);
}

Kedua cara (apakah menggunakan -f switch atau tidak) mengeksekusi file my_script. php. Perhatikan bahwa tidak ada batasan file mana yang dapat dieksekusi;

  • Lewati kode PHP untuk mengeksekusi langsung pada baris perintah

    $ php -r 'print_r(get_defined_constants());'
    

    Perhatian khusus harus diberikan sehubungan dengan substitusi variabel shell dan penggunaan tanda kutip

    Catatan

    Bacalah contoh dengan cermat. tidak ada tag awal atau akhir. Sakelar -r tidak membutuhkannya, dan menggunakannya akan menyebabkan kesalahan penguraian

  • Berikan kode PHP untuk dieksekusi melalui input standar (stdin)

    Ini memberikan kemampuan yang kuat untuk membuat kode PHP secara dinamis dan mengumpankannya ke biner, seperti yang ditunjukkan dalam contoh (fiksi) ini

    $ some_application | some_filter | php | sort -u > final_output.txt
    
    _

  • Anda tidak dapat menggabungkan salah satu dari ketiga cara tersebut untuk mengeksekusi kode

    Seperti halnya setiap aplikasi shell, biner PHP menerima sejumlah argumen; . Jumlah argumen yang dapat diteruskan ke skrip Anda tidak dibatasi oleh PHP (dan meskipun shell memiliki batasan jumlah karakter yang dapat diteruskan, hal ini secara umum tidak mungkin terkena). Argumen yang diteruskan ke skrip tersedia di array global $argv. Indeks pertama (nol) selalu berisi nama skrip yang dipanggil dari baris perintah. Perhatikan bahwa, jika kode dieksekusi in-line menggunakan saklar baris perintah -r, nilai $argv[0] akan menjadi "Standard input code"; . 2. 0, itu adalah tanda hubung ("-") sebagai gantinya. Hal yang sama berlaku jika kode dijalankan melalui pipa dari

    $ php -r 'print_r(get_defined_constants());'
    
    0

    Variabel global kedua, $argc, berisi jumlah elemen dalam array $argv (bukan jumlah argumen yang diteruskan ke skrip)

    Selama argumen yang akan diteruskan ke skrip tidak dimulai dengan karakter

    $ php -r 'print_r(get_defined_constants());'
    
    1, tidak ada hal khusus yang harus diperhatikan. Meneruskan argumen ke skrip yang dimulai dengan
    $ php -r 'print_r(get_defined_constants());'
    
    1 akan menimbulkan masalah karena penafsir PHP berpikir harus menanganinya sendiri, bahkan sebelum mengeksekusi skrip. Untuk mencegah hal ini, gunakan pemisah daftar argumen
    $ php -r 'print_r(get_defined_constants());'
    
    3. Setelah pemisah ini diuraikan oleh PHP, setiap argumen berikut diteruskan tanpa disentuh ke skrip

    # This will not execute the given code but will show the PHP usage
    $ php -r 'var_dump($argv);' -h
    Usage: php [options] [-f]  [args...]
    [...]
    
    # This will pass the '-h' argument to the script and prevent PHP from showing its usage
    $ php -r 'var_dump($argv);' -- -h
    array(2) {
      [0]=>
      string(1) "-"
      [1]=>
      string(2) "-h"
    }
    
    _

    Namun, pada sistem Unix ada cara lain menggunakan PHP untuk skrip shell. buat baris pertama skrip dimulai dengan

    $ php -r 'print_r(get_defined_constants());'
    
    4 (atau apa pun jalur ke biner PHP CLI Anda jika berbeda). File lainnya harus berisi kode PHP normal di dalam tag awal dan akhir PHP yang biasa. Setelah atribut eksekusi file diatur dengan tepat (mis. g. chmod +x test), skrip dapat dijalankan seperti skrip shell atau perl lainnya

    Contoh #1 Jalankan skrip PHP sebagai skrip shell

    $ php -r 'print_r(get_defined_constants());'
    
    5

    Dengan asumsi file ini bernama test di direktori saat ini, sekarang dimungkinkan untuk melakukan hal berikut

    $ chmod +x test
    $ ./test -h -- foo
    array(4) {
      [0]=>
      string(6) "./test"
      [1]=>
      string(2) "-h"
      [2]=>
      string(2) "--"
      [3]=>
      string(3) "foo"
    }
    
    _

    Seperti yang dapat dilihat, dalam hal ini tidak ada perhatian khusus yang perlu diberikan saat meneruskan parameter yang dimulai dengan

    $ php -r 'print_r(get_defined_constants());'
    
    1

    Eksekusi PHP dapat digunakan untuk menjalankan skrip PHP yang benar-benar independen dari server web. Pada sistem Unix, baris pertama khusus

    $ php -r 'print_r(get_defined_constants());'
    
    _7 (atau "shebang") harus ditambahkan ke skrip PHP sehingga sistem dapat secara otomatis menentukan program mana yang harus menjalankan skrip. Pada platform Windows, dimungkinkan untuk mengasosiasikan php. exe dengan opsi klik dua kali dari ekstensi .php, atau file batch dapat dibuat untuk menjalankan skrip melalui PHP. Baris pertama shebang khusus untuk Unix tidak membahayakan Windows (karena diformat sebagai komentar PHP), sehingga program lintas platform dapat ditulis dengan menyertakannya. Contoh sederhana penulisan program baris perintah PHP ditunjukkan di bawah ini

    Contoh #2 Skrip dimaksudkan untuk dijalankan dari baris perintah (script. php)

    $ php -r 'print_r(get_defined_constants());'
    
    _9

    $ some_application | some_filter | php | sort -u > final_output.txt
    
    _0

    $ some_application | some_filter | php | sort -u > final_output.txt
    
    _1

    $ some_application | some_filter | php | sort -u > final_output.txt
    
    _2

    $ some_application | some_filter | php | sort -u > final_output.txt
    
    _3

    $ some_application | some_filter | php | sort -u > final_output.txt
    
    _4

    Skrip di atas menyertakan baris pertama Unix shebang untuk menunjukkan bahwa file ini harus dijalankan oleh PHP. Kami bekerja dengan versi CLI di sini, jadi tidak ada header HTTP yang akan ditampilkan

    Program pertama-tama memeriksa apakah ada satu argumen yang diperlukan (selain nama skrip, yang juga dihitung). Jika tidak, atau jika argumennya adalah --help, -help, -h atau -?, pesan bantuan akan dicetak, menggunakan $argv[0] untuk secara dinamis mencetak nama skrip seperti yang diketik pada baris perintah. Jika tidak, argumen akan digaungkan persis seperti yang diterima

    Untuk menjalankan skrip di atas pada Unix, itu harus dibuat dapat dieksekusi, dan disebut hanya sebagai skrip. php echothis atau skrip. php -h. Di Windows, file batch yang mirip dengan berikut ini dapat dibuat untuk tugas ini

    Contoh #3 File batch untuk menjalankan skrip PHP baris perintah (script. kelelawar)

    @echo OFF
    "C:\php\php.exe" script.php %*

    Anggaplah program di atas bernama script. php, dan CLI php. exe ada di C. \php\php. exe, file batch ini akan menjalankannya, meneruskan semua opsi yang ditambahkan. naskah. bat echothis atau skrip. mandi

    Lihat juga dokumentasi ekstensi Readline untuk lebih banyak fungsi yang dapat digunakan untuk menyempurnakan aplikasi baris perintah di PHP

    Di Windows, PHP dapat dikonfigurasi untuk berjalan tanpa perlu memasok C. \php\php. exe atau ekstensi .php_, seperti yang dijelaskan di Command Line PHP di Microsoft Windows

    Catatan

    Di Windows disarankan untuk menjalankan PHP di bawah akun pengguna yang sebenarnya. Saat berjalan di bawah layanan jaringan operasi tertentu akan gagal, karena "Tidak ada pemetaan antara nama akun dan ID keamanan yang dilakukan"

    Bagaimana cara menjalankan PHP dari skrip shell?

    Instal PHP CLI . \php Start the editor, search for the Path variable name, click on “Edit” and add C:\php . Terakhir, setelah menginstal PHP, Anda seharusnya dapat menjalankan skrip. php dari baris perintah tanpa masalah. C. \> skrip php.

    Bagaimana cara menjalankan file PHP dari baris perintah?

    Anda tinggal mengikuti langkah-langkah untuk menjalankan program PHP menggunakan baris perintah. .
    Buka terminal atau jendela baris perintah
    Pergi ke folder atau direktori yang ditentukan di mana file php ada
    Kemudian kita dapat menjalankan kode php menggunakan perintah berikut. php file_name.php. php

    Bagaimana cara mengeksekusi file PHP?

    Sekarang, untuk menjalankan skrip PHP. .
    Pergi ke “C. \xampp\htdocs” dan di dalamnya, buat folder. .
    Di dalam folder demo, buat file teks baru dan beri nama “index. .
    Sekarang, untuk melihat keluaran skrip, buka panel kontrol XAMPP dan mulai Apache untuk menghosting server web lokal, tempat skrip kami akan berjalan

    Bagaimana cara menjalankan PHP dari baris perintah Linux?

    Contoh. .
    Untuk mengeksekusi file my_script. php dengan PHP 8. 0, masukkan perintah berikut. /usr/bin/php8. 0-cli my_script. php
    Untuk menjalankan file my_script. php dengan PHP7. 4, masukkan perintah berikut. /usr/bin/php7. 4-cli my_script. php