Pertanyaan Shell menjalankan / menjalankan skrip php dengan parameter


Saya perlu menjalankan file php dengan parameter melalui shell.

di sini adalah bagaimana saya akan menjalankan file php:

php -q htdocs / file.php

Saya harus memiliki parameter 'show' dilewati dan

php -q htdocs / file.php? show = show_name

tidak berfungsi

Jika seseorang bisa mengeja kepada saya apa perintah untuk mengeksekusi untuk mendapatkan file php untuk mengeksekusi dengan parameter yang ditetapkan, itu akan sangat dihargai. Jika tidak, cobalah untuk mengarahkan saya ke arah yang benar.


32
2017-07-20 15:01


asal


Jawaban:


test.php:

<?php
print_r($argv);
?>

Kulit:

$ php -q test.php foo bar
Array
(
    [0] => test.php
    [1] => foo
    [2] => bar
)

38
2017-07-20 15:07



Jika Anda memiliki webserver (tidak hanya juru bahasa php yang diinstal, tetapi LAMP / LNMP / etc) - coba saja ini

wget -O - -q -t 1 "http://mysite.com/file.php?show=show_name" >/dev/null 2>&1

dimana:

  • «-O -» - (Huruf "O", bukan nol!), Redirect "download html" ke stdout
  • «> / Dev / null 2> & 1» - mengarahkan output stdout & stderr ke mana pun
  • «-Q» - diam wget menjalankan
  • «-T 1» - hanya 1 coba hubungkan (tidak seperti default 20)

Di PHP "exec" itu akan menjadi seperti ini:

function exec_local_url($url) {
  exec('/usr/bin/wget -O - -q -t 1 "http://'. $_SERVER['HTTP_HOST'] .'/'
    . addslashes($url) . '" >/dev/null 2>&1'
  );
}

// ...

exec_local_url("file.php?show=show_name");
exec_local_url("myframework/seo-readable/show/show_name");

Jadi, Anda tidak perlu mengubah skrip Anda untuk menangani argc / argv, dan dapat menggunakan $ _GET seperti biasanya.

Jika Anda ingin pekerjaan berjalan di latar belakang - lihat untuk ex. Unix / Windows, Pengaturan proses latar belakang? dari kode php

Saya menggunakan pendekatan dengan wget dalam tugas cron saya; semoga itu membantu.


4
2018-04-18 09:47



Anda perlu membaca parameter baris perintah dari $ argc dan $ argv.

Menggunakan tanda tanya adalah sesuatu yang Anda lakukan di URL dan tidak ada hubungannya dengan mengeksekusi PHP dari baris perintah.

Lihat juga: http://www.sitepoint.com/php-command-line-1/


3
2017-07-20 15:04



Selain jawaban yang lain (Yang cukup benar), Anda juga dapat meneruskan argumen sebagai parameter lingkungan, seperti ini:

FOO=42 BAR=quux php test.php

Mereka kemudian akan tersedia di superglobal $_ENV.


2
2017-07-20 15:15



Jika Anda menggunakannya dari file PHP maka Anda dapat menggunakan popen () dan melakukan sesuatu seperti ini:

$part = $show_name; //or whatever you want with spaces

$handle = popen("php -q nah.php -p=". escapeshellarg($part) . " 2>&1", "r");

Ini menggunakan fungsi escapeshellarg () untuk membungkus $part variabel dalam tanda kutip (dan melarikan diri setiap kutipan di dalamnya), sehingga dapat digunakan sebagai argumen shell dengan aman.


0
2017-07-20 15:30