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