Exec или Shell_exec: переменные не передаются из php в скрипт

Я перепробовал много тестов, но мои 2 переменные просто не проходят, в то время как набор переменных внутри скрипта действительно корректно передается обратно в PHP.

Извлечение кода HTML/PHP:

<?php
$subject = $_POST['subject'];
$body = $_POST['body'];
$output = null;
exec('../scripts/my-script.sh $subject $body', $output);
?>
<p><?php echo "<pre>" . var_export($output, TRUE) . "</pre>";?></p>

my-script.sh:

subject=$1
body=$2
cd ~/scripts/
path=`pwd`
#
echo "--"$path >> ./log.txt
echo "--"$subject >> ./log.txt
echo "--"$body >> ./log.txt
#
echo "=="$path
echo "=="$subject
echo "=="$body
only $path gets written in log.txt, and passed back to php.
The 2 other variables subject and body are empty;

вывод html:

array (
0 => '==/home/account/scripts',
1 => '==',
2 => '==',
)

содержание log.txt:

--/home/account/scripts
--
--

Я пытался вставить двойные кавычки и по-разному форматировать переменные в вызове функции exec, но переменные subject и body всегда отображаются пустыми как в log.txt, так и обратно в HTML/PHP.

exec('../scripts/my-script.sh "$subject" "$body"', $output);
exec('../scripts/my-script.sh'.' '.$subject.' '.$body, $output);

Любая идея очень приветствуется!

2 ответа

Решение

Двойные кавычки должны быть в начале строки.

'some string "$var" somestring' // won't interpolate
"some string '$var' somestring" // will interpolate

или вы можете объединить их в строку

exec('../ems-scripts/mass-email-send.sh ' . $subject . ' ' . $body, $output)

Вы можете прочитать это обсуждение. Должен ли я использовать фигурные скобки или объединять переменные внутри строк? Ваша проблема больше связана с конкатенацией и интерполяцией переменных, чем с exec() а также shell_exec()

Проблема, похоже, заключается в цитатах. Если вы используете 'как у вас, значения не будут проанализированы

вместо exec('../ems-scripts/mass-email-send.sh $subject $body', $output);

пытаться

exec("../ems-scripts/mass-email-send.sh $subject $body", $output);

Другие вопросы по тегам