我尝试了很多测试,但我的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);
任何想法都非常受欢迎!
答案 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);