Zum Übergeben von Argumenten an ein Befehlszeilenskript verwenden Sie normalerweise entweder eine argv
globale Variable oder getopt :
// bash command:
// php -e myscript.php hello
echo $argv[1]; // prints hello
// bash command:
// php -e myscript.php -f=world
$opts = getopt('f:');
echo $opts['f']; // prints world
$ _GET bezieht sich auf die Parameter der HTTP-GET-Methode, die in der Befehlszeile nicht verfügbar sind, da zum Auffüllen ein Webserver erforderlich ist.
Wenn Sie $ _GET trotzdem wirklich füllen möchten, können Sie dies tun:
// bash command:
// export QUERY_STRING="var=value&arg=value" ; php -e myscript.php
parse_str($_SERVER['QUERY_STRING'], $_GET);
print_r($_GET);
/* outputs:
Array(
[var] => value
[arg] => value
)
*/
Sie können auch ein bestimmtes Skript ausführen, das $_GET
über die Befehlszeile ausgefüllt wird, ohne das Skript ändern zu müssen:
export QUERY_STRING="var=value&arg=value" ; \
php -e -r 'parse_str($_SERVER["QUERY_STRING"], $_GET); include "index.php";'
Beachten Sie, dass Sie dasselbe auch mit $_POST
und tun können $_COOKIE
.
php [script name] "a=1&b=2&c=3"
das nicht auffüllt$_SERVER['QUERY_STRING']
, aber Sie können das Gleiche leicht durch Verweisen beeinflussen$_SERVER['argv'][1]
.getopt()
, sagt dies PHP anscheinend, dass Sie das Argumentf
und nicht die Optionf
(die ohne den Doppelpunkt angegeben werden soll) möchten. Es ist also nur Syntax.Aus dieser Antwort auf ServerFault :
Verwenden Sie die
php-cgi
Binärdatei anstelle von nurphp
und übergeben Sie die Argumente in der Befehlszeile wie folgt:Was bringt das in
$_GET
:Sie können auch Umgebungsvariablen festlegen, die vom Webserver festgelegt werden, wie folgt:
quelle
<b>Notice</b>: Undefined index: testing in <b> ... </b><br />
php-cgi -f /var/www/vhosts/example.com/public_html/index.php action=DoSomething
Funktioniert gut ..Ich habe keine PHP-CGI-Binärdatei unter Ubuntu, also habe ich Folgendes getan:
quelle
Manchmal haben Sie nicht die Möglichkeit, die PHP-Datei zu bearbeiten, um $ _GET auf die übergebenen Parameter zu setzen, und manchmal können oder wollen Sie PHP-CGI nicht installieren.
Ich fand, dass dies die beste Lösung für diesen Fall ist:
Dadurch wird vermieden, dass Ihre PHP-Datei geändert wird, und Sie können den einfachen PHP-Befehl verwenden. Wenn Sie PHP-CGI installiert haben, verwenden Sie dies auf jeden Fall, aber dies ist das nächstbeste. Ich dachte, diese Option wäre erwähnenswert
das -r bedeutet, den PHP-Code in der folgenden Zeichenfolge auszuführen. Dort legen Sie den Wert $ _GET manuell fest und verweisen dann auf die Datei, die Sie ausführen möchten.
Es ist erwähnenswert, dass Sie dies im richtigen Ordner ausführen sollten, häufig, aber nicht immer in dem Ordner, in dem sich die PHP-Datei befindet. Requires-Anweisungen verwenden den Speicherort Ihres Befehls, um relative URLs aufzulösen, NICHT den Speicherort der Datei
quelle
Setzen Sie dann Ihre
$_GET
Variablen in Ihrer ersten Zeile in PHP, obwohl dies nicht die gewünschte Methode zum Festlegen einer$_GET
Variablen ist und Sie möglicherweise Probleme haben, je nachdem, was Sie später mit dieser Variablen tun.Auf die Variablen, mit denen Sie das Skript starten, kann über das
$argv
Array in Ihrer PHP-App zugegriffen werden. Der erste Eintrag enthält den Namen des Skripts, aus dem sie stammen.array_shift($argv)
Wenn Sie eine Reihe von Variablen verarbeiten möchten, können Sie diesen ersten Eintrag löschen. Oder laden Sie einfach in eine lokale Variable.quelle
Versuchen Sie es mit
WGET
:quelle
$_GET
impliziert jedoch normalerweise einen laufenden Webserver.- Option 1: php-cgi -
Verwenden Sie 'php-cgi' anstelle von 'php', um Ihr Skript auszuführen. Dies ist der einfachste Weg, da Sie Ihren PHP-Code nicht speziell ändern müssen, um damit zu arbeiten:
- Option 2: Wenn Sie einen Webserver haben -
Wenn sich die PHP-Datei auf einem Webserver befindet, können Sie 'wget' in der Befehlszeile verwenden:
ODER:
- Zugriff auf die Variablen in PHP -
In beiden Optionen 1 und 2 greifen Sie auf folgende Parameter zu:
quelle
Wenn Sie übergeben müssen
$_GET
,$_REQUEST
,$_POST
, oder irgendetwas anderes können Sie auch PHP interaktiven Modus verwenden:Geben Sie dann Folgendes ein:
Dadurch werden alle gewünschten Variablen manuell festgelegt und anschließend Ihre PHP-Datei mit diesen festgelegten Variablen ausgeführt.
quelle
Wenn Sie die Möglichkeit haben, das PHP-Skript zu bearbeiten, können Sie das $ _GET-Array mit dem folgenden Code am Anfang des Skripts künstlich füllen und das Skript dann mit der Syntax aufrufen:
php -f script.php name1=value1 name2=value2
quelle
Fügen Sie in der Befehlszeile Folgendes ein
quelle
Ich passiere sie einfach so:
funktioniert einwandfrei, das $ _GET-Array lautet:
quelle
php -r 'parse_str($argv[2],$_GET);include $argv[1];' index.php 'a=1&b=2'
Sie könnten den ersten Teil als Alias machen:
alias php-get='php -r '\''parse_str($argv[2],$_GET);include $argv[1];'\'
dann benutze einfach:
php-get some_script.php 'a=1&b=2&c=3'
quelle
oder einfach (wenn Sie LYNX haben):
quelle