22 Stimmen

php-Skript von der Kommandozeile mit Variable ausführen

Ich möchte ein PHP-Skript von der Befehlszeile aus ausführen, aber ich möchte auch eine Variable für dieses Skript setzen.

Browser-Version: script.php?var=3

Befehlszeile: php -f script.php (aber wie gebe ich ihm die Variable, die 3 enthält?)

41voto

Ionuț G. Stan Punkte 168218

Drehbuch:

<?php

// number of arguments passed to the script
var_dump($argc);

// the arguments as an array. first argument is always the script name
var_dump($argv);

Befehl:

$ php -f test.php foo bar baz
int(4)
array(4) {
  [0]=>
  string(8) "test.php"
  [1]=>
  string(3) "foo"
  [2]=>
  string(3) "bar"
  [3]=>
  string(3) "baz"
}

Werfen Sie auch einen Blick auf PHP von der Kommandozeile aus verwenden .

0 Stimmen

Funktioniert gut... andere Antworten würden auch funktionieren, aber dies war die erste und lässt es besser aussehen, als eine lange Liste von Variablennamen und Daten zu haben.

6voto

Matthew Flaschen Punkte 266507

Neben argv (wie Ionut erwähnte), können Sie Umgebungsvariablen verwenden:

Z.B.:

var = 3 php -f test.php

In test.php:

$var = getenv("var");

6voto

VolkerK Punkte 93746

Wenn Sie benannte Parameter wie var=3&foo=bar beibehalten wollen (anstelle der Positionsparameter, die von $argv ) getopt() kann Ihnen helfen.

4voto

Paul Dixon Punkte 286600

Neben der Verwendung von argc y argv wie angegeben durch Ionut G. Stan können Sie auch das PEAR-Modul verwenden Konsole_Getopt das die Befehlszeilenoptionen im Unix-Stil auswerten kann. Siehe dieser Artikel für weitere Informationen.

Alternativ dazu gibt es eine ähnliche Funktionalität im Zend Framework in der Zend_Konsole_Getopt Klasse.

4voto

atmelino Punkte 2627

Bei vielen Lösungen werden die Argumente entsprechend ihrer Reihenfolge in Variablen gespeichert. Zum Beispiel,

myfile.php 5 7

setzt die 5 in die erste Variable und die 7 in die nächste Variable.

Ich wollte Argumente nennen:

myfile.php  a=1 x=8

damit ich sie als Variablennamen im PHP-Code verwenden kann.

Der Link, den Ionut G. Stan unter http://www.php.net/manual/en/features.commandline.php

gab mir die Antwort.

sep16 at psu dot edu:

Mit der Funktion parse_str() können Sie ganz einfach Befehlszeilenargumente in die Variable $_GET einfügen.

<?php
parse_str(implode('&', array_slice($argv, 1)), $_GET);
?>

Es verhält sich genau so, wie man es von cgi-php erwarten würde.

$ php -f somefile.php a=1 b[]=2 b[]=3

Dadurch wird $_GET['a'] auf '1' und $_GET['b'] auf array('2', '3') gesetzt.

0 Stimmen

WICHTIG: Muss verwendet werden if (PHP_SAPI === 'cli') vor von parse_str Funktion, denn sie überschreibt nicht $_GET bei Verwendung im Web.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X