Wie übergebe ich Parameter über eine Webseite an ein PHP-Skript?


139

Ich rufe ein PHP-Skript auf, wenn eine Webseite geladen wird. Es gibt jedoch einen Parameter, den das PHP-Skript ausführen muss (den ich normalerweise beim Testen des Skripts über die Befehlszeile übergebe).

Wie kann ich dieses Argument jedes Mal übergeben, wenn das Skript beim Laden der Seite ausgeführt wird?


1
Können Sie bitte Ihren Code posten?
SenorAmor

1
Sie möchten also eine Befehlszeile ausführen? oder ein PHP-Skript?
Christopher Pelayo

Okay, danke Jungs. Ich habe die folgenden Antworten erhalten: Verwenden Sie $ GET und übergeben Sie es als Parameterwert in der URL selbst.
Nick

Antworten:


232

Vermutlich übergeben Sie die Argumente in der Befehlszeile wie folgt:

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

... und dann im Skript folgendermaßen darauf zugreifen:

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

Wenn Sie Argumente über HTTP übergeben (Zugriff auf das Skript über das Web), müssen Sie die Abfragezeichenfolge verwenden und über das Superglobal $ _GET auf sie zugreifen:

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

... und Zugang:

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

Wenn Sie möchten, dass das Skript unabhängig davon ausgeführt wird, von wo aus Sie es aufrufen (Befehlszeile oder vom Browser), benötigen Sie Folgendes:

BEARBEITEN: Wie von Cthulhu in den Kommentaren hervorgehoben, können Sie am direktesten testen, in welcher Umgebung Sie ausführen, indem Sie die Konstante PHP_SAPI verwenden . Ich habe den Code entsprechend aktualisiert:

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

Ich würde verwenden empty($_GET). $_GETist ein vordefinierter Wert, daher bin ich mir ziemlich sicher, dass er immer festgelegt ist, aber leer, wenn keine GET-Parameter festgelegt sind. empty()Gibt falsefür leere Zeichenfolgen und Arrays zurück.
Tim S.

Ohne dies tatsächlich zu überprüfen, glaube ich, dass dies $_GETtatsächlich nicht festgelegt ist, wenn das Skript in einem Befehlszeilenkontext aufgerufen wird. empty()Dies würde dazu führen, dass nach Befehlszeilenargumenten gesucht wird, wenn auf das Skript über das Web ohne Abfragezeichenfolge zugegriffen wird, wodurch mehr Benachrichtigungen ausgelöst werden.
Jason

$ argv [0] ist in Ihrem ersten Beispiel nicht arg1, sondern "/path/to/wwwpublic/path/to/script.php". ( php.net/manual/en/reserved.variables.argv.php )
CasualT

3
Mir ist klar, dass ich zu spät zur Party komme, aber der richtige Weg, das zu überprüfen, ist PHP_SAPI === 'cli'.
Cthulhu

1
@emanueledelgrande Ich bin nicht ganz sicher, ob ich dem folge, was du fragst, aber ich werde es versuchen. .htaccessist eine Apache-Datei - Apache verarbeitet eingehende Anforderungen mit den Anweisungen in .htaccessund ruft dann PHP auf, um die Antwort auf die Anforderung zu erstellen. Wenn Sie sich also in der Befehlszeile befinden, .htaccesswird dies vollständig ignoriert. Wenn Sie über das Web auf ein Skript zugreifen und nach Erhalt der Anforderung neue Querystring-Argumente hinzufügen möchten, ist dies normalerweise erledigt mod_rewrite. Wenn dies Ihre Frage nicht ausreichend beantwortet, empfehle ich Ihnen, eine brandneue Frage zu stellen.
Jason

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

Wenn Sie möchten, dass das gesamte Skript ausgeführt wird, unabhängig davon, von wo aus Sie es aufrufen (Befehlszeile oder vom Browser), benötigen Sie Folgendes:

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

Von der Kommandozeile aus anrufen chmod 755 /var/www/webroot/index.phpund verwenden

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

Verwenden Sie zum Aufrufen über den Browser

http://www.mydomain.com/index.php?argument1=arg1&argument2=arg2
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.