Das ?type=daily
Argument (das im $_GET
Array endet ) gilt nur für Seiten, auf die über das Internet zugegriffen wird.
Sie müssen es so nennen php myfile.php daily
und dieses Argument aus dem $argv
Array abrufen (was wäre $argv[1]
, da $argv[0]
wäre myfile.php
).
Wenn die Seite auch als Webseite verwendet wird, können Sie zwei Optionen in Betracht ziehen. Entweder mit einem Shell-Skript darauf zugreifen und das von cron aus wget und aufrufen:
wget http:
Oder überprüfen Sie in der PHP-Datei, ob sie über die Befehlszeile aufgerufen wird oder nicht:
if (defined('STDIN')) {
$type = $argv[1];
} else {
$type = $_GET['type'];
}
(Hinweis: Sie müssen / möchten wahrscheinlich überprüfen, ob $argv
tatsächlich genügend Variablen und dergleichen enthalten sind.)
Übergeben Sie es einfach als normale Parameter und greifen Sie mit dem
$argv
Array in PHP darauf zu .und in myfile.php
$type = $argv[1];
quelle
Diese Zeilen konvertieren die Argumente eines CLI-Aufrufs wie folgt
php myfile.php "type=daily&foo=bar"
in das bekannte$_GET
-array:if (!empty($argv[1])) { parse_str($argv[1], $_GET); }
Das Überschreiben des globalen
$_GET
Arrays ist zwar ziemlich umständlich, konvertiert jedoch alle Ihre Skripte schnell, um CLI-Argumente zu akzeptieren.Weitere Informationen finden Sie unter http://php.net/manual/en/function.parse-str.php .
quelle
Mit der Funktion getopt () können wir auch Parameter aus der Befehlszeile lesen, indem wir den Wert einfach mit dem Befehl php running übergeben
php abc.php --name = xyz
abc.php
$val = getopt(null, ["name:"]); print_r($val); // output: ['name' => 'xyz'];
quelle
Parameter werden wie andere Anwendungen per Index gesendet
und dann können Sie sie so gat
<?php if (count($argv) == 0) exit; foreach ($argv as $arg) echo $arg; ?>
quelle
Sie können den nächsten Code verwenden, um mit der Befehlszeile und dem Webbrowser zu arbeiten. Setzen Sie diesen Code über Ihren PHP-Code. Es wird eine Variable $ _GET für jeden Befehlszeilenparameter erstellt.
In Ihrem Code müssen Sie dann nur nach $ _GET-Variablen suchen, ohne sich Gedanken darüber machen zu müssen, ob das Skript über den Webbrowser oder die Befehlszeile aufgerufen wird.
if(isset($argv)) foreach ($argv as $arg) { $e=explode("=",$arg); if(count($e)==2) $_GET[$e[0]]=$e[1]; else $_GET[$e[0]]=0; }
quelle
Speichern Sie diesen Code in einer Datei
myfile.php
und führen Sie ihn als ausphp myfile.php type=daily
<?php $a = $argv; $b = array(); if (count($a) === 1) exit; foreach ($a as $key => $arg) { if ($key > 0) { list($x,$y) = explode('=', $arg); $b["$x"] = $y; } } ?>
Wenn Sie
var_dump($b);
vor dem?>
Tag hinzufügen , sehen Sie, dass das Array$b
enthälttype => daily
.quelle
Ich empfehle dringend die Verwendung von getopt.
Dokumentation unter http://php.net/manual/en/function.getopt.php
Wenn Sie die Hilfe für Ihre Optionen ausdrucken möchten, besuchen Sie https://github.com/c9s/GetOptionKit#general-command-interface
quelle
Sie können verwenden, was sep16 auf php.net empfiehlt :
<?php parse_str(implode('&', array_slice($argv, 1)), $_GET); ?>
Es verhält sich genau so, wie Sie es von cgi-php erwarten würden.
$ php -f myfile.php type=daily a=1 b[]=2 b[]=3
wird
$_GET['type']
auf'daily'
,$_GET['a']
zu'1'
und$_GET['b']
zu gesetztarray('2', '3')
.quelle
<?php if (count($argv) == 0) exit; foreach ($argv as $arg) echo $arg; ?>
Dieser Code sollte nicht verwendet werden. Zunächst wird die CLI wie folgt aufgerufen: / usr / bin / php phpscript.php hat einen argv-Wert, der den Namen des Skripts darstellt
array(2) { [0]=> string(13) "phpscript.php" }
Dieser wird immer ausgeführt, da 1 oder 2 Argumente vorhanden sind
quelle
Übergeben Sie es einfach wie folgt als Parameter:
und in test.php:
<?php if(isset($argv)) { foreach ($argv as $arg) { echo $arg; echo "\r\n"; } } ?>
quelle
Es gibt 4 Hauptalternativen, beide haben ihre Macken, Methode 4 hat aus meiner Sicht viele Vorteile.
./script
ist ein Shell-Skript, das mit beginnt#!/usr/bin/php
Methode 1: $ argv
./script hello wo8844rld // $argv[0] = "script", $argv[1] = "hello", $argv[2] = "wo8844rld"
⚠️ Bei Verwendung von $ argv ist die Reihenfolge der Parameter kritisch.
Methode 2: getopt ()
./script -p7 -e3 // getopt("p::")["p"] = "7", getopt("e::")["e"] = "3"
Es ist schwer in Verbindung zu verwenden
$argv
, weil:⚠️ Nur 26 Parameter als Alphabet.
Methode 3: Bash Globale Variable
P9="xptdr" ./script // getenv("P9") = "xptdr" // $_SERVER["P9"] = "xptdr"
Diese Variablen können von anderen Programmen verwendet werden, die in derselben Shell ausgeführt werden.
Sie werden geblasen, wenn die Shell geschlossen wird, aber nicht, wenn das PHP-Programm beendet wird. Wir können sie dauerhaft einsetzen
~/.bashrc
!Methode 4: STDIN- Pipe und stream_get_contents ()
Einige Rohrleitungsbeispiele:
Füttere einen String:
./script <<< "hello wo8844rld" // stream_get_contents(STDIN) = "hello wo8844rld"
Füttere einen String mit Bash Echo:
echo "hello wo8844rld" | ./script // explode(" ",stream_get_contents(STDIN)) ...
Füttere einen Dateiinhalt:
./script < ~/folder/Special_params.txt // explode("\n",stream_get_contents(STDIN)) ...
Füttere ein Array von Werten:
./script <<< '["array entry","lol"]' // var_dump( json_decode(trim(stream_get_contents(STDIN))) );
Füttere einen JSON aus einer Datei:
echo params.json | ./script // json_decode(stream_get_contents(STDIN)) ...
Es funktioniert möglicherweise ähnlich wie fread () oder fgets () , indem Sie die STDIN lesen.
Bash-Scripting-Anleitung
quelle
if (isset($argv) && is_array($argv)) { $param = array(); for ($x=1; $x<sizeof($argv);$x++) { $pattern = '#\/(.+)=(.+)#i'; if (preg_match($pattern, $argv[$x])) { $key = preg_replace($pattern, '$1', $argv[$x]); $val = preg_replace($pattern, '$2', $argv[$x]); $_REQUEST[$key] = $val; $$key = $val; } } }
Ich habe Parameter in $ _REQUEST eingefügt
und auch direkt verwendbar
benutze das so:
quelle