Передача нескольких переменных PHP в shell_exec ()?

Я вызываю test.sh из PHP, используя метод 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');

Однако сценарий командной строки сообщает, что он получил только 1 аргумент: /tmp/my_script.php

Когда я изменяю вызов на:

Код:

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

Он говорит, что получил 3 аргумента, но argv [1] и argv [2] пусты.

Когда я изменяю вызов на:

Код:

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

Сценарий наконец получает все 3 аргумента, как и предполагалось.

Всегда ли вам нужно отправлять только что цитированный текст со сценарием и не разрешается отправлять переменную, например, $ var? Или есть какой-то особый способ отправить $ var?

Ответы на вопрос(6)

+ Изменить

$page = shell_exec('/tmp/my_script.

в

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

Тогда ваш код будет терпеть пробелы в имени файла.

 David Jashi05 июн. 2013 г., 07:35
Да, я делаю намеренно. Моя настоящая ошибка была в том, что я забыл вывезти$my_url а также$my_refer вне строки.
Решение Вопроса

поэтому вы должны использовать их следующим образом:

$page = shell_exec("/tmp/my_script.php '".$my_url."' '".$my_refer."'");
 Faiyaz Alam18 июл. 2016 г., 13:18
@ AlfonsoFernandez-Окампоprint_r ($ _ SERVER [»ARGV»]));
 miken3207 мар. 2017 г., 21:19
Это абсолютно не будет работать. Переменные не интерполируются в одинарных кавычках.
 Henry Harris18 июн. 2014 г., 19:38
Как вы читаете это в my_script.php?
 miken3208 мар. 2017 г., 07:30
 Alfonso Fernandez-Ocampo26 нояб. 2014 г., 16:19
да, как вы берете эти параметры в/tmp/my_script.php "?
 miken3208 мар. 2017 г., 07:29
Они также не интерпретируются в одинарных кавычках.
 Code Lღver08 мар. 2017 г., 07:23
@ miken32 Возможно, вы не видели фигурные скобки, которые используются для управления переменными.
 user231438705 июн. 2013 г., 13:02
Это работает
 Code Lღver28 нояб. 2014 г., 07:21
@ AlfonsoFernandez-Ocampo Tryprint_r($_POST); чтобы получить параметры.

так что я думалЯ поделюсь своим фрагментом кода.

До

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

После

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

Добавление{} скобки это то, что исправило это для меня.

Также для подтвержденияescapeshellarg также необходимо.

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

Кроме скрипта также необходимо:

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

акже вы должны убедиться, что ваши аргументы правильно экранированы.

 $page = shell_exec('/tmp/myscript.php '.escapeshellarg($my_url).' '.escapeshellarg($my_refer));
 user231438705 июн. 2013 г., 07:40
Спасибо Orangepill .. Это работает

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

в

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

ИЛИ ЖЕ

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

Также обязательно используйтеescapeshellarg на обеих ваших ценностях.

Пример:

$my_url=escapeshellarg($my_url);
$my_refer=escapeshellarg($my_refer);
 David Chen05 июн. 2013 г., 07:29
PHP будет только анализировать$ переменные, заключенные в двойные кавычки (").
 David Jashi05 июн. 2013 г., 07:33
А как насчет пробелов в именах файлов?
 David Jashi05 июн. 2013 г., 07:31
Я неЯ думаю, это поможет. Лучше вставлять цитаты внутрь.
 DaoWen05 июн. 2013 г., 07:30
См. Документы о различиях между одинарными и двойными кавычками:php.net/manual/en/language.types.string.php
 Orangepill05 июн. 2013 г., 07:29
также убедитесь, что вы продезинфицировать с помощью escapseshellarg

Вы можете найтиsprintf полезно здесь:

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

Вы должны обязательно использоватьescapeshellarg как рекомендуется в других ответах, если выне тот, который поставляет вход.

Ваш ответ на вопрос