Parametreleri bir PHP komut dosyasına bir web sayfası üzerinden nasıl aktarırım?


139

Bir web sayfası yüklendiğinde bir PHP komut dosyası arıyorum. Ancak, PHP betiğinin çalıştırması gereken bir parametre vardır (betiği test ederken normalde komut satırından geçiyorum).

Sayfa yüklendiğinde komut dosyası her çalıştırıldığında bu bağımsız değişkeni nasıl iletebilirim?


1
Kodunuzu gönderebilir misiniz, lütfen?
SenorAmor

1
yani bir komut satırı çalıştırmak mı istiyorsunuz? ya da bir php betiği?
Christopher Pelayo

Tamam, teşekkürler çocuklar. Aşağıdaki cevapları aldım: $ GET kullanın ve URL'nin kendisinde bir parametre değeri olarak iletin.
Nick

Yanıtlar:


232

Muhtemelen argümanları komut satırında aşağıdaki gibi aktarıyorsunuz:

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

... ve daha sonra senaryoda bunlara erişerek:

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

HTTP üzerinden argüman iletirken (komut dosyasına web üzerinden erişirken) yapmanız gereken şey, sorgu dizesini kullanmak ve bunlara $ _GET süper küresel aracılığıyla erişmektir:

Http://yourdomain.com/path/to/script.php?argument1=arg1&argument2=arg2 adresine gidin.

... ve erişim:

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

Komut dosyasının nereden çağırdığınıza bakılmaksızın (komut satırı veya tarayıcıdan) çalışmasını istiyorsanız, aşağıdakine benzer bir şey istersiniz:

EDIT: Cthulhu tarafından belirtildiği gibi, hangi ortamda yürüttüğünüzü test etmenin en doğrudan yolu PHP_SAPI sabitini kullanmaktır . Kodu buna göre güncelledim:

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

Kullanırdım empty($_GET). $_GETönceden tanımlanmış bir değerdir, bu yüzden her zaman ayarlandığından eminim, ancak ayarlanan GET parametresi yoksa boş. boş dizeler ve diziler için empty()döner false.
Tim S.Mar

Aslında kontrol olmadan $_GET, komut dosyası bir komut satırı bağlamında çağrılırsa aslında ayarlanmadığına inanıyorum . empty()komut dosyasına sorgu dizesi olmadan web'den erişilirse komut satırı bağımsız değişkenlerini aramasına neden olur ve böylece daha fazla bildirim atar.
Jason

$ argv [0] aslında ilk örneğinizde arg1 değil, "/path/to/wwwpublic/path/to/script.php" olacaktır. ( php.net/manual/tr/reserved.variables.argv.php )
CasualT

3
Partiye geç kaldığımı fark ettim, ama kontrol etmenin doğru yolu PHP_SAPI === 'cli'.
Cthulhu

1
@emanueledelgrande İstediğinizi takip ettiğimden tam olarak emin değilim, ama deneyeceğim. .htaccessApache dosyasıdır - Apache, gelen istekleri direktiflerle işler .htaccessve ardından PHP'ye isteği yanıtlamaya çağırır. Yani, komut satırındaysanız, .htaccesstamamen yok sayılır. Bir komut dosyasına web üzerinden erişiyorsanız ve isteği aldıktan sonra yeni sorgu dizesi bağımsız değişkenleri eklemek istiyorsanız , bu genellikle yapılır mod_rewrite. Bu, sorunuza yeterince cevap vermezse, yepyeni bir soru göndermenizi öneririm.
Jason

17
$argv[0]; // the script name
$argv[1]; // the first parameter
$argv[2]; // the second parameter

Tüm komut dosyasının nereden çağırdığına bakılmaksızın (komut satırı veya tarayıcıdan) çalışmasını istiyorsanız, aşağıdakine benzer bir şey istersiniz:

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

Komut satırından aramak chmod 755 /var/www/webroot/index.phpve kullanmak için

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

Tarayıcıdan aramak için

http://www.mydomain.com/index.php?argument1=arg1&argument2=arg2
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.