Pass variable de script php en cours d'exécution en ligne de commande
J'ai un fichier PHP qui est nécessaire pour être exécuté en ligne de commande (via crontab). J'ai besoin de passer type=daily
pour le fichier mais je ne sais pas comment. J'ai essayé:
php myfile.php?type=daily
mais cette erreur a été renvoyée:
N'a pas pu ouvrir le fichier d'entrée: monfichier.le php?type=tous les jours
Que puis-je faire?
Vous devez vous connecter pour publier un commentaire.
La
?type=daily
argument (en terminant dans le$_GET
tableau) est valable uniquement pour le web-pages demandées.Vous aurez besoin de l'appeler comme
php myfile.php daily
et de récupérer cet argument de la$argv
tableau (qui serait$argv[1]
, depuis$argv[0]
seraitmyfile.php
).Si la page est utilisée comme une page web, il y a deux options que vous pourriez envisager. Soit en accédant à l'aide d'un script shell et wget et l'appeler à partir de cron:
Ou vérifier dans le fichier php qu'elle est appelée à partir de la ligne de commande, ou pas:
(Note: Vous aurez probablement besoin/voulez vérifier si
$argv
contient en fait assez variables)Juste passer comme paramètres normaux et l'accès en PHP à l'aide de la
$argv
tableau.et dans myfile.php
Ces lignes de convertir les arguments d'une CLI appel comme
php myfile.php "type=daily&foo=bar"
dans le bien connu$_GET
-tableau:Bien qu'il est plutôt compliqué de remplacer le mondial
$_GET
-tableau, il convertit tous vos scripts rapidement à accepter CLI arguments.Voir http://php.net/manual/en/function.parse-str.php pour plus de détails.
À l'aide de getopt() fonction que nous pouvez également lire les paramètre de ligne de commande, il suffit de passer la valeur avec php commande en cours d'exécution
php abc.php --nom=xyz
abc.php
paramètres envoyer par index comme d'autres application
et puis vous pouvez gat comme ça
Enregistrez ce code dans le fichier
myfile.php
et exécuter en tant qu'php myfile.php type=daily
Si vous ajoutez
var_dump($b);
avant la?>
étiquette, vous allez voir que le tableau$b
contienttype => daily
.Je recommande fortement l'utilisation de getopt.
De la Documentation à http://php.net/manual/en/function.getopt.php
Si vous voulez l'aider à imprimer pour vos options que de prendre un coup d'oeil à https://github.com/c9s/GetOptionKit#general-command-interface
Vous pourriez l'utilisation de ce sep16 sur php.net recommande:
Il se comporte exactement comme vous vous attendez à cgi de php.
sera mis
$_GET['type']
à'daily'
,$_GET['a']
à'1'
et$_GET['b']
àarray('2', '3')
.Vous pouvez utiliser le code suivant pour travailler avec la ligne de commande et webbrowser. Mettez ce code au-dessus de votre code php. Il crée un $_GET variable pour chaque paramètre de ligne de commande.
Dans votre code vous avez uniquement besoin de vérifier pour $_GET variables, alors, de ne pas se soucier si le script est appelé à partir de navigateur internet ou de la ligne de commande.
Ce code ne doit pas être utilisé. Tout d'abord CLI appelé comme: /usr/bin/php phpscript.php aura un argv valeur qui est le nom de script
Ce sera toujours exécuté depuis aura 1 ou 2 args passe
Juste passer comme paramètres comme suit:
et à l'intérieur test.php:
J'ai mis les paramètres dans $_REQUEST
et également utilisable directement
utiliser cela comme ça:
Il y a 4 principales solutions de substitution, les deux ont leurs caprices, Méthode 4 a de nombreux avantages de mon point de vue.
./script
est un script shell en commençant par#!/usr/bin/php
Méthode 1: $argv
⚠️ À l'aide de $argv, les paramètres de commande est critique.
Méthode 2: getopt()
Il est difficile à utiliser en conjonction de
$argv
, parce que:⚠️ Seulement 26 params comme l'alphabet.
Méthode 3: Bash variable Globale
Ces variables peuvent être utilisées par d'autres programmes en cours d'exécution dans la même coquille.
Ils sont soufflées, quand la coquille est fermée, mais pas lorsque le programme php est terminée. Nous pouvons les définir permanente dans
~/.bashrc
!Méthode 4: STDIN pipe et stream_get_contents()
Certaines tuyauteries exemples:
On peut passer très longues chaînes, de tableaux, json's, un config fichier contenant des lignes de paramètres, c'est puissant.
Il pourrait œuvres de même avec fread() ou fgets(), par la lecture de l'entrée standard.
Bash Scripting Guide