Hi!
Was erzeugt eine Kontrollausgabe von '..\test.bat $post_inhalt'? Was ist der Unterschied zwischen "" und '' bei Strings unter PHP? Und was unternimmst du, damit nicht beliebige Anweisungen angehängt werden können? (Wobei schon Dateinamen mit Leerzeichen drin Probleme bereiten.)
wenn ich das nur wüsste?
Wenn du auf die ersten beiden Fragen keine Antwort finden kannst, dann musst du noch viel lernen. Die Antwort auf die erste Frage bekommst du mit var_dump() oder auch mit echo. Die Antwort auf die zweite Frage ist PHP-Grundwissen, das bekommt man in jedem Tutorial so ziemlich am Anfang erklärt. Sie sollte dir eigentlich auf die Sprünge helfen, das es einen Unterschied zwischen "" und '' gibt, was die Variablenauswertung angeht.
Die dritte Frage ist leider selten Tutorialgegenstand (in ihrer allgemeinen Form). Du must dafür Sorge tragen, dass entweder nur (handverlesene) gewünschte Werte eingefügt werden können - was bei der Übergabe durch einen Client erst einmal nicht der Fall ist - oder dass du dafür sorgst, dass alle Sonderzeichen kontextgerecht notiert werden.
Wenn du damit das unnötige Umkopieren in eine andere Variable meinst, warum tust du das?
weil die variable ein sich ändernder wert ist und ich diesem somit nicht statisch in die php anweisung schreiben kann.
Das war nicht die Frage. Ich fragte, ob du sowas (unnötiges) wie dies machst:
~~~php $var = $_POST['var'];
Da du den Wert sowieso nicht direkt in die shell\_exec()-Anweisung übernehmen darfst (wenn dir die Sicherheit deines Servers lieb ist), erübrigt sich auch das Problem der nicht aufgelösten Variablen.
`shell_exec(sprintf('command "%s"', str_replace('"', '""', $argument));`{:.language-php}
Die "" um den Platzhalter %s sorgen dafür, dass der eingefügte Wert in "" stehend übergeben wird. Das ist notwendig, wenn du Leerzeichen im Dateinamen oder Pfad hast. Die Ersetzung von einem " im Argument durch zwei "" ist nötig, damit dir keiner aus dem String ausbrechen kann und anschließend ungewünschte Kommandos anhängen kann.
> > ... eine Kontrollausgabe innerhalb der Batchdatei hast du vermutlich nicht gemacht.
> das überfordert meine fähigkeiten...leider...
Innerhalb der Batchdatei greifst du doch auf den übergebenen Wert zu. Dazu verwendest du einen Platzhalter, eine Variabe, was auch immer.
Es sollte nicht so schwer sein, diesen Platzhalter/Variable/wasimmer mit einem Ausgabekommando anzeigen zu lassen, mit echo beispielsweise.
Lo!