Wie PHP Variable ($_POST) an Shell-script übergeben?

Status
Für weitere Antworten geschlossen.

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Tach zusammen. Folgendes Problem.

Ich habe ein HTML Formular erstellt dessen Ergebnisse ich in PHP Variablen $_POST[Wert] auffange. Den Inhalt dieser $_POST Variablen möchte ich gerne an ein Shell-Script übergeben. Ich habe bereits ein paar erfolgreiche Tests durchführen können, jedoch scheitert es an der Menge der zu übermittelnden Variablen. Was habe ich getan...

Die Ergebnisse des Formulares habe ich mittels shell_exec() aufbereitet, um diese dann an ein Shell-Script Namens "input.sh" zu schicken

PHP:
shell_exec("input.sh ".$_POST["name"]." ".$_POST["email"]." "...usw..." "...usw..." ... ");

Ingsesammt handelt es sich um ca. 15 Variablen, die ich auf diese Weise an das Script übergeben möchte. Im Script selber kann ich die Variablen nur mittels den Standardvariablen $1, $2, $3, etc. auslesen und weiterverarbeiten, wozu ich mir ein kleines Script bzw. Protokoll geschrieben habe um die Übersicht zu wahren. Andere Variablennamen wie z.B. $name ect. funktionieren nicht. (Warum eigentlich nicht?)

Code:
 $1 = NAME......= $_POST[name]......= Tommes
 $2 = EMAIL.....= $_POST[email].....= mail@tld.de
 ...
 ..
 .

So weit so gut. Klappt auch alles. Jedoch geht das alles nur bis zur Variable $9. Alles was danach kommt, also $10, $11, $12... usw. gibt mir den Wert der Variable $1 aus und hängt an dem 10'er Block entsprechend die fortlaufende Zahl der 1'er Stelle hinzu, also so...

Code:
 $1 = NAME......= $_POST[name]......= Tommes
 $2 = EMAIL.....= $_POST[email].....= mail@tld.de
 ...
 ..
 .
  $10= XXX......= $_POST[XXX]......= Tommes0
  $11= XXX......= $_POST[XXX]......= Tommes1
  $12= XXX......= $_POST[XXX]......= Tommes2
...
..
.

Was das Bedeutet ist mir klar. Es gibt nur 9 Standard-Variablen, also $1 bis $9. Und jetzt?

Wie schaffe ich es ALLE 15 Variablen dem Script zu übergeben um diese weiterverarbeiten zu können? Gibt es andere Herangehensweisen? Bessere Alternativen? Wenn ja, welche.

BTW: Bitte habt ein wenig Nachsicht mit mir, denn meine PHP - Kenntnisse stammen aus dem Jahr 2001 - 2004 und sind mitlerweile schon stark verblasst. Auch bin ich (noch) kein Profi, was das Scripten angeht. Besonders stehe ich mit Regulären Ausdrücken auf Kriegsfuß. Daher die Bitte mir das so einfach und anschaulich wie möglich zu erläutern.

Tommes
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Oh ja hier im Forum sind einige kluge Köpfe die sich sehr gut damit auskennen.

Evtl. so.. ${10}

Ich habe es jetzt auch bei auf einer Seite gefunden.
Sollte wohl so klappen.

Hier noch der LINK

Interessant ist dann auch eventuell $@


Ich schreibe hier aber nur, weil ich es eh nicht genau weiß aber an der Lösung interessiert bin :)
 
Zuletzt bearbeitet:

nageniil

Benutzer
Mitglied seit
18. Aug 2009
Beiträge
208
Punkte für Reaktionen
4
Punkte
18
Nur so als Idee:
Du könntest die einzelnen $_POST-Werte über ein Dir genehmes Trennzeichen miteinander verbinden, also zu so etwas wie "Tommes#mail@tld.de#nochwas#Tommes0#Tommes1".
Vielleicht lässt sich das in Deinem Script dann wieder in die einzelnen Bestandteile trennen - aber da weiß ich jetzt auch nicht aus dem Hut, wie das am besten geht...
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
@PsychoHH
Ich befürchte mal, das das mit dem geschweiften Klammern nur unter einer BASH Umgebung, nicht jedoch unter einer ASH oder SH Umgebung funktioniert, aber das werde ich heute Abend ja herausfinden. Erstmal danke für den Tipp und vor allem für den Link, da sich dahinter eine sehr gute (wenn auch englische) Anleitung für die BASH verbirgt.

@nagenhill
Hm, interessanter Ansatz dem ich auch mal nachgehen werde. Aber ein "einfaches" übergeben der Variablen ohne diese großartig ummodeln zu müssen wäre natürlich angenehmer.

Gibt es weitere Tipps und Ratschläge ?

Tommes
 

joku

