0

我有以下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

4

2 回答 2

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
于 2012-04-22T21:24:40.950 回答
0

在ssh2_execescapeshellcmd之前尝试。http://www.php.net/manual/en/function.escapeshellcmd.php

于 2012-04-22T21:31:10.470 回答