将PHP变量传递给Bash - 不止一个会破坏它

时间:2016-08-09 23:54:07

标签: php bash variables curl

服务器1:php脚本

服务器1将服务器2上bash脚本收到的$mp3file变量设置为$1

php脚本像这样调用ssh2_exec(减去所有连接信息):

$stream = ssh2_exec($connection, "/root/incoming/test.sh ".escapeshellarg($mp3file)." &> /dev/null &");

服务器2:bash脚本

test.sh(在服务器2上)包含一个简单的curl命令:

curl -o /path/to/downloaded/file/$1 http://remotefilepath.com/$1

这一切都很完美,文件按预期下载。

但是如果我尝试传递多个这样的变量:

$stream = ssh2_exec($connection, "/root/incoming/test.sh ".escapeshellarg($mp3file)." ".escapeshellarg($artwork)." &> /dev/null &");

该文件仅部分下载。

我在这里设置多个变量的方式是错误的,这打破了&> /dev/null &命令吗?

1 个答案:

答案 0 :(得分:0)

好的经过一些搞乱我发现我能让它工作的唯一方法是首先设置转义变量:

$mp3file = escapeshellarg($mp3file);
$artwork = escapeshellarg($artwork);
$title = escapeshellarg($title);
$safeurl = escapeshellarg($safeurl);

然后这样传递它们:

$stream = ssh2_exec($connection, "/root/incoming/test.sh $mp3file $artwork $title $safeurl &> /dev/null &");

我不确定这是唯一(或正确)的方法,但它确实有效。