2013-06-05 19 views
14

Sto chiamando test.sh da PHP usando il metodo shell_exec.Passare variabili a shell_exec()?

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

Tuttavia, lo script da riga di comando dice che ha ricevuto solo 1 argomento: il /tmp/my_script.php

quando cambio la chiamata a:

Codice:

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

Dice che ha ricevuto 3 argomenti ma che argv [1] e argv [2] sono vuoti.

quando cambio la chiamata a:

Codice:

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

Lo script riceve finalmente tutti i 3 argomenti come previsto.

Devi sempre inviare solo un testo citato con lo script e non è consentito inviare una variabile come $ var? O c'è un modo speciale per inviare $ var?

risposta

11

C'è bisogno di inviare gli argomenti con quote così si dovrebbe utilizzare come:

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

Funziona – user2314387

+1

Come leggi questi in my_script.php? –

+0

sì come prendi questi parametri in "/tmp/my_script.php"? –

16

Change

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

a

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

O

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

Assicurarsi inoltre di utilizzare escapeshellarg su entrambi i tuoi valori.

Esempio:

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

PHP solo analizzare '$' variabili avvolte intorno doppi apici ('" ') –

+2

anche fare in modo che si sanatize con escapseshellarg – Orangepill

+0

vedere la documentazione per il. differenze tra stringhe con quotatura singola e doppia: http://php.net/manual/en/language.types.string.php – DaoWen

2

Change

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

a

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

Quindi il codice tollera gli spazi nel nome del file.

+0

Sì, lo faccio intenzionalmente. Il mio vero errore è stato che ho dimenticato di eliminare '$ my_url' e' $ my_refer' senza stringhe. –

6

Le variabili non vengono interpolate all'interno di una singola stringa quotata. Inoltre dovresti assicurarti che i tuoi argomenti siano debitamente escapati.

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

Grazie Orangepill .. Funziona – user2314387

2

Si potrebbe trovare utile sprintf qui:

$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)); 

Si dovrebbe usare escapeshellarg come raccomandato nelle altre risposte se non siete quello fornisce l'input.

2

Ho avuto difficoltà con questo, così ho pensato di condividere lo snippet di codice.

Prima

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

Dopo

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

Aggiungendo le staffe {} è quello fissato per me.

Inoltre, per confermare è necessario anche escapeshellarg.

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

Tranne copione anche necessario:

set host [lindex $argv 0] 
set command [lindex $argv 1] 
Problemi correlati