通过php中的ssh2_exec转义sed命令上的引号



我正试图在php中使用以下命令发送到我的服务器:

ssh2_exec($con,  'sed -i 's/max-players=4/max-players=8/g' ' . $filedir . ''/server.properties')

但它什么都没做。另一方面,这个命令:

ssh2_exec($con, 'sed -i 's/max-players=4/max-players=12/g' /home/servers2/'' . $mUsername . ''/server.properties')

工作得很好,我正在尝试从硬编码的目录更改为数据库中的目录。所以

$filedir = $DIR . $mUsername;

在这种情况下,$Dir'/home/servers2/',而$mUsername可以是Testing540

当我打印$filedir的值时,我得到了:

/home/servers2/Testing540

我的引号是否在第一个代码片段中转义?

您关于正确引用的问题很难回答,因为您无法创建易于调试的东西。请考虑以下代码:

$pattern = 'sed -i 's/max-players=4/max-players=8/g' %s'/server.properties';
$command = sprintf($pattern, $filedir);
$result  = ssh2_exec($con,  $command);

然后,您可以更容易地验证您的实际命令,例如通过检查/输出/记录:$command

此外,你可以更容易地比较这两种变体之间的区别

同时启用错误报告和最高级别的日志记录,您可能会遇到未定义变量$DIR的问题:

注意:未定义的变量:DIR在。。。

这将使您的第一个命令失败,因为当时没有这样的路径/文件。这很可能是你的问题。

小心。

原来问题就在这一行的末尾。我把它改成:

ssh2_exec($con,  'sed -i 's/max-players=4/max-players=8/g' ' . $filedir . '/server.properties')

而且效果很好。我必须在/server.properties' 之前取出'

最新更新