Exec或Shell_exec:变量不会从php传递给脚本

时间:2014-01-24 08:55:45

标签: php variables exec is-empty

我尝试了很多测试,但我的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 个答案:

答案 0 :(得分:3)

双打引号应该在字符串的开头。

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

或者您可以将它们连接到字符串

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

您可以阅读此讨论Should I use curly brackets or concatenate variables within strings?您的问题更多地是关于变量连接和插值,而不是关于exec()shell_exec()

答案 1 :(得分:0)

问题似乎只是引用。如果您使用'就像,那么将不会解析值

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

尝试

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

相关问题