0

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/'$mUsernameTesting540

私が得た値を印刷したとき$filedir

/home/servers2/Testing540

私の引用符は最初のコードスニペットで正しくエスケープされていますか?

4

2 に答える 2

1

簡単にデバッグできるものを作成していないため、正しい引用についての質問に答えるのは困難です。代わりに次のコードを検討してください。

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

次に、実際のコマンドをより簡単に検証できます。たとえば、inspect / output / logging: を使用し$commandます。

また、2 つのバリアントの違いをより簡単に比較できます。

また、エラー報告とログを最高レベルで有効にすると、変数$DIRが定義されていないという問題が発生する可能性があります。

Notice: 未定義の変数: DIR in ...

そのようなパス/ファイルがないため、これにより最初のコマンドが失敗します。それはあなたの問題である可能性が高いです。

気をつけて。

于 2012-12-23T17:06:25.240 に答える
0

問題は行末にあったことがわかりました。私はそれを次のように変更します:

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

そして、それはうまくいきました。私は\'前の権利を取り出さなければなりませんでした/server.properties'

于 2012-12-23T17:52:58.330 に答える