Bagaimana cara mengirim parameter ke skrip PHP melalui laman web?

139

Saya memanggil skrip PHP setiap kali laman web dimuat. Namun, ada parameter yang harus dijalankan oleh skrip PHP (yang biasanya saya lewati melalui baris perintah saat saya menguji skrip).

Bagaimana saya bisa meneruskan argumen ini setiap kali skrip dijalankan ketika halaman dimuat?

Nick
sumber
1
Bisakah Anda memposting kode Anda?
SenorAmor
1
jadi Anda ingin menjalankan baris perintah? atau skrip php?
Christopher Pelayo
Oke terima kasih semuanya. Saya mendapatkan jawaban di bawah ini: gunakan $ GET dan berikan sebagai nilai parameter di url itu sendiri.
Nick

Jawaban:

232

Agaknya Anda memberikan argumen pada baris perintah sebagai berikut:

php /path/to/wwwpublic/path/to/script.php arg1 arg2

... dan kemudian mengaksesnya dalam skrip dengan demikian:

<?php
// $argv[0] is '/path/to/wwwpublic/path/to/script.php'
$argument1 = $argv[1];
$argument2 = $argv[2];
?>

Apa yang perlu Anda lakukan ketika meneruskan argumen melalui HTTP (mengakses skrip melalui web) menggunakan string kueri dan mengaksesnya melalui $ _GET superglobal:

Buka http://yourdomain.com/path/to/script.php?argument1=arg1&argument2=arg2

... dan akses:

<?php
$argument1 = $_GET['argument1'];
$argument2 = $_GET['argument2'];
?>

Jika Anda ingin skrip dijalankan terlepas dari mana Anda memanggilnya (baris perintah atau dari browser) Anda akan menginginkan sesuatu seperti berikut:

EDIT: seperti yang ditunjukkan oleh Cthulhu dalam komentar, cara paling langsung untuk menguji lingkungan yang Anda jalankan adalah dengan menggunakan konstanta PHP_SAPI . Saya telah memperbarui kode sesuai:

<?php
if (PHP_SAPI === 'cli') {
    $argument1 = $argv[1];
    $argument2 = $argv[2];
}
else {
    $argument1 = $_GET['argument1'];
    $argument2 = $_GET['argument2'];
}
?>
Jason
sumber
Saya akan menggunakan empty($_GET). $_GETadalah nilai yang telah ditentukan, jadi saya cukup yakin itu selalu ditetapkan, tetapi kosong jika tidak ada parameter GET yang ditetapkan. empty()mengembalikan falsestring dan array kosong.
Tim S.
Tanpa benar-benar memeriksa, saya percaya bahwa $_GETsebenarnya tidak diatur jika skrip dipanggil dalam konteks baris perintah. empty()akan menyebabkannya mencari argumen baris perintah jika skrip diakses dari web tanpa string kueri, sehingga melemparkan lebih banyak pemberitahuan.
Jason
$ argv [0] sebenarnya bukan arg1 pada contoh pertama Anda, itu adalah "/path/to/wwwpublic/path/to/script.php". ( php.net/manual/en/reserved.variables.argv.php )
CasualT
3
Saya menyadari saya terlambat ke pesta, tetapi cara yang tepat untuk memeriksanya adalah PHP_SAPI === 'cli'.
Cthulhu
1
@emanueledelgrande Saya tidak sepenuhnya yakin saya mengikuti apa yang Anda minta, tapi saya akan mencoba. .htaccessadalah file Apache - Apache memproses permintaan masuk dengan arahan dalam .htaccessdan kemudian memanggil PHP untuk membangun respons terhadap permintaan. Jadi, jika Anda berada di baris perintah, .htaccessakan sepenuhnya diabaikan. Jika Anda mengakses skrip melalui web, dan Anda ingin menambahkan argumen querystring baru setelah menerima permintaan, itu biasanya dilakukan dengan mod_rewrite. Jika itu tidak cukup menjawab pertanyaan Anda, saya sarankan Anda mengirim pertanyaan baru.
Jason
17
$argv[0]; // the script name
$argv[1]; // the first parameter
$argv[2]; // the second parameter

Jika Anda ingin semua skrip dijalankan terlepas dari mana Anda memanggilnya (baris perintah atau dari browser) Anda akan menginginkan sesuatu seperti berikut:

<?php
if ($_GET) {
    $argument1 = $_GET['argument1'];
    $argument2 = $_GET['argument2'];
} else {
    $argument1 = $argv[1];
    $argument2 = $argv[2];
}
?>

Untuk menelepon dari baris perintah chmod 755 /var/www/webroot/index.phpdan menggunakan

/usr/bin/php /var/www/webroot/index.php arg1 arg2

Untuk menelepon dari browser, gunakan

http://www.mydomain.com/index.php?argument1=arg1&argument2=arg2
Ap .uthu
sumber