2013-06-05 15 views
14

Ich rufe test.sh von PHP mit Shell_Exec-Methode.Variablen an shell_exec() übergeben?

$my_url="http://www.somesite.com/"; 
$my_refer="http://www.somesite.com/"; 
$page = shell_exec('/tmp/my_script.php $my_url $my_refer'); 

jedoch das Skript Kommandozeile sagt, es erhielt nur 1 Argument: die /tmp/my_script.php

Wenn ich den Anruf zu ändern:

Code:

$page = shell_exec('/tmp/my_script.php {$my_url} {$my_refer}'); 

Es heißt, dass es 3 Argumente erhalten hat, aber die Argumente argv [1] und argv [2] sind leer.

Wenn ich den Anruf zu ändern:

Code:

$page = shell_exec('/tmp/my_script.php "http://www.somesite.com/" "http://www.somesite.com/"'); 

Das Skript schließlich empfängt alle drei Argumente, wie beabsichtigt.

Müssen Sie immer nur Text in Anführungszeichen mit dem Skript senden und dürfen keine Variable wie $ var senden? Oder gibt es eine spezielle Möglichkeit, eine $ var zu senden?

Antwort

11

Es Argumente mit Quote senden müssen, so dass Sie es mögen verwenden sollte:

$page = shell_exec("/tmp/my_script.php '".$my_url."' '".$my_refer."'"); 
+1

Dies funktioniert – user2314387

+1

Wie lesen Sie diese in meine_script.php? –

+0

ja wie greifen Sie diese Parameter in der "/ tmp/my_script.php"? –

16

ändern

$page = shell_exec('/tmp/my_script.php $my_url $my_refer');

zu

$page = shell_exec("/tmp/my_script.php $my_url $my_refer");

ODER

$page = shell_exec('/tmp/my_script.php "'.$my_url.'" "'.$my_refer.'"');

Auch stellen Sie sicher, escapeshellarg zu verwenden auf beide deine Werte.

Beispiel:

$my_url=escapeshellarg($my_url); 
$my_refer=escapeshellarg($my_refer); 
+0

PHP 'Variablen um doppelte Anführungszeichen (' "') –

+2

auch sicherstellen, dass Sie mit escapseshellarg – Orangepill

+0

Lesen Sie die Dokumentation für die sanatize gewickelt $ 'nur analysieren. Unterschiede zwischen Strings mit einfachem und doppeltem Anführungszeichen: http://php.net/manual/en/language.types.string.php – DaoWen

2

ändern

$page = shell_exec('/tmp/my_script.php $my_url $my_refer'); 

zu

$page = shell_exec('/tmp/my_script.php "'.$my_url.'" "'.$my_refer.'"'); 

Dann tolerieren Sie Code Leerzeichen in Dateiname.

+0

Ja, ich mache absichtlich. Mein richtiger Fehler war, dass ich vergessen habe, '$ my_url' und' $ my_refer' aus der Zeichenfolge herauszunehmen. –

6

Variablen interpolieren nicht innerhalb einer einzelnen Zeichenfolge in Anführungszeichen. Außerdem sollten Sie sicherstellen, dass Ihre Argumente korrekt maskiert sind.

$page = shell_exec('/tmp/myscript.php '.escapeshellarg($my_url).' '.escapeshellarg($my_refer)); 
+0

Danke Orangepill .. Das funktioniert – user2314387

2

Sie sprintf hier hilfreich finden könnte:

$my_url="http://www.somesite.com/"; 
$my_refer="http://www.somesite.com/"; 
$page = shell_exec(sprintf('/tmp/my_script.php "%s" "%s"', $my_url, $my_refer)); 

Sie definitiv escapeshellarg in den anderen Antworten, wie empfohlen verwenden sollten, wenn Sie den Eingang nicht derjenige bist liefern.

2

Ich hatte Schwierigkeiten damit, dachte also, ich würde mein Code-Snippet teilen.

Vor

$output = shell_exec("/var/www/sites/blah/html/blahscript.sh 2>&1 $host $command"); 

Nach

$output = shell_exec("/var/www/sites/blah/html/blahscript.sh 2>&1 $host {$command}"); 

die {} Klammern hinzuzufügen ist, was es für mich fixiert.

Auch zur Bestätigung wird escapeshellarg benötigt.

$host=escapeshellarg($host); 
$command=escapeshellarg($command); 

Außer Skript auch benötigt:

set host [lindex $argv 0] 
set command [lindex $argv 1] 
Verwandte Themen