Benutzer
Mitglied seit
06. Mrz 2011
Beiträge
6.664
Punkte für Reaktionen
2
Punkte
164
Gibt es weitere Tipps und Ratschläge ?
Hallo Tommes, was möchteste denn genau machen ?
PHP:
$beispiel = array();
$beispiel[] = "1";
$beispiel[] = "2";
$beispiel[] = "n";
oder
PHP:
$beispiel = "1";
$beispiel . = "2";
$beispiel . = "n";

Gruß Jo
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Hey Jo, danke das du versuchst mir zu helfen.

Ich sende die über die Input-Fields eingegebenen Daten des Formulars mit...

PHP:
<form method="POST" action="<?php echo $PHP_SELF ?>">

... an sich selbst und erhalte dann Arrays nach dem Schema $_POST[Wert]. Ich kann innerhalb der PHP-Datei die Arrays auch auswerten, nachdem der Submit-Botton gedrückt wurde, also z.B. so...

PHP:
echo "EMAIL: $_POST[email]";

... wobei dem Namen des Input-Fields entspricht. Diese Array-Werte würde ich jetzt gerne in ein /bin/sh Script übergeben um die dort ebenfalls auswerten zu können. Sagen wir mal, ich möchte die Inhalte aus dem Array in ein Protokoll schreiben. Oder aus den empfangenden Inhalten neue Variablen setzen, also z.B.

... Nimm den Inhalt des Arrays $_Post[email] und fülle mir im /bin/sh Script die Variable EMAIL mit diesem Inhalt? So das EMAIL=$_POST[email], oder besser gesagt, das EMAIL="tommes@tld.de" als Variable erhält.

Tommes
 

heavygale

Benutzer
Mitglied seit
02. Jun 2012
Beiträge
315
Punkte für Reaktionen
2
Punkte
24
Schau mal hier: https://wiki.ubuntuusers.de/Shell/B..._Anfänger/#Parameter-an-ein-Skript-uebergeben
Dort ist auch erklärt, wie man an mehr als 9 Parameter-Variablen kommt: Mit shift werden alle um eins nach vorne verschoben, aus 2 wird 1 und so weiter.
(Gleicher Tipp wie in dem Link von PsychoHH aber auf deutsch ;-)

Sollte das was du in Bash dann tun möchtest aber auch in php möglich sein, könntest du diesen Aufwand sparen.
 

jugi

Benutzer
Mitglied seit
07. Apr 2011
Beiträge
1.853
Punkte für Reaktionen
0
Punkte
56
Zu shell Seite: shift wurde ja schon genannt
Zur php Seite: bitte nie, nie, niemals globale Variablen ohne weitere Prüfung an *exec()-Funktionen übergeben. Da brauch ich 5 Sekunden und habe alle deine (vom Webserver zu erreichenden) Daten befreit…

Magst du etwas mehr zu deinem Programm sagen? Dann können wir ggf. mehr zur "best practice" sagen.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Sollte das was du in Bash dann tun möchtest aber auch in php möglich sein, könntest du diesen Aufwand sparen.
Und da fiel es ihm wie Schuppen vor den Augen... stimmt eigentlich, wieso bin ich da nicht selber drauf gekommen. Ich kann mir ja auch gleich die ermittelten Daten mit PHP in eine Datei schreiben lassen, dessen Inhalt ich dann mit einem Shell-Script weiter verwerten kann. Werd ich heut Abend mal ausprobieren und berichten.

Magst du etwas mehr zu deinem Programm sagen?
:D Ich bin noch in der Findungsphase und möchte nicht über ungelegte Eier reden. Ich weiß auch noch garnicht wo mich das alles hinführen wird und ob etwas sinnvolles bei raus kommt. Was also daraus entstehen wird... hm... ich würde mal sagen, der Weg ist das Ziel und auf diesem Weg stieß ich dann halt auf dieses Problem. Aber ich denke, das ich das wohl mit heavygale's Eingebung bewerkstelligen werde, wenn's denn so klappt wie ich mir das vorstelle.

Tommes
 

jugi

Benutzer
Mitglied seit
07. Apr 2011
Beiträge
1.853
Punkte für Reaktionen
0
Punkte
56
Wir wissen doch eh alle, was du da bastelst :cool:
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Ach jugi hör doch auf ;)

Tommes das meinte ich ja auch zu dir, dass du alles in eine Datei schreibst und ein Bash Script holt sich alles und wertet das mit grep aus.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
OK, das Problem ist gelöst.

Ich habe die Formulardaten jetzt einfach mittels PHP in die Richtige Form gebracht...

PHP:
$output .= "NAME=\"".$_POST['name']."\"\n";
$output .= "EMAIL=\"".$_POST['email']."\"\n";
..
.

...und anschließend in eine Datei weggespeichert.

Code:
NAME="Tommes"
EMAIL="Meine@Email.de"
..
.

Das ging ziemlich problemlos und das Ergebnis ist Perfekt.

Danke an alle für eure Hilfe.

Tommes
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat