Jak przekazać parametry do skryptu PHP za pośrednictwem strony internetowej?

139

Wywołuję skrypt PHP za każdym razem, gdy ładuje się strona internetowa. Istnieje jednak parametr, który musi uruchomić skrypt PHP (który normalnie przekazuję w wierszu poleceń, gdy testuję skrypt).

Jak mogę przekazać ten argument za każdym razem, gdy skrypt jest uruchamiany podczas ładowania strony?

Nacięcie
źródło
1
Czy możesz wysłać swój kod?
SenorAmor
1
więc chcesz uruchomić wiersz poleceń? czy skrypt php?
Christopher Pelayo
Ok, dziękuję wam. Otrzymałem odpowiedzi poniżej: użyj $ GET i przekaż go jako wartość parametru w samym adresie URL.
Nick

Odpowiedzi:

232

Przypuszczalnie przekazujesz argumenty w wierszu poleceń w następujący sposób:

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

... a następnie uzyskując do nich dostęp w skrypcie w ten sposób:

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

To, co musisz zrobić, przekazując argumenty przez HTTP (uzyskując dostęp do skryptu przez Internet), to użyć ciągu zapytania i uzyskać do nich dostęp za pośrednictwem superglobalnej $ _GET:

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

... i dostęp:

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

Jeśli chcesz, aby skrypt działał niezależnie od tego, skąd go wywołujesz (z wiersza poleceń lub z przeglądarki), będziesz potrzebować czegoś takiego:

EDYCJA: jak wskazał Cthulhu w komentarzach, najbardziej bezpośrednim sposobem sprawdzenia, w jakim środowisku wykonujesz pracę, jest użycie stałej PHP_SAPI . Zaktualizowałem odpowiednio kod:

<?php
if (PHP_SAPI === 'cli') {
    $argument1 = $argv[1];
    $argument2 = $argv[2];
}
else {
    $argument1 = $_GET['argument1'];
    $argument2 = $_GET['argument2'];
}
?>
Jason
źródło
Użyłbym empty($_GET). $_GETjest predefiniowaną wartością, więc jestem prawie pewien, że jest zawsze ustawiona, ale pusta, jeśli nie ma ustawionych parametrów GET. empty()zwraca falsepuste ciągi i tablice.
Tim S.
Bez faktycznego sprawdzenia uważam, że $_GETw rzeczywistości nie jest to ustawione, jeśli skrypt jest wywoływany w kontekście wiersza poleceń. empty()spowodowałoby to, że szukałby argumentów wiersza poleceń, jeśli dostęp do skryptu odbywa się z sieci WWW bez ciągu zapytania, rzucając w ten sposób więcej powiadomień.
Jason
$ argv [0] nie jest właściwie arg1 w twoim pierwszym przykładzie, będzie to "/path/to/wwwpublic/path/to/script.php". ( php.net/manual/en/reserved.variables.argv.php )
CasualT
3
Zdaję sobie sprawę, że jestem spóźniony na przyjęcie, ale właściwy sposób sprawdzenia to PHP_SAPI === 'cli'.
Cthulhu
1
@emanueledelgrande Nie jestem do końca pewien, czy podążam za tym, o co pytasz, ale spróbuję. .htaccessjest plikiem Apache - Apache przetwarza przychodzące żądania z dyrektywami w formacie.htaccess a następnie wywołuje PHP w celu zbudowania odpowiedzi na żądanie. Więc jeśli jesteś w linii poleceń, .htaccesszostanie całkowicie zignorowany. Jeśli uzyskujesz dostęp do skryptu przez Internet i chcesz dodać nowe argumenty zapytania po otrzymaniu żądania, zwykle jest to zrobione z mod_rewrite. Jeśli to nie wystarczy, aby odpowiedzieć na Twoje pytanie, proponuję zadać zupełnie nowe pytanie.
Jason
17
$argv[0]; // the script name
$argv[1]; // the first parameter
$argv[2]; // the second parameter

Jeśli chcesz, aby cały skrypt działał niezależnie od tego, skąd go wywołujesz (wiersz poleceń lub z przeglądarki), będziesz potrzebować czegoś podobnego do następującego:

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

Aby zadzwonić z wiersza poleceń chmod 755 /var/www/webroot/index.phpi użyć

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

Aby zadzwonić z przeglądarki, użyj

http://www.mydomain.com/index.php?argument1=arg1&argument2=arg2
Ap. Muthu
źródło