我有以下php代码
if (!($stream = ssh2_exec($con, 'sed -i \'s/motd=A Minecraft Server/motd=\'.$name.\'s Server/g\' /home/servers/runner15/server.properties
'))) {
但是当我运行它而不是将文本“motd = A Minecraft Server”替换为“motd = runner15s Server”时,它将其更改为motd = .. s Server
这是逃避引号的事情
哦顺便说一句$ name持有runner15
答案 0 :(得分:2)
基本PHP字符串... '
字符串不插入变量,因此您的sed命令包含文字$
,n
,a
,m
,e
等...这将被解释为远程服务器上不存在的shell变量,并扩展为空字符串。
[...snip...]otd=A Minecraft Server/motd=\''.$name.'\'s [..snip...]
^-------^--- 'exit' the string in your client-side PHP
答案 1 :(得分:0)
在ssh2_exec之前尝试escapeshellcmd
。 http://www.php.net/manual/en/function.escapeshellcmd.php