我正在尝试在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')
工作正常,我正在尝试从硬编码的dir转换为db的dir。所以
$filedir = $DIR . $mUsername;
在这种情况下, $Dir
为'/home/servers2/'
而$mUsername
可为Testing540
当我打印$filedir
的值时,我得到了:
/home/servers2/Testing540
我的引号是否在第一个代码段中直接转义?
答案 0 :(得分:1)
关于正确引用的问题很难回答,因为您没有创建可以轻松调试的内容。请考虑以下代码:
$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 in ...
这将使您的第一个命令失败,因为那时没有这样的路径/文件。这很可能是你的问题。
小心。
答案 1 :(得分:0)
原来问题出在行尾。我将其更改为:
ssh2_exec($con, 'sed -i \'s/max-players=4/max-players=8/g\' ' . $filedir . '/server.properties')
效果很好。我必须在\'
/server.properties'